快速将带通滤波器应用于浮点数组

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)

【讨论】:

以上是关于快速将带通滤波器应用于浮点数组的主要内容,如果未能解决你的问题,请参考以下文章

获取特殊素数的浮点数模的快速、可向量化方法?

从浮点数转换为 QByteArray

避免浮点精度问题

字节数组byte[]和整型,浮点型数据的转换——Java代码

如何将带指数的字符串转换为浮点数?

python中的16位浮点共享内存数组