well, the simple way is , if u have used the fourier to find the spectra , and u need to know its frequency by how much is it shifted, u can do one thing ..
1) find out the impulse response from that spectra
2) convolve it with a noise
3) see the signal that u obtaine4) take its FFT just to be sure , if it matches with the previous one
4)and see the spectra by averaging in to differnt parts... for this i can give u a algorithm in mathematica software, which is
reflect[a_] := Module[{n = Length[a]},
RotateRight[a, Floor[n/2]]
]
freqAxis[len_] := Module[{},
If[OddQ[len],
Range[1, len] - (Ceiling[len/2.]),
Range[1, len] - (1 + Ceiling[len/2.])
]
];
colors = {Black, Red, Blue, Brown , ColorData["Legacy", "DarkGreen"],
ColorData["Legacy", "Goldenrod"], ColorData["Legacy", "DeepPink"],
Cyan, Orange, Purple, ColorData["Legacy", "DeepSkyBlue"], Magenta};
specPlot[pieces_, pieceLen_, color_] :=
Module[{data, spec, fAxis, pos},
fAxis = freqAxis[pieceLen];
data = Partition[Take[mysignal, pieces*pieceLen], pieceLen];
spec = Total[Abs[Fourier[data]]^2]/pieces;
spec = reflect[spec];
Print["valley=", Nearest[spec, 1.0][[1]], " atPos=",
pos = Position[spec, Nearest[spec, 1.0][[1]]][[1, 1]], " atFpos=",
Position[fAxis, 0][[1, 1]], " atF=", fAxis[[pos]], " firstMax=",
Max[Take[spec, Round[pieceLen/2]]], " atF=",
fAxis[[Position[spec, Max[Take[spec, Round[pieceLen/2]]]][[1,
1]]]], " lastMax=", Max[Take[spec, -Round[pieceLen/2]]], " atF=",
fAxis[[Position[spec, Max[Take[spec, -Round[pieceLen/2]]]][[1,
1]]]]];
ListLinePlot[Transpose[{fAxis, spec}], PlotStyle -> colors[[color]],
PlotLabel -> "N = " <> ToString[pieces], PlotRange -> All]
]
in this code , i have a argument to take pmsesignal , so u can use ur own signal instead of it..
i am not sure, how well i explained this, but this had worked in my case..
Cheers!