c# - 如何获得 FFT 中每个值的频率?

标签 c# signal-processing fft

我有一个 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 + 1N - 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/

相关文章:

c# - WPF 相对绑定(bind)异常

c# - 求解方程从3个点找到圆心

python - 如何从音频信号中识别各个成分?

Python 以 4D 结构过滤信号

python - Python 中的 Parseval 定理

c# - 当构造函数使用提供给第一个构造函数的对象调用另一个构造函数时,您可以检查 null 吗?

c# - Xamarin.iOS 上的 sqlite 中的缓慢 SELECT

c - 使用 C 在显示屏上通过停止/暂停/播放按钮绘制正弦波

c++ - 不能在简单的余弦波上应用 FFT

android - 如何通过将Java中的fft数据清零来过滤音频(android)