【问题标题】:Matlab-frequency bin of the positive and negative frequencymatlab-频率bin的正负频率
【发布时间】:2016-12-30 10:50:48
【问题描述】:

我正在使用 MATLAB 教程Frequency-Domain Linear Regression。有一部分代码,需要确定“正负频率的分频bin”,对于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 是因为第一个箱是零频率),是某个公式还是什么?

【问题讨论】:

    标签: matlab signal-processing fft


    【解决方案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。

    【讨论】:

    • 谢谢。如果在我的示例中时间序列的长度是奇数,对应的索引是十进制数怎么办? Fs也是12。你能再解释一下“注意频率对于Fs的偏移是不变的。换句话说,f和f+Fs和f-Fs都是等价的。”
    • 索引大于或等于 N/2+1 可以被认为是负数,无论 N 是偶数还是奇数。 f_k 和 k 之间的关系,由答案中的前两个方程描述,适用于任何 N 值。关于频移不变性:这与离散时间表示有关。做这个实验:绘制两个正弦曲线,频率分别为 1 kHz 和 49 kHz,以 48 kHz 采样。它们看起来一样吗?任何两个由频率 Fs 分隔的正弦曲线将无法区分。 More details.
    • 但是如果我知道 k 是十进制数呢?我需要稍后使用 k 像一系列傅立叶系数的索引?
    • @nick_name 如果k 是小数,则通常可以将其四舍五入到最接近的整数。但这真的取决于应用程序。您还可以使用更长的 FFT 大小,例如 X = fft(x, N)。频率区间的间距是N 的函数,它可以大于x 的长度。有关更多详细信息,请阅读 FFT 中的零填充。
    猜你喜欢
    • 2022-11-07
    • 2011-02-05
    • 2013-12-29
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    相关资源
    最近更新 更多