设计一个工作于采样频率80 kHz的巴特沃斯低通数字滤波器,要求通带边界频率为4 kHz,通带最大衰减为0.5 dB,主带边界频率为20 kHz,主带最小衰减为45 dB。调用Matlab工具性函数buttord和butter设计,显示该数字滤波器系统函数H(z)的系数,并绘制所设计的滤波器的单位脉冲响应、损耗函数曲线和相频特性曲线。(35分
时间: 2024-02-13 15:05:01 浏览: 176
首先,我们可以使用 `buttord` 函数来确定巴特沃斯滤波器的阶数和截止频率。该函数的语法如下:
```
[n, Wn] = buttord(Wp, Ws, Rp, Rs)
```
其中,`Wp` 和 `Ws` 分别是通带和阻带的归一化频率,`Rp` 和 `Rs` 分别是通带和阻带的最大衰减和最小衰减。`n` 是滤波器的阶数,`Wn` 是滤波器的截止频率。
根据题目要求,我们有:
- 采样频率为80 kHz,通带边界频率为4 kHz,主带边界频率为20 kHz;
- 通带最大衰减为0.5 dB,主带最小衰减为45 dB。
将以上参数带入 `buttord` 函数中,可以得到:
```
Wp = 4 / (80 / 2); % 归一化通带边界频率
Ws = 20 / (80 / 2); % 归一化阻带边界频率
Rp = 0.5; % 通带最大衰减
Rs = 45; % 阻带最小衰减
[n, Wn] = buttord(Wp, Ws, Rp, Rs); % 确定滤波器阶数和截止频率
```
根据 `buttord` 函数的输出,我们得到了滤波器的阶数和截止频率。接下来,可以使用 `butter` 函数来设计巴特沃斯滤波器。该函数的语法如下:
```
[b, a] = butter(n, Wn, 'low')
```
其中,`n` 和 `Wn` 分别是滤波器的阶数和截止频率,`'low'` 表示低通滤波器。`b` 和 `a` 分别是滤波器的分子和分母系数。
根据以上参数,可以得到巴特沃斯低通数字滤波器的系数:
```
[b, a] = butter(n, Wn, 'low'); % 设计巴特沃斯低通数字滤波器
```
接下来,可以使用 `freqz` 函数来绘制滤波器的单位脉冲响应、损耗函数曲线和相频特性曲线。该函数的语法如下:
```
[h, w] = freqz(b, a); % 计算滤波器的频率响应
f = w * (80 / 2) / pi; % 将角频率转换为实际频率
figure;
subplot(2, 1, 1);
plot(f, abs(h)); % 绘制滤波器的幅频特性
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Magnitude Response');
subplot(2, 1, 2);
plot(f, angle(h)); % 绘制滤波器的相频特性
xlabel('Frequency (Hz)');
ylabel('Phase (rad)');
title('Phase Response');
```
这将绘制出滤波器的幅频特性和相频特性曲线。可以看出,滤波器滤除了20 kHz以上的高频信号,同时保留了4 kHz以下的低频信号。
关于单位脉冲响应和损耗函数的绘制,可以使用以下代码:
```
figure;
subplot(2, 1, 1);
impulse(b, a); % 绘制单位脉冲响应
xlabel('Time (s)');
ylabel('Amplitude');
title('Impulse Response');
subplot(2, 1, 2);
freqz(b, a); % 绘制损耗函数曲线
```
这将绘制出滤波器的单位脉冲响应和损耗函数曲线。
完整的代码如下:
阅读全文