快速将带通滤波器应用于浮点数组
Posted
技术标签:
【中文标题】快速将带通滤波器应用于浮点数组【英文标题】:Apply bandpass filter to float array in swift 【发布时间】:2018-03-19 22:40:00 【问题描述】:我已经为此苦苦挣扎了一段时间。对于 ios 应用程序,我正在使用设备的麦克风录制一些音频。我后来尝试评估录音。我使用 SciPy 在 Python 中完成了所有工作,而且效果非常好。我使用了 SciPy 的巴特沃斯过滤器实现。
但是当我尝试将我的代码翻译成 Swift 时,我找不到将带通滤波器应用到我的浮点数组的好方法。
谁能引导我走向正确的方向,或者你是否完成了代码示例?我需要一个频率范围为 1100 到 2100 Hz 的带通滤波器。
【问题讨论】:
也许这会有所帮助github.com/bartolsthoorn/NVDSP 谢谢。图书馆工作得很好。虽然它没有给我 SciPy 的巴特沃斯过滤器提供的锐利边缘。但对于我的用例来说已经足够了。 您能否将您的更新推广为答案并接受它?其他人也问过同样的问题,但我不能在没有答案的情况下重复这个问题。 【参考方案1】:对于任何未来的访问者,这里是解决方案:
https://github.com/bartolsthoorn/NVDSP 感谢答案,这个库解决了它。 我必须为 Swift 创建一个桥接头,但这不是什么大问题。最终代码如下所示。
let bandpass: NVBandpassFilter = NVBandpassFilter(samplingRate: fs)
bandpass.centerFrequency = 1600.0
bandpass.q = 1.6
bandpass.filterData(&DATA, numFrames: nsamples, numChannels: 1)
Q值可以这样计算:
Q = center_frequency / (top_frequency - bottom_frequency)
【讨论】:
以上是关于快速将带通滤波器应用于浮点数组的主要内容,如果未能解决你的问题,请参考以下文章