繁体   English   中英

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

[英]apply a filter to x[n] in python

将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?

你可以做:

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

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

这避免了使用索引:

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))]

如果你想只包括“有效”术语(在a所有系数使用和的术语xrange(len(a), len(x))你可以用xrange(0, len(x))的东西替换xrange(0, len(x)) ) 。

如果这是你要做很多事情,或做大量输入,我会建议检查Numpy,特别是它的convolve函数。 这个实现将比我在这里描述的快得多。

对于信号处理,您应该真正使用NumPy。 特别是,过滤信号只是卷积 ,使其成为一个单行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM