2012-02-17 5 views
-3

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

誰かがそれを行う特定のアルゴリズムを持っていますか?あなたはそれを見つけた場所を知っていますか?

私はfftを知っていますが、私はそれが私に波の周期(時間の位置)を与える方法を知らない。

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

私はパスカル、MATLABが欲しい...

+1

1つの期間を検出することによって、期間の長さを意味するのか、またはある時点の信号が同位相であるのかを意味しますか? – Owen

+1

本当の質問はしていません。あなたのタグは無意味です。彼らは共通性が全くありません。ランダムに選択しましたか? –

+1

あなたは実際に何をしたいですか?特定の時点での周波数の位相を検出しますか?振幅は?シグナルの中で最も優勢な周波数を探したいですか? FFTはこれらのいずれにも使用できますが、探しているものが実際に分かっている必要があります。時間内のポジションはどういう意味ですか?波の周期について話すときは意味がありません。 – boileau

答えて

1

これは、すべての最良の方法では、おそらくではなく、周期信号の 期間を見つけるために働くことができる一つの方法は、unwrap the phaseにあります。 acf見て

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 

その他thingns、 fft:ここではMatlabの (実際オクターブ)コードがあります。

+0

アルゴリズムはPitchmarker、matlabでアルゴリズムを検索しています – Carl

関連する問題