EMG信号的低通巴特沃斯滤波器

MATLAB 同时被 3 个专栏收录
793 篇文章 85 订阅

使用matlab中自带的randn函数产生一组随机数,作为EMG信号,然后EMG信号的采样率为2048hz。这里随机数产生的随机数种子采用的机遇系统时钟的随机数种子。系统输入有两个,一个是仿真时间,单位为s,一个是干扰值,输出有两个,一个为EMG信号,一格式带60hz正弦干扰的EMG信号。系统的设计步骤如下所示:

首先使用randn产生一组随机数,然后设计一个低通的巴特沃斯滤波器,其截止频率为150hz,将建立的随机数EMG信号输入到巴特沃斯滤波器。再将滤波得到的信号添加一个60hz的sin信号作为干扰。从而实现函数一个主要功能。

首先通过matlab自带的函数randn函数参数随机数,这里采用基于系统时钟的随机数种子,在matlab中使用的代码语句为:

RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(100*clock)));

这里使用了RandStream命令实现随机数种子的产生,其中sum(100*clock)为获取系统的时钟,这里如果需要每次产生固定的随机数,只需要将clock修改为一个固定的值就可以了。在完成这个语句之后,执行:

y1 = randn([N,1]);

从而完成EMG随机数,其仿真结果如下所示:

图1 EMG随机信号

    为了设计需要,这里还需要对输入的信号进行FFT变换,对于FFT,主要使用MATLAB

的自带函数fft进行分析,matlab的代码如下所示:

fy1 = fft(y1,NFFT);

f = fs/2*linspace(0,1,NFFT/2+1);

subplot(322);

plot(f,abs(fy1(1:NFFT/2+1)));

title('Single-Sided Amplitude Spectrum of y(t)')

xlabel('Frequency (Hz)')

ylabel('|Y(f)|')

grid on;

axis([0,NFFT/2,1.2*min(abs(fy1)),1.2*max(abs(fy1))]);

其仿真如下所示:

图2 EMG随机信号的频谱图

从仿真结果如下所示,随机产生的EMG信号,其频谱图在频域上的各个频率点的都有分布。

    通过代码[n,Wn]=buttord(Wp,Ws, Rp,As)可得到满足性能的模拟巴特沃斯滤波器的最小阶数n及截止频率ωc,其中ωp为通带的拐角频率,ωs为阻带的拐角频率,ωp和ωs的单位均为rad/s;Rs为通带区的最大波动系数,Rp为Rs阻带区的最小衰减系数,Rs和Rp的单位都为dB。

通过[b, a]=butter(n,Wn,'low');[b,a]=butter(n,ωc,′s′)可设计截止频率为的n阶低通模拟巴特沃斯滤波器。将得到的b和a作为滤波器的系数输入,其代码如下:

y2=filter(b,a,y1);

其仿真结果如下所示:

 

图3 通过巴特沃斯滤波之后的波形

其截止频率为150hz,通过FFT后,EMG信号的频谱图如下所示:

 

图4 通过巴特沃斯滤波之后的频谱

从上图可以看到,通过巴特沃斯滤波器之后,信号的频谱只存在于150hz的频域区域,大于150hz的频谱分量被滤除。

  • 1
    点赞
  • 0
    评论
  • 6
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

fpga&matlab

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值