正负频率的matlab-frequency bin

Matlab-frequency bin of the positive and negative frequency

我正在使用 MATLAB 教程 Frequency-Domain Linear Regression。有一段代码,这里需要确定"frequency bin of the positive and negative frequency",对于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 是因为第一个仓是零频率),是某个公式还是什么?

让我们从一些一般说明开始。如果采样率为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。