4

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

我对频率轴以两个指数为底非常积极,但幅度轴让我感到困惑。

任何指针?

4

4 回答 4

3

实际上是一个有趣的问题。我知道你在说什么; 频率轴肯定是对数的。但是幅度呢?作为对另一张海报的回应,幅度不能仅以 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)。

还有其他知道的高手吗?让我知道你的想法。我也很感兴趣,这到底是如何实现的。

于 2010-02-09T17:17:46.697 回答
2

要生成功率谱,您需要执行以下步骤:

  • 将窗函数应用于时域数据(例如汉宁窗)
  • 计算 FFT
  • 计算 N/2 个 FFT 点的 FFT bin 幅度的对数(通常10 * log10(re * re + im * im)

这给出了对数幅度(即 dB)与线性频率的关系。

如果您还想要一个对数频率标度,那么您将需要从适当的 bin 范围内累积幅度(并且您将需要一个相当大的 FFT 开始)。

于 2010-01-19T08:56:00.210 回答
0

你需要的是功率谱图。您必须计算信号当前窗口的 DFT。然后对每个值进行平方。

于 2010-03-13T19:41:02.853 回答
0

好吧,我不是 100% 确定你的意思,但肯定它只是从 FFT 中存储数据?

如果你想获得这样的数据(对于 44Khz 文件)频率点为 22Khz、11Khz 5.5Khz 等,那么你可以使用小波分解,我猜......

这个线程可能会帮助你一点......

将 FFT 转换为频谱图

与我猜想的频谱图相同的信息......

于 2010-01-04T23:21:24.733 回答