使用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的頻譜分量被濾除,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/131847.html
標籤:其他
