2010-01-04 89 views
4

我有一个程序,绘制频谱分析(Amp/Freq)的信号,这是很好的DFT转换为极地。但是,这并不是像winamp(右上角)或者其他任何音频软件地块那样的图表。我不确定这种图形称为什么(如果它有一个独特的名字),所以我不知道该找什么。“Winamp风格”的频谱分析仪

我对频率轴是基础的两个指数,振幅轴困惑我虽然积极。

任何指针?

+0

这可能是有趣的:http://stackoverflow.com/questions/2466196/normalize-fft-magnitude-to-imitate-wmp。 – mtrw 2010-03-26 05:02:52

回答

0

嗯,我不是100%确定你是什么意思,但肯定它只是从FFT中获取数据?

如果你想要得到的数据,你有(对于44KHz的文件),在22kHz的频率点,11KHZ 5.5Khz等,那么你可以使用一个小波分解,我猜...

此线可能帮你的有点...

Converting an FFT to a spectogram

相同的排序为频谱我猜信息...

2

要生成你需要做以下步骤功率谱:

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

这给出了对数幅度(即dB为单位)与线性频率。

如果您还想要一个对数频率刻度,那么您将需要累积适当范围的分档的大小(并且您需要一个相当大的FFT开始)。

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-to-peak | s [n] |)/(max-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)。

有没有其他专家知道?让我知道你的想法。我也很感兴趣,究竟是如何实现的。

0

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