accelerate-framework - 使用 vDSP_biquad 作为单极滤波器

标签 accelerate-framework

我希望能够使用 vDSP_biquad 函数作为单极滤波器。

我的单极过滤器如下所示:

output[i] = onePole->z1 = input[i] * onePole->a0 + onePole->z1 * onePole->b1;

哪里

    b1 = exp(-2.0 * M_PI * (_frequency / sampleRate));
    a0 = 1.0 - b1;

这个极点效果很好,但当然它还没有优化,这就是为什么我想使用 Accelerate Framework 来加速它。

因为 vDSP_biquad 使用双二阶实现的 Direct Form II,所以在我看来,我应该能够设置系数以将其用作单极点滤波器。 https://en.wikipedia.org/wiki/Digital_biquad_filter#Direct_form_2

filter->omega = 2 * M_PI * freq / sampleRate;
 filter->b1 = exp(-filter->omega);
 filter->b0 = 1 - filter->b1;
 filter->b2 = 0;
 filter->a1 = 0;
 filter->a2 = 0; 

但是,这不能用作单极滤波器。 (双二阶的实现很好,我将它用于许多其他滤波器类型,只是这些系数没有达到预期的效果)。

我做错了什么?

也愿意听取其他通过加速或其他方式优化单极点滤波器的方法。

最佳答案

公式 in the Apple docs是:

y[n] = b0*x[n] + b1*x[n-1] + b2*x[n-2] - a1*y[n-1] - a2*y[n -2]

在上面的代码中,您使用的是两个输入前的 b1 。对于单极,您需要使用之前的输出 y[n-1]

所以我认为你想要的系数是:

a1 = -exp(-2.0 * M_PI * (_频率/采样率))

b0 = 1.0 + a1

关于accelerate-framework - 使用 vDSP_biquad 作为单极滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519902/

相关文章:

ios基本图像处理提取红色 channel

ios - 使用 Apple 的 Accelerate 框架、FFT、Hann 窗口和 Overlapping

arrays - Swift 线性插值和上采样

iphone - iPhone 上的 FFT 可忽略背景噪音并找到更低的音调

Swift SIMD 或 Accelerate Sum UInt32

ios - 如何在 iOS 中使用 vDSP 将声音文件转换为 FFT

ios - 如何使用 vImageMatrixMultiply 将 YUV 平面数据转换为 32 bpp、8bpc RGBX?

iOS 使用 vImage - 加速将 QCAR YUV 转换为 RGB

c++ - 使用 Apple Accelerate Framework 的希尔伯特变换(分析信号)?

arrays - 将 ArraySlice 与 Accelerate 函数结合使用的更好方法?