日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

事件相关电位(ERP)的简单处理流程(含MATLAB代码)

發布時間:2024/1/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 事件相关电位(ERP)的简单处理流程(含MATLAB代码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事件相關電位的呈現是在特定頻帶下的時域波形,從這個角度出發的話,其處理就涉及到濾波;此外由于腦電信號易受噪聲干擾,所以單獨測出的每兩次的數據肯定是不同的,甚至會差別很大,即使是在同一條件下,這就需要去除噪聲(這里不做詳細介紹)、去除基線疊加平均
簡單的處理流程:

  • 濾波
  • 分段&加標簽
  • 去基線
  • 疊加平均
  • 濾波(filt raw): 濾波的作用有兩個,第一,取出我們關注的ERP特征最明顯的頻段的數據,比如8~13Hz;第二,濾除低頻漂移(線性趨勢),有的時候觀察原始波形,發現會有一個線性上升或者下降,經過低頻濾波便可去除,比如過濾掉3Hz以下的數據。
    一個典型的MATLAB濾波函數如下:

    % 濾波iir function r=filtraw(raw,fs,lowcut,highcut,order) sizeraw=size(raw); udfilter=designfilt('bandpassiir','FilterOrder',order, ...'HalfPowerFrequency1',lowcut,'HalfPowerFrequency2',highcut, ...'SampleRate',fs); for i=1:sizeraw(1)raw(i,:)=filter(udfilter,raw(i,:)); end r=raw; end

    分段&加標簽(epoch & label): 我們一般獲取到的數據是連續多個任務的,還涉及到任務之間短暫休息時候的信號,這些信號是沒用的,分段&加標簽的作用就是把有用的時間段的數據取出來。由于一般我們采用多通道的電極采集信號,所以得到的原始數據一般是二維的,比如得到的數據是16x120000個,可以認為是16通道每個通道120000個數據點,如果采樣率是1200,那就是100s的數據。假設任務周期是10s,關注的是每個10s中的第4~7s共3s的數據,那么是不是16x3600x10的數據結構比較好了,如果這10個任務中,有一半是任務1,另外一半是任務2,就需要一個標簽文件標注第幾個是任務幾了(一般采集數據的時候就完成了);也可以將數據分為兩個16x3600x5的,這樣就不需要標簽文件了,只需要備注好數據名就好。
    (由于每個人打標簽的方法可能都不同,這里就不放我的代碼了,我的代碼很亂)
    去基線:(remove baseline) 去基線的原因是,我們獲取到的腦電信號,有正有負,但是我們不能說這個就是腦電信號的絕對值,腦電信號獲取到的都是相對的電壓值(所以才會有重參考的概念);或者可以認為去基線就是為了在畫圖的時候,任務開始的0時刻之前的數據靠近或者為0,這樣才會有任務期間時域波形的相對變化。我們一般取任務開始0時刻之前的100ms~200ms作為基線,每一次任務期間,基線的值可能都不同,所以不去除基線的話,下一步的疊加平均是無效的,因為沒有基準,比如有的基線為負,有的基線為正,這樣的情況下執行疊加平均,在基線抵消的時候,可能任務期間的波形也會抵消,也就獲取不到ERP了。
    去基線的具體方式就是,對于單次任務的腦電信號,對基線期間的腦電信號進行疊平均,然后用所有的腦電信號,減去這個平均值,得到去基線之后的信號,新的信號在基線期間是靠近0線的。

    % 去除基線 function r=rbase(eeg,fs,tbase)sizeeeg=size(eeg);base=zeros(sizeeeg(1),1);nbase=fs*tbase;for i=1:sizeeeg(3)for j=1:nbasebase=base+eeg(:,j,i);endbase=base/nbase;eeg(:,:,i)=eeg(:,:,i)-base;endr=eeg; end

    疊加平均:(average) 這個就不解釋了
    代碼:

    % 疊加平均 function r=average(eeg) sizeeeg=size(eeg); sizetemp=size(sizeeeg); if sizetemp(2)==3temp=zeros(sizeeeg(1),sizeeeg(2),1);for i=1:sizeeeg(3)temp=temp+eeg(:,:,i);endr=temp/sizeeeg(3); elseif sizetemp(2)==2temp=zeros(sizeeeg(1),1);for i=1:sizeeeg(2)temp=temp+eeg(:,i);endr=temp/sizeeeg(2); end end

    如果你的信號比較好,經過簡單的四步,就能得到自己想要的ERP了,如果不行,就需要添加一些去除噪聲的步驟了,所以最好的辦法就是一開始就獲取到好的信號。
    題圖來源:維基百科
    https://en.wikipedia.org/wiki/Event-related_potential

    總結

    以上是生活随笔為你收集整理的事件相关电位(ERP)的简单处理流程(含MATLAB代码)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。