1

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

4

3 回答 3

1

对于信号处理,你真的应该使用 NumPy。特别是,过滤信号将只是卷积,使其成为单线。

于 2013-11-11T19:39:42.660 回答
1

这避免了使用索引:

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功能。该实现将比我在这里描述的要快得多。

于 2013-11-11T19:10:57.737 回答
1

你可以做:

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

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

于 2013-11-11T18:50:46.257 回答