正确设置频率阵列

信息处理 fft 频率
2022-01-09 05:01:01

自上周以来,我才刚刚进入 FFT 的世界,因此我对如何设置频率阵列仍然没有一个清晰的整体概念。

evennumber的情况下N,我通常会这样做(关于奈奎斯特截止频率)

f=(N/2:N/21)fs

odd但是在number的情况下它是如何工作的N难道只是

f=((N+1)/2:(N+1)/21)fs

我提前感谢大家。

2个回答

发布给任何可能觉得这很有用的人...

我创建了一张图片,显示了 N 的奇数和偶数情况下的 DFT 频率仓间距,其中 N 是样本数。FFT 通常对偶数个样本进行操作(该算法通过反复将问题分成两半来工作),因此仅适用偶数情况。DC 分量 (0*fs) 始终是计算的一部分。奈奎斯特频率 (fs/2) 的 bin 仅在偶数情况下显示。高于奈奎斯特频率的频率以相反的顺序反射回频率轴的负侧。对于真实信号,反射的 FFT 值是其正对应物的复共轭。在复平面上描述了两种特定情况,奇数情况 N=5,偶数情况 N=8。在此处输入图像描述

简短的回答:是的,我想是的。

长答案:FFT 只是 DFT 的快速实现。N 点 DFT 操作的频率间隔为DFT 的样本,其中 对应于负频率。如果 N 是奇数,则小于并且下一个 DFT 频率,高于fsNωπN122πNπN+122πNπ

我认为您的答案是正确的,另一种思考方式是您有一个 DC bin,具有 (N-1)/2 个负频率和 (N-1)/2 个正频率。

更新:用于奇数 N DFT 频率的 MATLAB/Octave 语法:

freqs = (fs/N)*( (N-1)/2 : (N-1)/2 )

奇数 N DFT 频率的 Python/Numpy/Scipy 语法:

freqs = (fs/N) * arange(-(N-1)/2,(N+1)/2)

偶数和奇数 N DFT 频率的 Python/Numpy/Scipy 语法(通过@endolith):

fftshift(fftfreq(N,1./fs))