2016-12-30 107 views
0

我正在使用MATLAB教程Frequency-Domain Linear Regression。有的代碼,其中必須確定「正和負頻率的頻率倉」,對於FFT和IFFT的一部分,這部分代碼:正負頻率的Matlab-frequency bin

freqbin = 72/12; 
freqbins = [freqbin 72-freqbin]+1; 
tsfit = zeros(72,1); 
tsfit(freqbins) = tsdft(freqbins); 
tsfit = ifft(tsfit); 
mu = mean(ts); 
tsfit = mu+tsfit; 

時間序列的長度是72,且有12個月是一個週期。對於正頻率如何只能有一個頻率窗口,我們怎麼知道它恰好是72/12 + 1(+1是因爲第一個窗口是零頻率),那是一些公式還是什麼?

回答

0

讓我們從一些常規筆記開始。如果採樣率是Fs,和樣品中的FFT的數量爲N,然後用MATLAB索引k的bin的頻率爲:

f_k = (k-1) * Fs/N ; 

或者,反過來,

k = f_k * N/Fs + 1; 

因此, FFT矢量的元素對應於頻率0, Fs/N, 2*Fs/N, ..., (N-1)*Fs/N

請注意,頻率是不變的,移動Fs。換句話說,ff+Fsf-Fs都是等同的。因此,您可以將FFT矢量的前半部分對應正頻率(指數:1到N/2;頻率:0(N/2-1)/N*Fs),而後半部分對應負頻率(指數:N/2 + 1到N;頻率:-Fs/2-Fs/N)。在這裏,爲了簡潔起見,我將0包含在正頻率集合中。現在

,來到你的具體的例子:

N = 72 
Fs = 12 ; % samples per year 

所以,正頻率範圍分別爲每年0Fs/2 = 6週期,對應於指數1到36。

您有興趣找到相應於每年1個週期的FFT樣本。這對應於索引1 * 72/12 + 1 = 7。 由於FFT對於實際信號是對稱的,因此您也有興趣找到對應於每年頻率-1週期的FFT採樣,該採樣使用移位不變性質,也相當於每年-1 + Fs = 11個週期。相應的索引是(12-1) * 72/12 + 1 = 67

總之,

  • 有36個正頻率(包括0),而不是1
  • 的算法是感興趣的只是一個具有最高幅度的正頻率。
  • 該頻率恰好是每年1個週期。相應的MATLAB索引爲7。
  • 頻率的鏡像是每年-1週期,其對應於MATLAB索引67.
+0

感謝。如果在我的例子中,時間序列的長度是奇數,那對應於十進制數的索引呢? Fs也是12. 你能再解釋一下嗎?「注意頻率對於Fs的移動是不變的,換句話說,f和f + Fs和f-Fs都是等價的。「 –

+0

無論N是偶數還是奇數,大於或等於N/2 + 1的指數都可以被認爲是負數。由回答中的前兩個方程描述的f_k和k之間的關係適用於任何N值。關於頻移不變性:這與頻率離散時間表示有關:做這個實驗:繪製兩個正弦曲線,頻率分別爲1 kHz和49 kHz,採樣頻率爲48 kHz,它們看起來相同嗎? (http://allsignalprocessing.com/discrete-time-frequency-avoid-confusion/) – aksadv

+0

但是如果我得到那個k是十進制數?我需要用k後來像索引一樣用於系列傅里葉係數? –