实验二:数字滤波器的设计

实验数字滤波器的设计

一、实验目的:

掌握IIR数字低通滤波器的设计方法。

二、实验原理:

 

 

 

 

 

% 清空命令窗口
设计代码:clc;
% 设定参数
Fs = 1000; % 采样频率
fp = 100; % 通带截止频率
fs = 300; % 阻带截止频率
rp = 3; % 通带最大衰减
rs = 20; % 阻带最小衰减
% 将频率转换为角频率
wp = 2 * pi * fp / Fs;
ws = 2 * pi * fs / Fs;
% 转换为模拟滤波器的通带和阻带边界频率
Ts = 1 / Fs;
wap = 2 / Ts * tan(wp / 2);
was = 2 / Ts * tan(ws / 2);
% 计算巴特沃斯滤波器阶数和截止频率
[n, wn] = buttord(wap, was, rp, rs, 's');
% 获取巴特沃斯滤波器的零点、极点和增益
[z, p, k] = buttap(n);
% 转换零点-极点-增益表示为分子-分母表示
[bp, ap] = zp2tf(z, p, k);
% 将低通巴特沃斯滤波器转换为所需的频率
[bs, as] = lp2lp(bp, ap, wn);
% 通过双线性变换将模拟滤波器转换为数字滤波器
[bz, az] = bilinear(bs, as, Fs);
% 计算滤波器的频率响应
[h, w] = freqz(bz, az, 1024, Fs);
% 绘制滤波器的振幅频率响应
figure;
subplot(4,1,1);
plot(w, abs(h));

title('低通滤波器');
xlabel('频率'); ylabel('振幅');
% 绘制滤波器的幅度响应的对数尺度图
subplot(4,1,2);
plot(w, 20 * log10(abs(h)));
title('Magnitude Frequency');
xlabel('频率'); ylabel('dB');

(2) 用所设计的滤波器对实际心电图信号采样序列进行仿真滤波处理,并分别打印出滤波前后的心电图信号波形图,改变参数Fs,观察总结滤波作用与效果。

心电图信号采样序列x(n): 人体心电图信号在测量过程中往往受到工业高频干扰, 所以必须经过低通滤波处理后, 才能作为判断心脏功能的有用信息。 下面给出一实际心电图信号采样序列样本x(n), 其中存在高频干扰。 在实验中, 以x(n)作为输入序列, 滤除其中的干扰成分。

{x(n)} ={-4,  -2,  0,  -4,  -6,  -4,  -2,  -4,  -6,  -6, -4,  -4,  -6,  -6,  -2,  6,  12,  8,  0,  -16, -38,  -60,  -84,  -90,  -66,  -32,  -4,  -2,  -4,  8, 12,  12,  10,  6,  6,  6,  4,  0,  0,  0, 0,  0,  -2,  -4,  0,  0,  0,  -2,  -2,  0, 0,  -2,  -2,  -2,  -2,  0}

% 原始心电图信号
x = [-4, -2, 0, -4, -6, -4, -2, -4, -6, -6, -4, -4, -6, -6, -2, 6, 12, 8, 0, -16, -38, -60, -84, -90, -66, -32, -4, -2, -4, 8, 12, 12, 10, 6, 6, 6, 4, 0, 0, 0, 0, 0, -2, -4, 0, 0, 0, -2, -2, 0, 0, -2, -2, -2, -2, 0];
% 滤波
y = filter(bz, az, x);
% 画出原始心电图信号
subplot(4,1,3);
plot(x);
title('原始心电图信号');
% 画出滤波后心电图信号
subplot(4,1,4);
plot(y);
title('滤波后信号');

 

五、实验总结

1、实验结论

由上图可知,滤波器的通带在100hz时的衰减为1.19dB左右,小于技术要求的3dB;滤波器阻带的通带在300Hz时的衰减为20dB左右,大于技术要求的20dB。所以滤波器基本满足要求。

将滤波器应用到仿真的实际心电图信号中,得到的滤波后的心电图信号如上图中的第4个图,可见经过滤波器后比原始信号更加平滑。

2、心得体会

在此次实验中,我学习如何利用Matlab进行数字滤波处理,了解了如何选择滤波器的参数,包括采样频率、通带截止频率、阻带截止频率等,以及如何根据这些参数计算出滤波器的阶数和截止频率;学会了如何利用 MATLAB 中的函数来实现模拟滤波器到数字滤波器的转换,并且了解了双线性变换的原理和方法;通过计算滤波器的频率响应并绘制振幅频率响应图和幅度响应的对数尺度图,使我对滤波器在频率域上的性能有了更直观的了解;应用设计好的滤波器对心电图信号进行滤波处理,观察了滤波前后信号的变化,掌握了数字滤波在信号处理中的实际应用,进一步丰富和巩固了自己的专业技能。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于FIR数字滤波器设计Matlab软件实现的建议。 FIR数字滤波器是一种基于有限长单位冲激响应(Finite Impulse Response,FIR)的数字滤波器。它的特点是具有线性相位,易于设计和实现。FIR数字滤波器设计方法有很多种,以下是其中两种比较常用的方法: 1. 窗函数法 该方法是最常见的FIR滤波器设计方法之一。其设计过程大致如下: - 确定滤波器的截止频率和带宽; - 选择一个合适的窗函数(如矩形窗、汉宁窗、汉明窗等); - 根据所选窗函数的长度,计算出滤波器的系数; - 使用计算出的系数构造数字滤波器。 2. Parks-McClellan算法 该方法是一种最小最大化设计方法,可以在规定的频带上最小化滤波器的最大幅度误差。其设计过程大致如下: - 确定滤波器的截止频率和带宽; - 根据所选频带和最大幅度误差,计算出所需的滤波器阶数; - 使用Parks-McClellan算法计算出最优的滤波器系数; - 使用计算出的系数构造数字滤波器。 在Matlab中,可以使用firls函数进行FIR数字滤波器设计和实现。该函数支持窗函数法和Parks-McClellan算法,并且可以根据指定的截止频率、通带和阻带增益等参数计算出滤波器系数。 以下是一个使用firls函数进行FIR数字滤波器设计和实现的示例代码: ```matlab % 设计FIR数字滤波器 fs = 1000; % 采样率 fc = 100; % 截止频率 n = 100; % 滤波器阶数 % 使用firls函数进行设计 b = firls(n, [0 fc fc*1.2 fs/2]/(fs/2), [1 1 0 0]); % 生成信号 t = 0:1/fs:1; x = sin(2*pi*50*t) + sin(2*pi*150*t) + sin(2*pi*300*t); % 进行滤波 y = filter(b, 1, x); % 绘制滤波前后的信号 subplot(2,1,1); plot(t, x); title('原始信号'); subplot(2,1,2); plot(t, y); title('滤波后信号'); ``` 以上代码中,首先使用firls函数计算出了一个100阶的FIR数字滤波器的系数b。然后生成了一个包含三个正弦波的信号,并使用filter函数对其进行滤波。最后绘制了滤波前后的信号,可以看到滤波后的信号已经去除了部分高频噪声。 希望以上内容对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值