gpt4 book ai didi

ARM NEON 简单低通滤波器矢量化

转载 作者:行者123 更新时间:2023-12-03 22:53:01 25 4
gpt4 key购买 nike

我有一个简单的单极低通滤波器(用于参数平滑),可以用以下公式解释:

y[n] = (1-a) * y[n-1] + a * x[n]

如何在 ARM Neon 上有效矢量化这种情况 - 使用内在函数?是否可以?
问题是每次计算都需要一个先前的结果。

最佳答案

假设您执行向量操作 M元素一次(我认为 NEON 是 128 位宽,所以这将是 M=4 32 位元素),您可以通过因子 M 展开差分方程对于简单的单极滤波器来说很容易。假设您已经计算了直到 y[n] 的所有输出。 .然后,您可以按如下方式计算接下来的四个:

y[n+1] = (1-a)*y[n] + a*x[n+1]
y[n+2] = (1-a)*y[n+1] + a*x[n+2] = (1-a)*((1-a)*y[n] + a*x[n+1]) + a*x[n+2]
= (1-a)^2*y[n] + a*(1-a)*x[n+1] + a*x[n+2]
...

一般来说,你可以写 y[n+k]作为:
y[n+k] = (1-a)^2*y[n] + sum_{i=1}^k a*(1-a)^{k-i}*x[n+i]

我知道上面的内容很难阅读(也许我们可以将这个问题迁移到 Signal Processing 并且我可以在 LaTeX 中重新排版)。但是,给定初始条件 y[n] (假设是上一个计算的最后一个输出
向量化迭代),可以计算下一个 M并行输出,因为展开滤波器的其余部分具有类似 FIR 的结构。

这种方法有一些注意事项:如果 M变大,然后你最终将一堆数字相乘,以获得展开滤波器的有效 FIR 系数。取决于您的数字格式和 a 的值,这可能会影响数值精度。此外,您不会收到 M使用这种方法加速倍数:您最终计算出 y[n+k]相当于 k -tap FIR 滤波器。虽然你在计算 M并行输出,事实是你必须做 k乘法累加操作而不是简单的一阶递归实现减少了向量化的一些好处。

关于ARM NEON 简单低通滤波器矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com