Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 频谱分析仪的计算值_C_Equalizer - Fatal编程技术网

C 频谱分析仪的计算值

C 频谱分析仪的计算值,c,equalizer,C,Equalizer,我将如何实现下面WinAmp中的频谱分析仪 仅通过观察,我认为这些条显示输入音频数据特定频带的“音量水平”;然而,我不确定如何实际计算绘制条形图这一相当简单的任务所需的数据 据我所知,计算这些值可以通过使用FFT来完成——然而,我不确定如何计算这些值,给定一个输入数据缓冲区——我对FFT的理解是否正确?我如何对输入数据应用FFT,并从FFT中得到一个整数,表示特定频带的“体积” 绘图部分不是问题,因为我可以直接绘制到帧缓冲区并渲染出来。我在FPGA上做这个项目,使用NIOSII软CPU,以防有

我将如何实现下面WinAmp中的频谱分析仪

仅通过观察,我认为这些条显示输入音频数据特定频带的“音量水平”;然而,我不确定如何实际计算绘制条形图这一相当简单的任务所需的数据

据我所知,计算这些值可以通过使用FFT来完成——然而,我不确定如何计算这些值,给定一个输入数据缓冲区——我对FFT的理解是否正确?我如何对输入数据应用FFT,并从FFT中得到一个整数,表示特定频带的“体积”


绘图部分不是问题,因为我可以直接绘制到帧缓冲区并渲染出来。我在FPGA上做这个项目,使用NIOSII软CPU,以防有人想知道潜在的硬件限制。音频数据以96kHz的频率以24位数据的形式输入。

这非常简单-只需使用众多FFT算法中的一种!大多数方法都需要浮点运算,但谷歌搜索只能找到整数。不过你很在行,FFT才是你想要的

要了解如何应用FFT,您应该阅读本页离散傅里叶变换,尽管它的数学内容相当繁重:

为了在您的FPGA上实现它,我将看一下这个项目的源代码:

这是前面的一个SO问题,总结了它是如何工作的(在任何语言中)


关于创建所谓的“频谱分析器”,有大量的信息,必须有几十个完整的实现,源代码可以免费获得。例如,在谷歌搜索“频谱分析仪源代码C”就可以了。

你可能正在寻找

编辑:

请详细说明你的问题:

计算这些值可以通过使用FFT来完成——然而,我不确定如何计算这些值,给定一个输入数据缓冲区:是的,你是对的;就是这样做的。您从当前播放的音频数据中提取一个(必要的小,因为)采样段,并将其馈送到一个(通常)离散的、仅实FFT(最著名、使用最广泛、速度最快的DFT DCT系列之一-事实上,FFTw中大多数DCT都有高度优化的版本)。然后取出下一个样本段并重复该过程。 FFT的输出将是输入的音频信号的频率分解-然后您需要决定如何显示它(即在FFT的输出上使用哪个函数,常见的候选函数是f(x)=x;f(x)=sqrt(x);f(x)=log(x))以及如何显示/动画以下读数(例如,你可以在时间方向上平均每个波段,或者你可以让最大值慢慢“下降”)


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


条的长度与特定通道功率峰值的对数成正比。我不明白为什么我的责任是关闭一个可以说是最著名的FFT库的官方网站。你知道如何使用谷歌吗?那么你应该能够访问页面的缓存版本,而不是给出毫无意义的-1@Zeta这比你给出的(IMHO braindead)原始理由要好。我会详细说明。你必须承认,一个指向离线(或可能在未来离线)资源的答案基本上是(IMHO)没用。另请参见;但是,由于您已经开始详细说明,我删除了我的否决票。顺便说一句,我知道如何使用缓存站点,但将来可能访问此页面的其他人可能不会。答案不仅适用于当前的OP,也适用于未来的读者!