-3

波信号の 1 周期を検出する最良の方法は何ですか?

誰かがそれを行うための特定のアルゴリズムを持っていますか? そして、どこで見つけたか知っていますか?

私はfftを知っていますが、それがどのようにして波の周期(時間の位置)を与えるのかわかりません。

信号をピリオドに分割してください!

パスカル、マトラブが欲しい...

4

1 に答える 1

1

これはおそらく最善の方法ではありませんが、周期信号の周期を見つけるために機能する 1 つの方法は、位相をアンラップする ことです。ここにMatlab(実際にはOctave)コードがあります:

t = linspace(0, 20, 50);
sig = sin(t) + rand(size(t))*0.2;

% Hilbert transform to give an analytic signal.
% The complex argument will
% now be the instantaneous phase.
n = length(sig);
m = n/2+1;
U = fft(sig) / length(sig);
U((m+1):n) = 0;
cpx = ifft(U);

% Get the phase.
phase = arg(cpx);

% Unwrap the phase.
for i = 2:length(phase)
    k = round((phase(i) - phase(i-1))/(2*pi));
    phase(i) = phase(i) - k*2*pi;
end

% Fit a linear model.
lin_est = [t', repmat(1, length(t), 1)] \ phase';

% The frequency is the rate of change of the phase over time.
freq_est = lin_est(1)/2/pi
T_est = 1 / freq_est

その他の注意事項acffft

于 2012-02-17T07:30:08.177 に答える