编写程序实现巴特沃斯低通滤波,设置n=4,效果如图所示,改变n值,查看对滤波器的影响。
时间: 2024-04-30 20:17:09 浏览: 73
好的,根据您的要求,我会为您编写一个实现巴特沃斯低通滤波的程序,并设置n=4。下面是程序代码:
```python
import numpy as np
from scipy.signal import butter, lfilter, freqz
import matplotlib.pyplot as plt
# 定义采样频率和截止频率
fs = 1000.0
cutoff = 50.0
# 计算归一化频率
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
# 计算滤波器系数
b, a = butter(4, normal_cutoff, btype='low', analog=False)
# 绘制幅频响应曲线
w, h = freqz(b, a)
plt.plot(0.5*fs*w/np.pi, np.abs(h), 'b')
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude |H(f)|')
plt.title('Butterworth Lowpass Filter (n=4, fc=50 Hz)')
plt.grid(True)
plt.show()
# 执行滤波
T = 0.05
t = np.linspace(0, T, int(T*fs), endpoint=False)
noise = 0.5*np.sin(2*np.pi*100*t) + np.sin(2*np.pi*200*t)
signal = np.sin(2*np.pi*10*t) + noise
filtered_signal = lfilter(b, a, signal)
# 绘制信号和滤波后的信号
plt.figure()
plt.plot(t, signal, 'b', label='signal')
plt.plot(t, filtered_signal, 'r', linewidth=2, label='filtered signal')
plt.xlabel('Time (sec)')
plt.grid(True)
plt.legend(loc='best')
plt.show()
```
关于您的第二个问题,改变n值会影响滤波器的通带宽度和阻带宽度,具体细节可以查看幅频响应曲线。较小的n值会使滤波器的通带宽度更宽,但是滤波器的降噪效果不太好;较大的n值会使滤波器的通带宽度更窄,但是滤波器的降噪效果更好,同时阻带宽度也更大。需要根据具体场景选择合适的n值。
阅读全文