gpt4 book ai didi

python - 大多数系数为零时如何进行IIR滤波

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:18 25 4
gpt4 key购买 nike

我要用 Python 做什么音频效果。比如最简单的回声效果公式:

y[n] = x[n] + k*y[n-1000]

这是一个 IIR 滤波器,可以通过 scipy.signal 中的 lfilter() 计算:

import numpy as np
import time
import scipy.signal as signal

pulse = np.zeros(10000)
pulse[0] = 1.0

a = np.zeros(1000)
a[[0,999]] = 1, -0.7

start = time.clock()
out = signal.lfilter([1], a, pulse)
print time.clock() - start

import pylab as pl
pl.plot(out)
pl.show()

问题是:a的大部分系数都为零,可以很快计算出滤波器,但是lfilter()无法实现这一点,使用所有的零系数。

我知道我可以为这个最简单的示例编写一些特定的计算代码,但我正在寻找一个通用的解决方案。

最佳答案

试试这个:

import scipy
import scipy.signal as sig
import time

# Input signal.
x = scipy.randn(50000)

# Filter coefficients.
a = scipy.zeros(1001)
a[[0,-1]] = [1, -0.7]

# Method using lfilter.
start = time.clock()
y0 = sig.lfilter([1], a, x)
end = time.clock() - start
print end

# Method using for loop.
start = time.clock()
y1 = x
for i in range(1000, y1.size):
y1[i] += 0.7*y1[i-1000]
end = time.clock() - start
print end

# Check that both outputs are equal.
print scipy.square(y0-y1).sum()

在我的笔记本电脑上:方法 1 为 0.38 秒,方法 2 为 0.13 秒。

注意:对于N个样本的延迟,必须设置a[N],而不是a[N-1]

关于python - 大多数系数为零时如何进行IIR滤波,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6950552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com