x[n]
在 Python 中应用 FIR 过滤器的最聪明的方法是什么n <= N
?
y[n] = a[0]*x[n] + a[1]*x[n-1] + a[2]*x[n-2] + ... + a[K]*x[n-K]
我知道如何用双for
循环来做到这一点,但我想有更多“漂亮”的方式来用 Python 编写它?
x[n]
在 Python 中应用 FIR 过滤器的最聪明的方法是什么n <= N
?
y[n] = a[0]*x[n] + a[1]*x[n-1] + a[2]*x[n-2] + ... + a[K]*x[n-K]
我知道如何用双for
循环来做到这一点,但我想有更多“漂亮”的方式来用 Python 编写它?
对于信号处理,你真的应该使用 NumPy。特别是,过滤信号将只是卷积,使其成为单线。
这避免了使用索引:
y[n] = sum(aa * xx for aa, xx in zip(a, x[n::-1]))
一个很酷的事情zip
是它的输出长度将是两个输入中较短的长度。
要为 all 执行此操作n
,最简单的方法可能是为外部循环使用索引:
y = [sum(aa * xx for aa, xx in zip(a, x[n::-1])) for n in xrange(0, len(x))]
如果您只想包含“有效”项(对 中的所有系数使用总和的项),您可以替换xrange(0, len(x))
为类似的内容。xrange(len(a), len(x))
a
如果这是你要做的很多事情,或者需要大量输入,我建议你检查一下 Numpy,特别是它的convolve
功能。该实现将比我在这里描述的要快得多。