matlab:利用 kaiser 窗设计 FIR 低通滤波器,通带边界频率 0.3π,阻带边界频 率 0.5π,阻带衰减不小于 50dB。
时间: 2024-03-06 19:51:35 浏览: 129
FIR数字滤波器的设计
可以按照如下步骤设计 FIR 低通滤波器:
1. 计算滤波器阶数:
根据阻带边界频率和阻带衰减要求,可以使用 Kaiser 窗口计算滤波器的阶数 N:
$$N=\frac{A-7.95}{14.36(w_c-w_s)}+1$$
其中,$A$ 为阻带衰减,$w_c$ 和 $w_s$ 分别为通带和阻带边界频率,$w_c=0.3\pi$,$w_s=0.5\pi$,$A=50$ dB。代入公式计算得到 $N=36$。
2. 计算 kaiser 窗口参数:
根据 Kaiser 窗口的定义,需要确定窗口长度 $L$ 和 beta 参数。一般取 $L=N+1$,beta 参数可以通过下面的公式计算:
$$\beta=\begin{cases}0.1102(A-8.7)\quad& A>50\\0.5842(A-21)^{0.4}+0.07886(A-21)\quad& 21 \leq A \leq 50\\0.0\quad& A<21\end{cases}$$
代入公式计算得到 $\beta=6.23$。
3. 计算滤波器系数:
根据 Kaiser 窗口和理想低通滤波器的卷积公式,可以计算出滤波器的时域冲激响应 $h(n)$:
$$h(n)=\frac{\sin\left[\pi(n-N)\frac{w_c}{2}\right]}{\pi(n-N)}w(n)$$
其中,$w(n)$ 为 Kaiser 窗口:
$$w(n)=\frac{I_0(\beta\sqrt{1-(n-N)^2/L^2})}{I_0(\beta)}$$
其中,$I_0(x)$ 为零阶修正贝塞尔函数。将 $n$ 代入上述公式,可以得到滤波器的系数 $h(n)$。
4. 生成滤波器:
利用 Matlab 中的 fir1 函数生成滤波器:
```matlab
N = 36; % 滤波器阶数
wc = 0.3*pi; % 通带边界频率
ws = 0.5*pi; % 阻带边界频率
A = 50; % 阻带衰减
L = N + 1; % 窗口长度
beta = kaiserbeta(A); % 计算 beta 参数
w = kaiser(L, beta); % 计算 Kaiser 窗口
h = fir1(N, wc/pi, 'low', w); % 生成 FIR 低通滤波器
```
其中,kaiserbeta 和 kaiser 函数分别用于计算 beta 参数和 Kaiser 窗口。最后生成的滤波器 h 即为所求。
阅读全文