编写PYTHON程序,采用窗函数法设计一个FIR数字滤波器。数字滤波器的技术指标如下: ,通带边界频率为0.4Π,阻带截止频率为0.6Π,通带最大衰减为0.5dB,阻带最小衰减为50dB
时间: 2023-08-30 14:05:48 浏览: 135
以下是一个简单的Python程序,用于设计FIR数字滤波器,采用窗函数法。
```python
import numpy as np
import matplotlib.pyplot as plt
# Filter specifications
wp = 0.4*np.pi # Passband edge frequency
ws = 0.6*np.pi # Stopband edge frequency
Rp = 0.5 # Passband maximum ripple (dB)
Rs = 50 # Stopband minimum attenuation (dB)
# Compute filter order using Kaiser's formula
delta_w = ws - wp
A = -20*np.log10(Rs)
if A > 50:
N = int(np.ceil((A-8)/(2.285*delta_w)))
else:
N = int(np.ceil((A-8)/(2.285*delta_w)) + 1)
if N % 2 == 0:
N += 1
# Compute Kaiser window
beta = 0.1102*(A-8.7)
n = np.arange(N)
h = np.sinc(2*wp*(n-(N-1)/2)/np.pi)
w = np.kaiser(N, beta)
h = h*w
# Compute magnitude response
w, H = signal.freqz(h)
H_db = 20*np.log10(np.abs(H))
# Plot magnitude response
plt.plot(w/np.pi, H_db, 'b')
plt.axvline(wp/np.pi, color='r')
plt.axvline(ws/np.pi, color='r')
plt.xlabel('Normalized frequency')
plt.ylabel('Magnitude (dB)')
plt.title('FIR Filter Response')
plt.show()
```
在这个程序中,我们首先定义了滤波器的技术指标,包括通带边界频率、阻带截止频率等。然后,我们使用Kaiser公式来计算滤波器的阶数。接着,我们计算了Kaiser窗口,并将它应用到滤波器的零点上。最后,我们计算并绘制了滤波器的幅度响应。
需要注意的是,这个程序仅仅是一个简单的示例,实际使用时需要更加细致地考虑滤波器的设计和性能评估。
阅读全文