tốt, cách đơn giản là, nếu bạn đã sử dụng vật cản để tìm quang phổ, và bạn cần biết tần số của nó bằng cách dịch chuyển bao nhiêu, bạn có thể làm một điều ..
1) tìm ra phản ứng thúc đẩy từ quang phổ đó
2) kết hợp nó với một tiếng ồn
3) xem tín hiệu mà bạn có được 4) chỉ lấy FFT của nó để chắc chắn, nếu nó khớp với tín hiệu trước đó
4) và xem phổ bằng cách lấy trung bình các phần khác nhau ... vì điều này tôi có thể đưa ra thuật toán ua trong phần mềm mathicala, đó là
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]
]
trong mã này, tôi có một đối số để lấy pmsesignal, vì vậy bạn có thể sử dụng tín hiệu của riêng bạn thay vì nó ..
tôi không chắc chắn, tôi đã giải thích điều này tốt như thế nào, nhưng điều này đã làm việc trong trường hợp của tôi ..
Chúc mừng!