我有一个振幅频率响应点的列表。振幅以分贝表示。
任务是将这个AFR列表导出到一些硬件DSP设备的一组系数中。我知道这个设备的文件格式。该设备的规格说明说它需要12288个系数,并且DSP有2个FIR滤波器块(每个6144个抽头)。其思想是,在加载这些系数后,该装置应作为一个均衡器,根据初始幅频点列表对信号进行变换。
我发现FIR滤波器的系数可以通过对期望的频率响应进行傅里叶逆变换,并使用某种加窗函数(最好不是矩形)来计算。
问题是我不擅长信号处理,我对FIRs不太了解,我用FFT来获取音频数据的频率响应,但是对于FFT和相关的东西是如何工作的,我仍然有一个相当模糊的概念。
点的计算应该在C#或C++中完成(我擅长创建C++/CLI ),这样我就可以将它集成到已经存在的应用程序中。导出过程不需要时间,所以我可以使用简单而缓慢的算法,但无论如何,在中程计算机上不应该超过一分钟。
是否有任何免费的库或代码从振幅-频率响应数据中获取FIR系数?
最好的解决方案是一个类似于“黑匣子”的东西,这样我就可以给出AFR点的列表并得到12288个系数,但如果能轻松地将它放在一起,我也会感激多个库/代码片段。
更多信息:
将通过该FIR的音频的systems
计算这些点的公式如下:
float x;
for(int i = 0; i<bandPoints; i++){
x = (((float)i + 1) / ((float)(bandPoints + 2)));
bandsHz[i] = ((x*x)*(22000-20))+20; // 20...22000
}发布于 2011-10-07 06:17:54
寻找良好的FIR系数的标准方法是使用"Remez交换“算法。我找到了一个指向某些代码的链接(还没有亲自尝试过),您可能会发现它很有用:http://www.janovetz.com/jake/remez/remez-19980711.zip。另一个要搜索的关键词是"Parks-McClellan“。
该算法的输入是对振幅与频率的描述,以及一组权重因子与频率的关系,它们描述了在该频率上满足振幅要求的相对重要性。然后,该算法在最小最大意义上找到最佳滤波器(最大误差最小化).
https://stackoverflow.com/questions/7678521
复制相似问题