Matlab-frequency bin的正负频率

时间:2016-12-30 10:50:48

标签: matlab signal-processing fft

我正在使用MATLAB教程Frequency-Domain Linear Regression。有一部分代码,需要确定正负频率的频率仓",对于fft和ifft,这部分代码:

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是因为第一个bin是零频率),是某个公式还是什么?

1 个答案:

答案 0 :(得分: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+Fs以及f-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。