【滤波器】基于低通滤波实现肌电信号处理含Matlab源码

本文介绍了如何使用Matlab设计FIR数字滤波器,包括巴特沃斯低通滤波器的设计过程,从信号处理开始到时域和频域特征值的计算。通过实例展示了滤波器设计的步骤,并提供了完整的代码。适用于信号处理初学者和Matlab使用者。

1 简介

FIR数字滤波器是数字滤波器系统中常见的滤波器,本文提出FIR数字滤波器的设计方案,并基于Ma tlab实现滤波仿真.通过使用Matlab信号处理工具箱提供的函数,选择适当的窗函数编写程序,其中窗函数按照实际信号的处理需求,参数折中选择.实验获得了比较理想的滤波器特性,可以实现较好的滤波作用.而且在实际应用中只需按需求修改滤波器参数,并结合程序的相应改动,即可实现不同功能的滤波器.​

2 完整代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%设定初始参数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fs=2048;                          %采样频率N=512;                            %采样点数n=0:N-1;t=n/fs;                           %时间f1=100;f2=300;                           %低频f3=800;                           %高频s=cos(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t);%假定信号subplot(121);plot(t,s);title('输入信号');xlabel('t/s');ylabel('幅度');%未滤波时  时域波形sfft=fft(s);  %傅里叶变换subplot(122);  plot((1:length(sfft)/2)*fs/length(sfft),2*abs(sfft(1:length(sfft)/2))/length(sfft));  title('信号频谱');xlabel('频率/Hz');ylabel('幅度');  %未滤波时  频域波形%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%设计巴特沃斯低通滤波器%%%%%%%%%%%%%%%%%%%%%%%%Wp=900/fs;Ws=1000/fs;                     [n,Wn]=buttord(Wp,Ws,1,50);                         %阻带衰减大于50db,通带纹波小于1db                                                    %估算得到Butterworth低通滤波器的最小阶数N和3dB截止频率Wn[a,b]=butter(n,Wn);  [h,f]=freqz(a,b,'whole',fs);                        %求数字低通滤波器的频率响应  f=(0:length(f)-1)*fs/length(f);                     %进行对应的频率转换  figure(2);  plot(f(1:length(f)/2),abs(h(1:length(f)/2)));       %绘制巴特沃斯幅频响应图  title('巴特沃斯低通滤波器');xlabel('频率/Hz');ylabel('幅度');  grid;  sF=filter(a,b,s);                                   %叠加函数s经过低通滤波器以后的新函数  figure(3);  subplot(121);  plot(t,sF);                                         %绘制叠加函数s经过低通后时域图形  title('输出信号');xlabel('t/s');ylabel('幅度');  SF=fft(sF);  subplot(122);  plot((1:length(SF)/2)*fs/length(SF),2*abs(SF(1:length(SF)/2))/length(SF));  title('低通滤波后频谱');xlabel('频率/Hz');ylabel('幅度');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%时域特征值计算%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%iemg1=sum(abs(sF))/length(sF);rms1=sqrt(sum(sF.^2)/length(sF));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%频域特征值计算%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%L1=length(sF);cx1=xcorr(sF,'unbiased');cxk1=fft(cx1,L1);px1=abs(cxk1);                                                 %求功率谱密度pxx1=10*log10(px1);figure(4)f1=(0:L1-1)*fs/L1;plot(f1(1:L1/2),pxx1(1:L1/2))figure(4)xlabel('频率/Hz');ylabel('功率谱/dB');title('平均功率谱图');grid on                                                          %做功率谱图df1=fs/L1;p1=(sum(px1(1:L1/2-1))+sum(px1(1:L1/2)))/2.*df1;pf1=(sum(px1(1:L1/2-1).*[1:L1/2-1].*df1)+sum(px1(1:L1/2).*[1:L1/2].*df1))/2*df1;MPF1=pf1/p1 ;                                                %求平均功率频率N1=1;pp1=0; while abs(pp1-p1/2)>(px1(N1)+px1(N1+1))/2*df1    pp1=pp1+(px1(N1)+px1(N1+1))/2*df1;    N1=N1+1;endn_1=(N1+N1+1)/2;MF1=df1*n_1;                                                  %求中值频率MF=MF1MPF=MPF1iemg=iemg1rms=rms1

3 仿真结果

4 参考文献

[1]李嘉慧. 基于MATLAB的FIR低通滤波器设计[J]. 智富时代, 2016(S2):1.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值