利用 kaiser 窗设计 fir 低通滤波器,通带边界频率 0.3π,阻带边界频 率 0.5π,阻
时间: 2023-09-25 17:10:13 浏览: 89
带最大衰减为 60dB,采样频率为 2π。
首先,需要确定滤波器的系数长度,可以使用 Kaiser 窗口的公式来计算:
$$M=\frac{A-8}{4.57(w_c-w_s)}+1$$
其中,$M$ 为滤波器的系数长度,$A$ 为阻带最大衰减,$w_c$ 和 $w_s$ 分别为通带和阻带的边界频率,$w_c-w_s$ 为过渡带宽,$4.57$ 是一个经验值。
代入参数,得到:
$$M=\frac{60-8}{4.57(0.5\pi-0.3\pi)}+1=32$$
因此,滤波器的系数长度为 $32$。
接下来,需要确定 Kaiser 窗口的 beta 参数。beta 参数可以控制窗口的平坦度和副瓣水平。可以使用以下公式来计算 beta 参数:
$$\beta= \begin{cases}
0.1102(A-8.7), & A > 50 \\
0.5842(A-21)^{0.4}+0.07886(A-21), & 21 \leq A \leq 50 \\
0.0, & A < 21
\end{cases}$$
代入参数,得到:
$$\beta=0.1102(60-8.7)=5.653$$
接下来,可以使用以下公式来计算 Kaiser 窗口的形状:
$$w[n]=\frac{I_0(\beta\sqrt{1-(\frac{n-M/2}{M/2})^2})}{I_0(\beta)}$$
其中,$I_0$ 是修正的零阶贝塞尔函数。可以使用 Python 中的 SciPy 库来计算:
```python
import numpy as np
from scipy.signal import kaiser
M = 32
wc = 0.3 * np.pi
ws = 0.5 * np.pi
A = 60
beta = 5.653
h = np.zeros(M)
for n in range(M):
h[n] = np.sin(wc * (n - M/2)) / (np.pi * (n - M/2)) if n != M/2 else wc / np.pi
w = kaiser(M, beta)
h = h * w
```
最后,可以使用以上代码生成滤波器的系数 $h$,其中 kaiser 函数用于生成 Kaiser 窗口。
阅读全文