Labview and Matlab for PT

Just a place to discuss with Matlab and Labview

ad

moving average和rms


一般我們在分析肌電訊號的時候簡單方式,讓訊號有如封包(envelope)一樣,或是利用這些方式作為分析比較。
  常用的有,一階的低通濾波,方均根(rootmean square),或是平均的方式以及積分的方式。然而由於取樣頻率高,因此我們不可能把所選取的範圍全部一次作處理,而會利用窗(window)的方式,其意義是,每次選取特定的點作處理。



  依據這樣的概念,利用for loop的方式,也就是每次選取固定的點作為分析使用。

  舉例而言,下圖是一段EMG的訊號。


  以下是所撰寫的程式碼

function [out point]=moving_avg(data,dur)
l=length(data);
k=menu('Select the function','Average','RMS');
switch k
case 1
for i=1:(length(data)-dur);
out(i,1)=mean(abs(data(i:i+dur,1)));
point(i,1)=(i+i+dur)/2;
end
case 2
for i=1:(length(data)-dur);
out(i,1)=sqrt(sum(data(i:i+dur,1).^2)/dur);
point(i,1)=(i+i+dur)/2;
end
end


使用的情形如下


目前以menu方式寫成兩種處理方式。point是說明每一次作處理後點應該落的位置(因為10作完後只有一個點)。
  其結果和原始訊號圖畫在一起如下

2 意見:

小誠故事 提到...

請問 dur 您的例子是用100 意思是 100ms 做一次rms 嗎?

Eric Wu 提到...

取決你的sampling rate, 如果你的sampling rate = 1000Hz, 那個dur = 100就是100ms囉!