我正在从麦克风中读取原始数据并进入FFT。我正在尝试的两个FFT库(AForge和Exocortex.DSP)将复数作为输入,并将复数作为输出。
我正在努力了解复数是多少。
更具体地说 - 如何将从麦克风获得的原始音频数据转换为复数以便在FFT中进行处理? 如何将输出绘制成一个漂亮的频谱图(即从输出中读取频率和幅度)?
增加了奖励:除了上面提到的两个之外,.Net还有哪些FFT库?
答案 0 :(得分:5)
在对实际数据执行FFT时,您只需将输入的虚部设置为零。 (请注意,FFT的输出仍然很复杂。)
绘制频谱图更为复杂 - 之前有关SO的帖子,但基本上你需要计算连续重叠时间窗口的功率谱(典型重叠= 50%),然后绘制这些功率谱的对数(dB)大小使用颜色或灰度强度作为幅度(通常在X轴上的时间和在Y轴上的频率)。计算功率谱:
N/2
值re*re + im*im
的幅度平方(10 * log10 (magnitude squared)
)答案 1 :(得分:1)
用于绘制“漂亮的”谱图:
FFT计算与窗口变换卷积的数据的本地频谱。
如果你不在FFT前面使用窗口函数,窗口函数默认情况下最终是一个FFT长度的矩形窗口,如果你不期望它有一个看起来很难看的变换它(有人称之为光谱“泄漏”)。您可能想尝试使用其他窗口函数(Von Hann,et.al。),其中由加窗FFT产生的卷积可能会产生“更好看”的频谱图。