Python 中的带通滤波器形状
Bandpass Filter Shape in Python
我正在尝试制作带通滤波器。当我在处理它时,我注意到了一些奇怪的事情。
滤波器的频率响应还可以(scipy.signal.freqz)。但是当我将它应用于正弦信号时,滤波器的形状发生了变化。
图 3 = 信号频谱
图 4 = 根据 freqz() 函数的滤波器频率响应
图 1 = 滤波器应用信号的频谱
最后,为什么滤波器的形状(以及幅度)在应用于信号时会发生变化?
from scipy.signal import butter, lfilter, buttord, freqz
import numpy as np
import matplotlib.pyplot as plt
import math
t = np.arange(0, 8192, 1)
data = 1+np.sin(.15*np.pi*t + np.pi/2)
b, a = butter(6, [0.35, 0.55], btype='band')
y = lfilter(b, a, data)
y = np.fft.rfft(y)
y = np.abs(y)
x = np.fft.rfft(data)
x = np.abs(x)
w, h = freqz(b, a, worN=4096)
plt.figure(1)
plt.plot(np.arange(0,4097,1),y)
plt.figure(2)
plt.plot(np.arange(0,8192,1), data)
plt.figure(3)
plt.plot(np.arange(0,4097,1), x)
plt.figure(4)
plt.plot(np.arange(0,4096,1),np.abs(h))
plt.show()
当您应用滤波器时,您是将信号 f(w) 的傅里叶变换(即频谱)与滤波器函数 g(w) 相乘。所以时域中的输出是 IFFT(f(w) g(w)) 而只是 g(w)f(w) 在频谱域中,这是你的图 1。很明显,产品将不同于信号和滤波器。在您的情况下,过滤器和信号不会重叠太多,这会导致有些奇怪的结果。尝试添加第二个 angular 频率为 0.5 pi 的正弦波,您会看到截然不同的结果。
我正在尝试制作带通滤波器。当我在处理它时,我注意到了一些奇怪的事情。 滤波器的频率响应还可以(scipy.signal.freqz)。但是当我将它应用于正弦信号时,滤波器的形状发生了变化。
图 3 = 信号频谱
图 4 = 根据 freqz() 函数的滤波器频率响应
图 1 = 滤波器应用信号的频谱
最后,为什么滤波器的形状(以及幅度)在应用于信号时会发生变化?
from scipy.signal import butter, lfilter, buttord, freqz
import numpy as np
import matplotlib.pyplot as plt
import math
t = np.arange(0, 8192, 1)
data = 1+np.sin(.15*np.pi*t + np.pi/2)
b, a = butter(6, [0.35, 0.55], btype='band')
y = lfilter(b, a, data)
y = np.fft.rfft(y)
y = np.abs(y)
x = np.fft.rfft(data)
x = np.abs(x)
w, h = freqz(b, a, worN=4096)
plt.figure(1)
plt.plot(np.arange(0,4097,1),y)
plt.figure(2)
plt.plot(np.arange(0,8192,1), data)
plt.figure(3)
plt.plot(np.arange(0,4097,1), x)
plt.figure(4)
plt.plot(np.arange(0,4096,1),np.abs(h))
plt.show()
当您应用滤波器时,您是将信号 f(w) 的傅里叶变换(即频谱)与滤波器函数 g(w) 相乘。所以时域中的输出是 IFFT(f(w) g(w)) 而只是 g(w)f(w) 在频谱域中,这是你的图 1。很明显,产品将不同于信号和滤波器。在您的情况下,过滤器和信号不会重叠太多,这会导致有些奇怪的结果。尝试添加第二个 angular 频率为 0.5 pi 的正弦波,您会看到截然不同的结果。