如何将波形数据转换为复数

时间:2011-07-05 10:11:20

标签: math audio signal-processing fft

我正在从麦克风中读取原始数据并进入FFT。我正在尝试的两个FFT库(AForgeExocortex.DSP)将复数作为输入,并将复数作为输出。

我正在努力了解复数是多少。

更具体地说 - 如何将从麦克风获得的原始音频数据转换为复数以便在FFT中进行处理? 如何将输出绘制成一个漂亮的频谱图(即从输出中读取频率和幅度)?

增加了奖励:除了上面提到的两个之外,.Net还有哪些FFT库?

2 个答案:

答案 0 :(得分:5)

在对实际数据执行FFT时,您只需将输入的虚部设置为零。 (请注意,FFT的输出仍然很复杂。)

绘制频谱图更为复杂 - 之前有关SO的帖子,但基本上你需要计算连续重叠时间窗口的功率谱(典型重叠= 50%),然后绘制这些功率谱的对数(dB)大小使用颜色或灰度强度作为幅度(通常在X轴上的时间和在Y轴上的频率)。计算功率谱:

  • window function应用于输入数据(例如汉宁窗口)
  • FFT
  • 取FFT输出的N/2re*re + im*im的幅度平方(10 * log10 (magnitude squared)
  • 将幅度转换为dB值({{1}})

答案 1 :(得分:1)

用于绘制“漂亮的”谱图:

FFT计算与窗口变换卷积的数据的本地频谱。

如果你不在FFT前面使用窗口函数,窗口函数默认情况下最终是一个FFT长度的矩形窗口,如果你不期望它有一个看起来很难看的变换它(有人称之为光谱“泄漏”)。您可能想尝试使用其他窗口函数(Von Hann,et.al。),其中由加窗FFT产生的卷积可能会产生“更好看”的频谱图。