用MATLAB设计一个巴特沃斯高通滤波器,其通带截止频率(3dB点处)为f=3kHz,阻带上限截止频率f=2kHz,通带衰减不大于3dB,阻带衰减不小于14dB,抽样频率f=10kHz。试分别利用模拟域频率变换法和数字域变换法实现,并写出滤波器系统函数(只用分别写出每个的A和B),画出其幅频特性曲线验证两种设计法所得结果一致。
时间: 2024-04-21 11:30:24 浏览: 19
好的,我可以为你提供两种实现方法:模拟域频率变换法和数字域变换法的巴特沃斯高通滤波器设计的MATLAB代码。以下是示例代码:
1. 模拟域频率变换法实现:
```
% 巴特沃斯高通滤波器设计(模拟域频率变换法)
% 模拟域参数
fp = 3000; % 通带截止频率
fs = 2000; % 阻带上限截止频率
Ap = 3; % 通带衰减不大于3dB
As = 14; % 阻带衰减不小于14dB
% 数字域参数
f0 = 10000; % 采样频率
% 计算通带和阻带的归一化频率
wp = 2*pi*fp/f0;
ws = 2*pi*fs/f0;
% 计算通带和阻带的通带衰减和阻带衰减
dp = (10^(Ap/20)-1)/(10^(Ap/20)+1);
ds = 10^(-As/20);
% 计算巴特沃斯滤波器的阶数和截止频率
[n, wc] = buttord(wp, ws, Ap, As, 's');
% 计算巴特沃斯滤波器的传递函数
[num, den] = butter(n, wc, 'high', 's');
% 频率响应曲线
w = linspace(0,f0/2,500);
[h,w] = freqs(num, den, w);
plot(w/(2*pi),20*log10(abs(h)))
grid on
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Butterworth Highpass Filter Frequency Response')
```
2. 数字域变换法实现:
```
% 巴特沃斯高通滤波器设计(数字域变换法)
% 数字域参数
fp = 3000; % 通带截止频率
fs = 2000; % 阻带上限截止频率
Ap = 3; % 通带衰减不大于3dB
As = 14; % 阻带衰减不小于14dB
f0 = 10000; % 采样频率
% 计算通带和阻带的归一化频率
wp = 2*pi*fp/f0;
ws = 2*pi*fs/f0;
% 计算通带和阻带的通带衰减和阻带衰减
dp = (10^(Ap/20)-1)/(10^(Ap/20)+1);
ds = 10^(-As/20);
% 计算巴特沃斯滤波器的阶数和截止频率
[n, wc] = buttord(wp, ws, Ap, As, 's');
% 计算数字域上的变换
[z, p, k] = butter(n, wc, 'high');
[num, den] = zp2tf(z, p, k);
% 数字域变换
[b, a] = bilinear(num, den, f0);
% 频率响应曲线
w = linspace(0,f0/2,500);
[h,w] = freqz(b, a, w, f0);
plot(w/(2*pi),20*log10(abs(h)))
grid on
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Butterworth Highpass Filter Frequency Response')
```
以上两种实现方法的区别在于:模拟域频率变换法是在模拟域中设计滤波器,然后将模拟滤波器的传递函数进行频率变换得到数字滤波器的传递函数,而数字域变换法则是直接在数字域中设计滤波器。两种方法所得到的结果是一致的,你可以通过画出滤波器的幅频特性曲线来验证。