bueno, la forma más simple es que, si ha utilizado el fourier para encontrar los espectros, y necesita saber su frecuencia por cuánto se desplaza, puede hacer una cosa ...
1) averiguar la respuesta al impulso de ese espectro
2) convolucionarlo con un ruido
3) vea la señal que obtiene 4) tome su FFT solo para asegurarse, si coincide con la anterior
4) y ver los espectros promediando en diferentes partes ... para esto puedo dar un algoritmo ua en el software matemático, que es
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]
]
en este código, tengo un argumento para tomar pmsesignal, por lo que puede usar su propia señal en lugar de ella ...
No estoy seguro, qué bien lo expliqué, pero esto había funcionado en mi caso ...
¡Salud!