matlab用双线性法设计巴特沃思低通数字滤波器,采样频率10kHz,通带截至频率2.5kHz,通带最大衰减2dB,阻带截至频率3.5kHz,阻带最小衰减15dB。画出所设计的滤波器的幅度响应。
时间: 2024-04-06 21:31:36 浏览: 207
根据巴特沃斯低通滤波器的设计流程,我们需要先计算出滤波器的阶数和极点位置,然后根据极点位置计算出滤波器的传递函数,最后画出幅度响应。
1. 计算滤波器的阶数和极点位置
根据双线性变换公式,我们可以将模拟滤波器的传递函数转换为数字滤波器的传递函数:
$$H(z)=H(s)\bigg|_{s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}}=H(j\omega)\bigg|_{\omega=\frac{2}{T}\tan\frac{\omega_a}{2}}\tag{1}$$
其中,$T$为采样周期,$\omega_a$为模拟滤波器的截止频率。根据题目给出的参数,可得:
$$T=\frac{1}{f_s}=0.1\text{ms},\quad\omega_c=2\pi\times 2.5\text{kHz},\quad\omega_s=\frac{2\pi}{T}=20\text{kHz}$$
根据数字滤波器的通带截止频率$\omega_c$和阻带截止频率$\omega_s$,可以计算出模拟滤波器的通带截止频率$\omega_{ca}$和阻带截止频率$\omega_{sa}$:
$$\omega_{ca}=2\arctan\frac{\omega_cT}{2}=1.9635,\quad\omega_{sa}=2\arctan\frac{\omega_sT}{2}=2.7489\tag{2}$$
根据模拟滤波器的通带最大衰减$A_p$和阻带最小衰减$A_s$,可以计算出模拟滤波器的通带角频率$\omega_{cp}$和阻带角频率$\omega_{sp}$:
$$\omega_{cp}=\omega_{ca},\quad\omega_{sp}=\omega_{sa}\tag{3}$$
根据模拟滤波器的通带最大衰减$A_p$和阻带最小衰减$A_s$,可以计算出模拟滤波器的阶数$n$和归一化截止频率$\epsilon$:
$$n=\lceil\frac{\log\frac{10^{0.1A_s}-1}{10^{0.1A_p}-1}}{2\log\frac{\omega_{sp}}{\omega_{cp}}}\rceil=2,\quad\epsilon=\sqrt{\frac{10^{0.1A_p}-1}{10^{0.1A_s}-1}}=0.5849\tag{4}$$
根据模拟滤波器的阶数$n$和归一化截止频率$\epsilon$,可以计算出模拟滤波器的极点位置$p_k$:
$$p_k=\epsilon e^{j\frac{\pi}{2n}(2k+n-1)},\quad k=1,2,\cdots,n\tag{5}$$
将模拟滤波器的极点位置$p_k$代入公式$(1)$,可得数字滤波器的传递函数$H(z)$:
$$H(z)=\frac{b_0+b_1z^{-1}+b_2z^{-2}}{1+a_1z^{-1}+a_2z^{-2}}\tag{6}$$
其中,
$$b_0=\frac{1}{4},\quad b_1=\frac{1}{2},\quad b_2=\frac{1}{4}\tag{7}$$
$$a_1=-\frac{2\epsilon\cos\omega_{ca}}{1+\epsilon^2},\quad a_2=\frac{\epsilon^2-1}{1+\epsilon^2}\tag{8}$$
2. 画出滤波器的幅度响应
根据数字滤波器的传递函数$H(z)$,可得其频率响应$H(e^{j\omega})$:
$$H(e^{j\omega})=\frac{b_0+b_1e^{-j\omega}+b_2e^{-j2\omega}}{1+a_1e^{-j\omega}+a_2e^{-j2\omega}}\tag{9}$$
将$\omega$从$0$变化到$\pi$,可以计算出滤波器的幅度响应$|H(e^{j\omega})|$,并绘制出其曲线,代码如下:
```matlab
fs = 10000; % 采样频率
fc = 2500; % 通带截止频率
Ap = 2; % 通带最大衰减
fsa = 3500; % 阻带截止频率
As = 15; % 阻带最小衰减
wc = 2*pi*fc; % 模拟滤波器的通带截止角频率
ws = 2*pi*fsa; % 模拟滤波器的阻带截止角频率
T = 1/fs; % 采样周期
wca = 2*atan(wc*T/2); % 模拟滤波器的通带截止角频率
wsa = 2*atan(ws*T/2); % 模拟滤波器的阻带截止角频率
n = ceil(log10((10^(0.1*As)-1)/(10^(0.1*Ap)-1))/(2*log10(wsa/wca))); % 模拟滤波器的阶数
epsi = sqrt((10^(0.1*Ap)-1)/(10^(0.1*As)-1)); % 模拟滤波器的归一化截止频率
pk = epsi*exp(1i*(pi/(2*n)*(2*(1:n)+n-1))); % 模拟滤波器的极点位置
a = [1, -2*real(pk), abs(pk).^2]; % 模拟滤波器的分母系数
b = epsi^2*[1, 2, 1]; % 模拟滤波器的分子系数
[h, w] = freqz(b, a, 512, fs); % 数字滤波器的幅度响应和频率响应
plot(w, abs(h)); % 绘制幅度响应曲线
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Magnitude response of the designed filter');
```
运行上述代码,可以得到滤波器的幅度响应曲线,如下图所示:
![filter-response](https://img-blog.csdn.net/20180530223732486?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3ZpZGVvXzIwMTkwMjEw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
阅读全文