我有一个 FFT 结果。它们存储在两个 double
数组中:一个实部数组和一个虚部数组。如何确定这些数组中每个元素对应的频率?
换句话说,我想创建一个数组来存储 FFT 的每个实部和虚部的频率。
最佳答案
FFT 中的第一个 bin 是 DC (0 Hz),第二个 bin 是 Fs/N
,其中 Fs
是采样率,N
是 FFT 的大小。下一个 bin 是 2 * Fs/N
。笼统地说,nth bin 是 n * Fs/N
。
因此,如果您的采样率 Fs
为 44.1 kHz,您的 FFT 大小 N
为 1024,则 FFT 输出区间为:
0: 0 * 44100 / 1024 = 0.0 Hz
1: 1 * 44100 / 1024 = 43.1 Hz
2: 2 * 44100 / 1024 = 86.1 Hz
3: 3 * 44100 / 1024 = 129.2 Hz
4: ...
5: ...
...
511: 511 * 44100 / 1024 = 22006.9 Hz
请注意,对于实数输入信号(虚部全为零),FFT 的后半部分(从 N/2 + 1
到 N - 1
的区间)包含没有有用的附加信息(它们与前 N/2 - 1
bins 具有复数共轭对称性)。最后一个有用的 bin(用于实际应用)位于 N/2 - 1
,对应于上例中的 22006.9 Hz。 N/2
处的 bin 表示奈奎斯特频率下的能量,即 Fs/2
(在此示例中 = 22050 Hz),但这通常没有任何实际用途,因为抗混叠滤波器通常会衰减 Fs/2
及以上的任何信号。
关于c# - 如何获得 FFT 中每个值的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364823/