“Winamp 风格”频谱分析仪
Posted
技术标签:
【中文标题】“Winamp 风格”频谱分析仪【英文标题】:"Winamp style" spectrum analyzer 【发布时间】:2010-01-04 06:51:27 【问题描述】:我有一个程序可以绘制信号的频谱分析(Amp/Freq),这很像 DFT 转换为极性的。但是,这并不完全是 winamp(右上角)或任何其他音频软件绘制的图形。我不太确定这种图叫什么(如果它有一个不同的名称),所以我不确定要查找什么。
我非常肯定频率轴是以两个指数为底的,但幅度轴让我感到困惑。
任何指针?
【问题讨论】:
这可能很有趣:***.com/questions/2466196/…. 【参考方案1】:实际上是一个有趣的问题。我知道你在说什么;频率轴肯定是对数的。但是幅度呢?作为对另一张海报的回应,幅度不能仅以 dB 为单位,因为 dB 没有零的概念。这引入了量化误差、SNR 和动态范围的概念。
假设接收到的数字化(即离散时间和离散幅度)时域信号 x[n] 等于 s[n] + e[n],其中 s[n] 是传输的离散-时间信号(即连续幅度)和 e[n] 是量化误差。假设 x[n] 用 b 位表示,为简单起见,取值在 [0,1) 中。那么e[n]的最大峰峰值幅度是一个量化级别,即2^-b。
动态范围定义为,以分贝为单位,20 log10 (max peak-to-peak |s[n]|)/(max peak-to-peak |e[n]|) = 20 log10 1 /(2^-b) = 20b log10 2 = 6.02b dB。对于 16 位音频,动态范围为 96 dB。对于 8 位音频,动态范围为 48 dB。
那么 Winamp 如何绘制振幅?我的猜测:
假设最小幅度为-6.02b dB,最大幅度为0 dB。在视觉上,Winamp 在绘制窗口时考虑了这些阈值。
使用了另一个非线性映射,例如 log(1+X)。这个函数总是非负的,当X很大时,它近似于log(X)。
还有其他知道的专家吗?让我知道你的想法。我也很感兴趣,具体是如何实现的。
【讨论】:
【参考方案2】:要生成功率谱,您需要执行以下步骤:
将窗函数应用于时域数据(例如汉宁窗) 计算 FFT 计算 N/2 个 FFT 点的 FFT bin 幅度对数(通常为10 * log10(re * re + im * im)
)
这给出了对数幅度(即 dB)与线性频率的关系。
如果您还想要一个对数频率标度,那么您需要从适当的 bin 范围内累积幅度(并且您需要一个相当大的 FFT 开始)。
【讨论】:
【参考方案3】:嗯,我不是 100% 确定你的意思,但肯定它只是从 FFT 中分桶数据?
如果你想获得这样的数据(对于 44Khz 文件)频率点为 22Khz、11Khz 5.5Khz 等,那么你可以使用小波分解,我猜...
这个帖子可能对你有点帮助......
Converting an FFT to a spectogram
与我猜想的频谱图相同的信息......
【讨论】:
【参考方案4】:您需要的是功率谱图。您必须计算信号当前窗口的 DFT。然后对每个值求平方。
【讨论】:
以上是关于“Winamp 风格”频谱分析仪的主要内容,如果未能解决你的问题,请参考以下文章