2017-04-02 55 views
1

假設我有一個平滑函數(表示爲向量):如何使用FFT查找周期函數的週期?

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

和我想找到其週期性 - PI(或甚至其頻率-2)。 我曾嘗試以下:

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

但顯然它不工作(情節不給我在「2」的峯值)。

請你幫我找一個找到值「2」的方法嗎?

在此先感謝

+0

請參閱[此問題](http://stackoverflow.com/a/4371627/253056)以獲取FFT bin索引如何與頻率相關的解釋。 –

+0

您是否在尋找未知頻率的諧波信號或任何一般信號的週期? – Royi

+0

我有$ f(x)$作爲某個pde的(週期性的)數值解,我想用FFT來找到它的週期性。所以我想你提到的第二個選項是正確的。謝謝 ! –

回答

2

你有幾個問題在這裏:

  1. 你計算xfft當你的實際信號是y

  2. x應弧度

  3. 您需要定義一個採樣r吃了並用它來確定頻率值沿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

因此,當我獲得函數(「輸入」)作爲pde的數值解時,我不能使用fft來查找週期? (即 - 在我的情況下,我想用傅里葉變換來找到一個函數的週期,這是一個非常混亂的pdes系統的解決方案。在數值求解問題之後,我得到一個向量x(這是我的域)和另一個向量f(數值解)...在這種情況下,我如何獲得採樣率?) –

1

在一般情況下,你可以」單獨使用FFT來查找週期性信號的週期。這是因爲FFT可以進行正弦基分解(或基變換),並且可以重複大量非正弦波形(看起來完全不像正弦波或單個正弦基矢量的信號)以形成周期函數,波形或信號。因此,在FFT結果中很可能完全不顯示周期函數或波形的頻率(稱爲缺失的基本問題)。

只有在接近或接近正弦信號的情況下,FFT才能可靠地報告周期函數週期的倒數。

有很多基音檢測/估計算法。您可以將FFT用作某些組合方法的子組件,包括倒譜或倒譜分析以及Harmonic Product Spectrum音調檢測方法。