计算频谱分析仪的值

时间:2013-03-10 07:32:24

标签: c equalizer

我将如何实施类似于以下WinAmp中的频谱分析仪?

Example of 'equaliser bars' from Winamp

仅仅通过观察它,我认为这些条形被渲染以显示输入音频数据的特定频带的“音量级别”;但是,我不确定如何实际计算绘制条形图这么简单的任务所需的数据。

根据我的说法和理解,计算这些值可以通过使用FFT来完成 - 但是,鉴于输入数据的缓冲区,我不确定如何计算这些值 - 我是否在正确的轨道上关于FFT?如何对输入数据应用FFT,并从FFT中获得表示特定频段“体积”的整数?

绘图部分不是问题,因为我可以直接绘制到我的帧缓冲区并将其渲染出来。我正在使用Nios II软CPU作为FPGA上的项目,以防任何人想知道潜在的硬件限制。音频数据以96kHz的24位数据形式出现。

2 个答案:

答案 0 :(得分:6)

您可能正在寻找FFTw

编辑:

详细说明你的问题:

计算这些值可以通过使用FFT来完成 - 但是,我不确定如何计算这些值,给定输入数据的缓冲区:是的,你是对的;这正是它的完成方式。你从当前正在播放的音频数据中取出一个(由于time-frequency uncertainty principle)样本片段而非常小(并且很小),并将其提供给(通常)离散的,实际的FFT(最着名,最广泛使用的一种)最快的是DFT的DCT系列 - 实际上FFTw中有大多数DCT的高度优化版本。然后取出下一个样本段并重复该过程。 FFT的输出将是已输入的音频信号的频率分解 - 然后您需要决定如何显示它(即,在FFT的输出上使用哪个函数,常见候选是f(x)= x; f(x)= sqrt(x); f(x)= log(x))以及如何呈现/动画以下读数(例如,您可以在时间方向上平均每个波段,或者您可以具有最大值“ “慢慢地”脱落。


愤怒编辑: 其他链接,因为它似乎有人知道如何使用谷歌:但不知道如何使用谷歌:

答案 1 :(得分:0)

这很简单 - 只需使用众多FFT算法中的一种!他们中的大多数都需要浮点计算,但谷歌搜索会带来只有整数的方法。你很有兴趣,FFT就是你想要的。

要理解如何应用FFT,你应该阅读关于离散傅立叶变换的这一页,尽管它在数学上非常重要:

要在FPGA上实现它,我将查看该项目的源代码:

这是一个以前的SO问题,总结了它是如何工作的(用任何语言)。

关于创建被称为“频谱分析器”的内容的大量信息,必须有数十个完整的实现,其中源代码是免费提供的。只需浏览谷歌搜索“频谱分析仪源代码C”,例如。