Matlab,FFT频率范围差异还是相同?
我试图理解matlab中的FFT是如何工作的,特别是如何定义绘制它的频率范围。碰巧我从matlab帮助链接和其他讨论中读到了,我想(猜测)我对此感到困惑。 在matlab链接中: 它们将频率范围定义为:Matlab,FFT频率范围差异还是相同?,matlab,fft,dft,Matlab,Fft,Dft,我试图理解matlab中的FFT是如何工作的,特别是如何定义绘制它的频率范围。碰巧我从matlab帮助链接和其他讨论中读到了,我想(猜测)我对此感到困惑。 在matlab链接中: 它们将频率范围定义为: f = (0:n-1)*(fs/n) 使用n和fs作为: n = 2^nextpow2(L); % Next power of 2 from length of signal x fs = N/T; % N number of samples in x and T the total time
f = (0:n-1)*(fs/n)
使用n
和fs
作为:
n = 2^nextpow2(L); % Next power of 2 from length of signal x
fs = N/T; % N number of samples in x and T the total time of the recorded signal
但另一方面,在上一篇文章中
(基于先前版本的matlab),产生的频率范围定义为:
f = fs/2*linspace(0,1,NFFT/2+1);
与前面提到的n
一样使用NFFT
(信号长度的下一次幂为2x
)。
那么,基于此,这些不同的向量(方程1和最终方程)怎么可能是相同的呢?
如果您可以看到,向量是不同的,因为前者有
n
点,而后者有NFFT/2
点!事实上,系数(fs/n)
不同于fs/2
混淆可能是因为您所引用的两个示例以不同方式绘制fft结果。有关本说明中的参考信息,请参考以下代码
在第一个示例中,该图是频率范围内的功率谱(周期图)。请注意,在第一个图中,周期图并非以0为中心,这意味着频率范围似乎是奈奎斯特采样频率的两倍。如mathworks链接中所述,通常的做法是将周期图居中于0以避免这种混淆(图2)
对于第二个示例,采用相同的参数,原始图显示了傅里叶光谱的振幅,其归一化程度与第一个示例不同(图3)。使用Matlab的全频率排序语法(如代码中所述),将这个看似不同的fft结果转换为示例1的结果是很简单的;图4中复制了以0为中心的周期图的相同结果
因此,为了具体回答您的问题,两种情况下的频率范围相同,最大频率等于奈奎斯特采样频率,如中所示:
f = fs/2*linspace(0,1,NFFT/2+1);
理解dfft如何工作(同样在Matlab中)的关键是理解您只是在将离散数据集投影到傅里叶空间,其中Matlab中的fft()函数返回的是每个频率分量的展开系数,并且给出了系数的顺序(在Matlab中如示例2所示)通过:
有关更多详细信息,请参见DFT上的Wikipedia页面:
将忽略长度的fft作为2的幂参数,也可能对您有所帮助
y = fft(x).
在这种情况下,在y中只会看到一些与输入信号的精确系数相对应的非零分量。mathworks页面声称以下是使用或不使用此长度的动机:
“使用2的幂作为变换长度可以优化FFT算法,尽管在实践中,与使用n=m相比,执行时间通常相差不大。”
那么,基于此,这些不同的向量(方程1和最终方程)怎么可能是相同的呢
绘制FFT的整个n
点输出。这包括从0到接近fs
(精确地(n-1)/n*fs
)的频率。然后,他们进行以下观察(对FFT的实际输入有效):
频率范围的前半部分(从0到奈奎斯特频率fs/2
)足以识别数据中的分量频率,因为后半部分只是前半部分的反射
只选择不显示冗余的第二部分,然后使用一半的点数,这也覆盖了一半的频率范围
事实上,因子(fs/n)不同于fs/2
也许理解它的最简单方法是比较两个表达式的输出以获得n
的某个小值,即n=8
和设置fs=1
(因为fs
将两个表达式相乘)。一方面,第一个表达式的输出[0:n-1]*(fs/n)
将是:
0.000 0.125 0.250 0.500 0.625 0.750 0.875
0.000 0.125 0.250 0.500
而fs/2*linspace(0,1,n/2+1)
的输出为:
0.000 0.125 0.250 0.500 0.625 0.750 0.875
0.000 0.125 0.250 0.500
正如你所看到的,频率集在奈奎斯特频率
fs/2
平面上完全相同,而且非常简单。感谢你的解释,亲爱的侦探,谢谢。事实上,这是一个完整的答案,也是一个非常有用的代码,可以理解你的解释以及matlab的DFT和fft的一般内容。亲爱的Gohann,这是我的荣幸。我很高兴这对你有帮助。