我正在从麦克风读取原始数据并将其输入 FFT。我正在尝试的两个 FFT 库( AForge 和 Exocortex.DSP )将复数作为输入并给出复数作为输出。
我试图理解什么是复数。
更具体地说 - 如何将从麦克风获得的原始音频数据转换为复数以便在 FFT 中进行处理?
如何将输出绘制成漂亮的频谱图(即从输出中读取频率和幅度)?
额外的好处:除了提到的两个之外,.Net 还有哪些 FFT 库?
最佳答案
当对真实数据执行 FFT 时,您只需将输入的虚部设置为零。 (请注意,FFT 的输出仍然很复杂。)
绘制频谱图更为复杂 - 之前有关于此的帖子,但本质上您需要计算连续重叠时间窗口的功率谱(典型重叠 = 50%),然后绘制使用颜色或灰度强度表示这些功率谱的 log (dB) 幅度(通常在 X 轴上显示时间,在 Y 轴上显示频率)。计算功率谱:
- 申请window function输入数据(例如汉宁窗)
- 快速傅里叶变换
- 取 FFT 输出的前
N/2
个值的幅度平方 (re*re + im*im
) - 将幅度转换为 dB 值 (
10 * log10(幅度平方)
)
关于math - 如何将波浪数据转换为复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6581001/