2012-02-17 7 views
-3

웨이브 신호에서 1주기를 감지하는 가장 좋은 방법은 무엇입니까?웨이브 신호 프로세스 (기간)

누군가 특정 알고리즘을 사용하고 있습니까? 그리고 어디에서 발견했는지 아십니까?

나는 fft를 알고 있지만 웨이브주기 (시간상의 위치)를 어떻게 내는지 알려지지 않았다.

마침표로 신호를 분할하십시오!

나는

+1

1주기를 감지하면 마침표의 길이를 의미합니까, 아니면 위상이 일정한 지점에 있습니까? – Owen

+1

정말 질문하지 않았고 태그는 의미가 없습니다. 그들은 공통점이 전혀 없습니다. 무작위로 선택 했니? –

+1

실제로 원하는 것은 무엇입니까? 특정 시점에서 주파수의 위상을 감지하고 싶습니까? 진폭은? 신호에서 가장 우세한 주파수를 찾고 싶습니까? FFT는이 중 어떤 것에도 사용될 수 있지만 실제로 찾고있는 것이 무엇인지를 알아야합니다. 시간상의 직위 란 무엇을 의미합니까? 파도주기에 대해 말할 때 이것은 의미가 없습니다. – boileau

답변

1

이 모든 최선의 방법에 아마 아니지만 ... 파스칼, MATLAB을 싶습니다하지만주기적인 신호의 기간을 찾기 위해 일할 수있는 한 가지 방법은 unwrap the phase이다.

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이 acf에서 fft을 보는 : 여기 matlab에 (실제로 옥타브) 코드입니다.

+0

알고리즘은 Pitchmarker는 matlab에 알고리즘을 검색합니다 – Carl