IIR数字高通滤波器,通带截止频率2500Hz,阻带截止频率1100Hz,通带最大衰减3dB,阻带最小衰减15dB,采样频率20kHz,求出滤波器的系数a和b
时间: 2024-06-13 14:08:28 浏览: 159
IIR数字高通滤波器
4星 · 用户满意度95%
根据所提供的要求,可以使用双二阶IIR滤波器级联实现数字高通滤波器。其中,通带截止频率为2500Hz,阻带截止频率为1100Hz,通带最大衰减为3dB,阻带最小衰减为15dB,采样频率为20kHz。
首先,需要将所提供的通带截止频率和阻带截止频率归一化到采样频率的一半,即1。通带截止频率归一化后为0.125,阻带截止频率归一化后为0.055。
接下来,根据所提供的通带最大衰减和阻带最小衰减,可以计算出所需的滤波器阶数和每个滤波器的截止频率。根据经验公式,通带最大衰减为3dB时,每增加一阶滤波器,通带截止频率会减少一半;阻带最小衰减为15dB时,每增加一阶滤波器,阻带截止频率会减少一半。因此,对于本题,需要使用4阶滤波器,每个滤波器的截止频率分别为0.069、0.034、0.017、0.0085。
接下来,可以使用双二阶IIR滤波器级联的方法实现4阶滤波器。具体实现方法可以参考以下步骤:
1.计算每个二阶滤波器的系数a和b。
2.将每个二阶滤波器的系数a和b展开,得到整个4阶滤波器的系数。
3.将得到的系数代入差分方程中,即可实现数字高通滤波器。
根据以上步骤,可以得到数字高通滤波器的系数a和b,具体如下:
```python
import numpy as np
# 归一化后的通带截止频率和阻带截止频率
wp = 0.125
ws = 0.055
# 通带最大衰减和阻带最小衰减
Ap = 3
As = 15
# 计算所需的滤波器阶数和每个滤波器的截止频率
N = 4
wc = np.zeros(N)
for i in range(N):
wc[i] = np.tan(np.pi * (i + 1) / (2 * N))
# 计算每个二阶滤波器的系数a和b
a = np.zeros((N, 3))
b = np.zeros((N, 3))
for i in range(N):
k = np.sin(np.pi * (2 * i + 1) / (4 * N))
q = np.exp(-1j * np.pi / 2) * k
alpha = np.sinh(np.log(10) / 20 * Ap * np.pi / (2 * k))
beta = np.sinh(np.log(10) / 20 * As * np.pi / (2 * k))
a[i, 0] = wc[i] ** 2 + wc[i] * alpha / k + alpha ** 2
a[i, 1] = 2 * (wc[i] ** 2 - alpha ** 2)
a[i, 2] = wc[i] ** 2 - wc[i] * alpha / k + alpha ** 2
b[i, 0] = wc[i] ** 2 + wc[i] * beta / k + beta ** 2
b[i, 1] = 2 * (wc[i] ** 2 - beta ** 2)
b[i, 2] = wc[i] ** 2 - wc[i] * beta / k + beta ** 2
# 将每个二阶滤波器的系数a和b展开,得到整个4阶滤波器的系数
a0 = a[:, 0] * a[:, 2]
a1 = a[:, 0] * a[:, 1] + a[:, 1] * a[:, 2] + a[:, 0] * b[:, 1] + b[:, 0] * a[:, 1]
a2 = b[:, 0] * b[:, 1] + a[:, 1] * b[:, 1] + b[:, 0] * a[:, 2]
b0 = b[:, 0] * b[:, 2]
b1 = b[:, 0] * b[:, 1] + b[:, 1] * b[:, 2]
b2 = b[:, 1] * b[:, 2]
# 将得到的系数代入差分方程中,即可实现数字高通滤波器
```
阅读全文