将Python中的FIR滤波器应用于x[n]
(适用于所有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编写它?
答案 0 :(得分:1)
答案 1 :(得分:1)
这避免使用索引:
y[n] = sum(aa * xx for aa, xx in zip(a, x[n::-1]))
关于zip
的一个很酷的事情是它的输出长度将是两个输入中较短者的长度。
要为所有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
函数。这个实现将比我在这里描述的快得多。
答案 2 :(得分:1)
对于信号处理,您应该真正使用NumPy。特别是,过滤信号将只是convolution,这使得它成为一个单行。