音频文件:44100 Hz,16 位,双声道。
我使用FFT计算输出的每个频率bin的幅度。但我不知道如何将其缩放以绘制(实时)频谱。
有人能帮我吗?
音频文件:44100 Hz,16 位,双声道。
我使用FFT计算输出的每个频率bin的幅度。但我不知道如何将其缩放以绘制(实时)频谱。
有人能帮我吗?
好的,有多种方法可以做到这一点...
例如:如果您想要一个分贝刻度,对于每个虚拟样本,计算
ymag = (x.real^2 + x.imag^2)
您只需要遍历一半的数组,因为您只需要正频率;第二半部分将只是第一半部分的重复,实际数据输入FFT。
搜索所得值中的最小值和最大值并存储它们。如果您的最小值为零,请选择一些非常小的值来代替您的最小值。(0.000001或其他)。然后,将您的最小分贝值设置为mindB = 10 * log10(最小值)。
现在,返回的第一个值(sample [0])将是您的直流偏移量,您可能希望将其设置为零。
然后,对于每个样本,计算:ydB = 10 * log10(ymag / maximum)。
这应该给您一个表示每个样本频率分贝下降的数组。您可以按需缩放此数组;如果您的绘图区域从y = 5到y = 200,则可以使用以下内容:
yscaled = ((ydB / -mindB) *(200-5)+ 200)
我还会确保缩放值符合范围,以防有FP舍入误差。
yscaled = min(max(yscaled,5),200)
我已经有一段时间没有做这个了,所以如果有任何数学错误,请谅解。:)