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

使用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的代码如下所示:

扫描二维码关注公众号,回复: 11837756 查看本文章

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的频谱分量被滤除。

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/108784268