【问题标题】:"Winamp style" spectrum analyzer“Winamp 风格”频谱​​分析仪
【发布时间】:2010-01-04 06:51:27
【问题描述】:

我有一个程序可以绘制信号的频谱分析(Amp/Freq),这很像 DFT 转换为极性的。但是,这并不完全是 winamp(右上角)或任何其他音频软件绘制的图形。我不太确定这种图叫什么(如果它有一个不同的名称),所以我不确定要查找什么。

我非常肯定频率轴是以两个指数为底的,但幅度轴让我感到困惑。

任何指针?

【问题讨论】:

标签: audio signal-processing fft spectrum


【解决方案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 如何绘制振幅?我的猜测:

  1. 假设最小幅度为-6.02b dB,最大幅度为0 dB。在视觉上,Winamp 在绘制窗口时考虑了这些阈值。

  2. 使用了另一个非线性映射,例如 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。然后对每个值求平方。

        【讨论】:

          猜你喜欢
          • 2020-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-20
          • 1970-01-01
          相关资源
          最近更新 更多