试利用双线性变换法,设计Butterworth 低通数字滤波器,假设信号x(t)=sin(2*pi*f_1*t)+0.5cos(2*pi*f_2*t),其中f_1=5Hz,f_2=30Hz。要求通带波纹小于1dB,幅度衰减大于15dB,采样周期T=0.01s。
用间接设计方法设计数字低通DF的步骤:
(1)产生时域信号xt
要求给出xt的时域波形图。
(2)信号xt的频谱分析
确定采样频率和采样点数 N=64; Fs=64;对 xt 信号进行采样得到序列 xtnT。
要求给出 xt 的频谱图。
k=0:N-1;
wk=2*pi/N*k; %k 对应的数字频率
stem(wk/pi,abs(Xk)/max(abs(Xk))); %为避免幅度值随变换区间 N 变化的缺点,画图时可归一化幅度谱。
问题 1-1:观察 xt 的频谱图,给出信号 xt 的频率分量对应的数字频率。 提示:通带截止频率大致为 wp = 0.2p ,通带截止频率大致为 ws = 0.3p 。
(3)根据读出的数字滤波器的截止频率及已知的通带波纹、阻带衰减,利用双 线性变换法的频率转换形式得到模拟滤波器的频率。
问题 1-2:给出数字边界频率的双线性转换关系。
(4)IIR 数字滤波器的设计及实现
1)本实验采用 Butterworth 模拟滤波器设计来完成相应低通滤波器的设计, 具体可调用 buttord、butter 函数完成 DF 设计。
2)滤波实现 可调用滤波器实现函数 filter 来完成此功能。
要求 1:绘图显示低通滤波器的损耗函数曲线;
要求 2:显示滤波后的时域波形图,观察滤波效果。
相关代码:
% 步骤1:生成时域信号 xt
f1 = 5; % Hz
f2 = 30; % Hz
T = 0.01; % 采样周期
t = 0:T:1;
xt = sin(2*pi*f1*t) + 0.5*cos(2*pi*f2*t);
figure;
plot(t, xt);
title('时域信号 xt');
xlabel('时间 (s)');
ylabel('幅度');
% 步骤2:信号频谱分析
N = 64;
Fs = 1/T;
Xk = fft(xt, N);
k = 0:N-1;
wk = 2*pi/N * k;
figure;
stem(wk/pi, abs(Xk)/max(abs(Xk)));
title('信号频谱图');
xlabel('数字频率 (π rad/sample)');
ylabel('归一化幅度谱');
% 步骤3:双线性变换法得到模拟滤波器的频率
wp = 0.2 * pi;
ws = 0.3 * pi;
ap = tan(wp/2);
as = tan(ws/2);
% 步骤4:IIR 数字滤波器的设计及实现
[n, Wn] = buttord(ap, as, 1, 15);
[b, a] = butter(n, Wn, 'low');
% 损耗函数曲线
figure;
freqz(b, a);
% 滤波实现
filtered_signal = filter(b, a, xt);
% 时域波形图
figure;
subplot(2,1,1);
plot(t, xt);
title('原始信号');
xlabel('时间 (s)');
ylabel('幅度');
subplot(2,1,2);
plot(t, filtered_signal);
title('滤波后信号');
xlabel('时间 (s)');
ylabel('幅度');
运行结果: