我正在使用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是零频率),是某个公式还是什么?
答案 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
的移位不变。换句话说,f
和f+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
因此,正频率范围从每年0
到Fs/2 = 6
个周期,分别对应于指数1到36。
您有兴趣找到与每年频率1周期相对应的FFT样本。这对应于索引1 * 72 / 12 + 1 = 7
。
由于FFT对于实际信号是对称的,因此您还有兴趣找到与每年频率-1周期相对应的FFT样本,使用移位不变性属性,也相当于每年-1 + Fs = 11
个周期。相应的索引是(12-1) * 72 / 12 + 1 = 67
。
总之,