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