資源簡介
此壓縮包的主要內(nèi)容為表面肌電端點檢測研究,是基于短時能量及方差和作為雙門限來獲取信號端點的,與網(wǎng)上部分文獻(xiàn)類似,但糾正了一些小錯誤,并加以改進,可作為表面肌電處理基礎(chǔ)學(xué)習(xí)的一個參考;
同時,里面包含了3個表面肌電信號數(shù)據(jù)文檔,可直接使用,還包含應(yīng)用到的voicebox數(shù)據(jù)包(程序中有相應(yīng)網(wǎng)址說明如何安裝)
數(shù)據(jù)包包括:main.m(主程序),endpoint_detection.m(端點檢測程序),2018083001-1.xlsx、2018083001-2.xlsx、2018083001-3.xlsx(3個表面肌電數(shù)據(jù)),voicebox.rar(工具包)

代碼片段和文件信息
function?[x1x2]?=?endpoint_detection(x)
?
%%==運行程序之前先在命令窗口運行下段代碼,用以添加voicebox工具箱==%%
%??cd?D:\Program?Files\MATLAB\R2010b\toolbox
%??path(‘?D:\Program?Files\MATLAB\R2010b\toolbox\voicebox‘path)
%%==運行程序之前先在命令窗口運行上段代碼,用以添加voicebox工具箱==%%
%注:voicebox工具箱的添加方式有兩種,其中一種是永久的,具體方法詳見:
%https://blog.csdn.net/jojozhangju/article/details/19337165
%幅度歸一化到[-11],是為了加快數(shù)據(jù)收斂
%本試驗使用的是4通道,根據(jù)具體情況可整體修改
x?=?double(x);
x(:1)?=?x(:1)?/?max(abs(x(:1)));????????%01通道數(shù)據(jù)進行幅度歸一化處理
x(:2)?=?x(:2)?/?max(abs(x(:2)));????????%02通道數(shù)據(jù)進行幅度歸一化處理
x(:3)?=?x(:3)?/?max(abs(x(:3)));????????%03通道數(shù)據(jù)進行幅度歸一化處理
x(:4)?=?x(:4)?/?max(abs(x(:4)));????????%04通道數(shù)據(jù)進行幅度歸一化處理
nx=length(x(:1));?????????????????????????%獲取01通道數(shù)據(jù)長度
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%這里使用的是加窗的方式,即將原來的數(shù)據(jù)分成多個小窗,并添加一定的窗移,這樣就能這
%段信號從頭到尾處理一遍
%常數(shù)設(shè)置
frameLen?=?64;?????????????????????????????%幀長為64點,可按實際情況而定
frameInc?=?20;?????????????????????????????%幀移為20點,可按實際情況而定
?
energy?=0.02;??????????????????????????????%初始短時能量低門限,這個是自己隨便
???????????????????????????????????????????%定的,仿真過程中可自行修改,查看下其規(guī)律
sum_s=0.3;?????????????????????????????????%表征波動的方差和低門限,這個同樣是
???????????????????????????????????????????%自己隨便定的
%對4通路開始信號分幀
channal1??=?enframe(x(1:end-11)?frameLen?frameInc);%enframe為分幀函數(shù),是對x(1:end-1)分幀,幀長frameLen,幀移frameInc
channal2??=?enframe(x(1:end-12)?frameLen?frameInc);%返回值channal1是nf(幀數(shù))x?frameLen(幀長)的數(shù)組,每一行是一幀
channal3??=?enframe(x(1:end-13)?frameLen?frameInc);
channal4??=?enframe(x(1:end-14)?frameLen?frameInc);
nf?=?fix((nx-frameLen+frameInc)/frameInc);%nf幀數(shù)
%?x_nf=nf;
energy_frame=zeros(1nf);??????????????????
sum_s_frame=zeros(1nf);
channal_energy=zeros(14);%要與上面的數(shù)量一致,這里是4;
channal_sum_s=zeros(14);%要與上面的數(shù)量一致,這里是4;
for?i=1:nf-1
????%求8路通道的每幀能量
????channal_energy(1)=sum(channal1(i:).^2);
????channal_energy(2)=sum(channal2(i:).^2);
????channal_energy(3)=sum(channal3(i:).^2);
????channal_energy(4)=sum(channal4(i:).^2);
????energy_frame(i)=sum(channal_energy)/64;%energy_frame數(shù)組存放著每幀數(shù)據(jù)的短時能量,因為之前的幀長是64,所以為了求每幀的幀長,則需要再除以一個64
????channal_sum_s(1)=sum((channal1(i:)-mean(channal1(i:))).^2);%這個原來網(wǎng)上常見的程序存在個小錯誤,此處已改正
????channal_sum_s(2)=sum((channal2(i:)-mean(channal2(i:))).^2);
????channal_sum_s(3)=sum((channal3(i:)-mean(channal3(i:))).^2);
????channal_sum_s(4)=sum((channal4(i:)-mean(channal4(i:))).^2);
????sum_s_frame(i)=sum(channal_sum_s)/64.0;%sum_s_frame數(shù)組存放著每幀數(shù)據(jù)的方差和
end
%調(diào)整能量門限
%說明,之前網(wǎng)上的程序使用的門限是energy、sum_s,這里進行了修改,通過研究發(fā)現(xiàn)
%energy對起止點選擇不如sum_s的大,且可以選取不同的sum_s值,使得起點、終點的條件不同,更靈活一些
energy=min(energy0.02*max(energy_frame))%里面的0.02及下面的0.01、0.28是可以自己改的,如果可以的話,也可以采用自適應(yīng)的方法,自動調(diào)整參數(shù)
sum_s1=min(sum_s0.01*max(sum_s_frame))
sum_s2=min(sum_s0.28*max(sum_s_frame))
%開始端點檢測
x1=0;
x2=0;
for?k=1:nf-1
????if?energy_frame(k)>energy&sum_s_frame(k)>sum_s2
????????x1=k;
????????break;
????end
end
for?m=x1:nf-1
????if?energy
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????976526??2018-10-06?21:13??表面肌電端點檢測研究主程序\2018083001-1.xlsx
?????文件?????355891??2018-10-05?23:45??表面肌電端點檢測研究主程序\2018083001-2.xlsx
?????文件?????399416??2018-10-05?23:46??表面肌電端點檢測研究主程序\2018083001-3.xlsx
?????文件???????3692??2018-10-14?10:18??表面肌電端點檢測研究主程序\endpoint_detection.m
?????文件???????5684??2018-10-14?10:17??表面肌電端點檢測研究主程序\main.m
?????文件?????619236??2018-10-14?09:32??表面肌電端點檢測研究主程序\voicebox.rar
?????目錄??????????0??2018-10-14?10:24??表面肌電端點檢測研究主程序
-----------?---------??----------?-----??----
??????????????2360445????????????????????7
評論
共有 條評論