在python中对x [n]应用过滤器

时间:2013-11-11 18:46:12

标签: python arrays list signal-processing

将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编写它?

3 个答案:

答案 0 :(得分:1)

你可以这样做:

y[n] = sum(a[k]*x[n-K] for k in xrange(K + 1))

这使用内置的sum()xrange函数以及生成器表达式来计算最终结果。

答案 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,这使得它成为一个单行。