2017-04-02 7 views
1

내가 (벡터로 표현) 매끄러운 기능이 있다고 가정 :FFT를 사용하여주기 함수의주기를 찾는 방법은 무엇입니까?

x=0:0.1:1000; 
y=sin(2*x); 

을하고 나는 그것의 주기성 찾으려 - 파이 (또는 주파수를 -2). 나는 다음과 같은 시도 :

nfft=1024; 
Y=fft(y,nfft); 
Y=abs(Y(1:nfft/2)); 
plot(Y); 

을하지만, 분명히이 작동하지 않습니다 (줄거리 나에게 "2"에서 피크를 제공하지 않습니다).

"2"값을 찾는 방법을 찾도록 도와 주시겠습니까? 사전에

감사

+0

FFT 빈 지수가 빈도와 관련되는 방법에 대한 설명은 [이 질문 (http://stackoverflow.com/a/4371627/253056)을 참조하십시오. –

+0

알 수없는 주파수 또는 일반적으로 신호의 고조파 신호를 찾으십니까? – Royi

+0

일부 pde에 대한 (주기적) 수치 해법으로 $ f (x) $를 가졌으므로 FFT를 사용하여 그 주기성을 찾고 싶습니다. 그래서 당신이 언급 한 두 번째 옵션이 정확하다고 생각합니다. 감사 ! –

답변

2

당신은 여기에 몇 가지 문제가 있습니다

  1. 실제 신호가 y

  2. x 라디안에 있어야합니다 때 당신은 fftx의 계산됩니다

  3. 샘플링을 정의해야합니다. 먹고 우리가이 모든 일을 해결하면

그래서, x 축 방향의 주파수 값을 결정하기 위해 그것을 사용, 우리가 얻을 : 일반적으로

samplingRate = 1000; % Samples per period 
nPeriods = 10; 
nSamples = samplingRate * nPeriods; 

x = linspace(0, 2*pi*nPeriods, nSamples); 
y = sin(2*x); 

F = fft(y); 

amplitude = abs(F/nSamples); 

f = samplingRate/nSamples*[0:(nSamples/2-1),-nSamples/2:-1]; 

plot(f, amplitude) 

enter image description here

+0

당신 말이 맞아요, 물론 fft (y)를 의미하고 그것을 고쳤습니다. 나는 당신의 대답을 이해한다고 생각하지만 지금은 x의 가치에 대한 통제권이 없다고 가정합니다. 즉, 다른 벡터 -x 위에 정의 된 함수 (벡터로)가 주어진다. (그리고 나는 그 주파수를 찾고 싶다.) 샘플링 속도를 결정하고 방금 작성한 코드를 사용하려면 어떻게해야합니까? 고마워요! –

+1

@ Dr.John 주파수를 결정하려면 입력 샘플링 속도를 알아야합니다. – Suever

+0

그래서 fde를 사용하여 pde에 대한 수치 솔루션으로 함수 ("입력")를 구하는 기간을 찾을 수 없습니까? (즉, 제 경우에는 퓨리에 변환을 사용하여 pdes의 매우 복잡한 시스템에 대한 해답을 찾는 함수의 기간을 찾고 싶습니다. 문제를 수치 적으로 풀면 벡터 x (내 도메인)를 얻습니다. 다른 벡터 f (수치 해법) ... 그런 경우 어떻게 샘플링 속도를 얻을 수 있습니까?) –

1

, 당신이 할 수있는 ' 주기적 신호의주기를 찾기 위해 FFT 만 사용하십시오. 이는 FFT가 사인파 기반 분해 (또는 기본 변환)를 수행하고 비 사인 곡선 파형 (사인파 또는 단일 사인 곡선 기본 벡터와 같이 전혀 보이지 않는 신호)을 반복하여주기 함수, 파형 또는 신호를 형성 할 수 있기 때문입니다. 따라서 FFT 결과에서주기 함수 또는 파형의 빈도가 전혀 나타나지 않을 수도 있습니다 (누락 된 기본 문제라고 함).

정현파 신호가 거의 비슷하거나 가까운 경우에만 FFT가 해당주기 기능의주기의 역수를 신뢰할 수있게보고합니다.

피치 감지/추정 알고리즘이 많이 있습니다. c 스트 럼 또는 c 스트 analysis 분석 및 고조파 Spect 스펙트럼 피치 검출 방법을 포함하여 일부 복합 메 소드의 하위 구성 요소로 FFT를 사용할 수 있습니다.