MIT-BIH數據庫PSG信號提取(含EEG)

MIT-BIH Polysomnographic

找了一圈都是針對MIT-BIH ECG數據庫的,寫一下另一個數據庫(含腦電的PSG)

簡介:

數據庫由 18 個記錄組成,

導聯數有四個、六個和七個三種,信號採樣率是 250Hz,A/D 分辨率是 12Bit,

每個記錄由四個文件組成,分爲頭文件、數據文件和註釋文件。

其中註釋文件包括兩個,擴展名爲.ecg 的註釋文件和擴展名爲.st 的註釋文件。

其中擴展名爲.ecg 的文件主要是對心電和呼吸信號做註釋,

而擴展名爲.st 的文件主要對腦電導聯做註釋。

 

(18記錄對應導聯,其他爲(四)):

C4-A1:slp01a、slp01b、slp32(七)、slp37(七)、slp41(七)

O2-A1:slp02a、slp02b

C3-O1:slp03、slp04、slp14、slp16、slp45(七)、slp48(七)、slp59(七)、slp60(七)、slp61(六)、slp66(七)、slp67x(七)

 

頭文件讀取

用txt打開頭文件 ↓ 

slp01a 4 250/0.033333333(94) 1800000 23:07:00 19/1/1989    
      %4通道、採樣率250Hz,180萬個採樣點
slp01a.dat 212 -200/mV 12 0 -17 59911 0 ECG
slp01a.dat 212 4.77778(-477)/mmHg 12 0 -248 19332 0 BP
slp01a.dat 【1】212 【2】-6430/mV 【3】12 【4】0 【5】252 【6】49594 【7】0 【8】EEG (C4-A1)  
          【1】即每行用三個字節表示兩個數m1、m2,每個數 12 bits,故又稱爲 212 格式
          【2】信號的增益,ADC units/mv
          【3】ADC 的分辨率爲 12 位
          【4】ADC 零值爲 0
          【5】採樣點的值爲252
          【6】校驗數    【7】輸入輸出可以以任何尺寸的塊來執行     【8】導聯
slp01a.dat 212 690/l 12 0 -180 912 0 Resp (sum)
# 44 M 89 32-01-89

數據文件的讀取

signald = 'D:\mit-bih\data\slp01a.dat'; 
fid2=fopen(signald,'r');
SAMPLES2READ=2500;              %2500行,採樣率250Hz,即讀取5s數據
A= fread(fid2, [3, SAMPLES2READ], 'uint8')'; %212格式 3字節;'uint8'用1個字節表示 
fclose(fid2);
按212格式編排的數據

.dat文件的數據格式讀取爲每行三個字節,即三個八位的二進制數字,其內容含義爲

      0000 0000  ||             0000 0000              ||  0000 0000

sign1(L)低八位信息||左四位sign2(R)信息,右四位sign1(L)信息||sign2(R)低八位信息

將第二字節的信息處理後,後四位移至第一字節最左位即得到完整的sign1

將第二字節的信息處理後,前四位移至第一字節最左位即得到完整的sign2.

M2H= bitshift(A(:,2), -4);        % 取A得第二列,-4表示字節向右移四位,即取信號2的高4位
M1H= bitand(A(:,2), 15);          % bitand返回A和B的按位‘與’,即取信號1的高4位(15表示‘0000 1111’)
PRL=bitshift(bitand(A(:,2),8),9);              % 取出字節低四位中最高位,向左移九位(8表示‘0000 1000’)
PRR=bitshift(bitand(A(:,2),128),5);            % 取出字節高四位中最高位,向左移五位(128表示‘1000 0000’)
M( : , 1)= bitshift(M1H,8)+ A(:,1)-PRL;        % 將M1H、M2H分別左移8位,即乘以2^8,再分別加上A(:,1),A(:,2),
M( : , 2)= bitshift(M2H,8)+ A(:,3)-PRR;        % 由於左移時把符號位也移動了,要減去符號位的值
按212格式解析的M

 

當信號四通道時:

前兩通道212三字節,後兩通道212三字節,經上述解析得 ↓

ECG

BP

EEG

Resp

ECG

BP

EEG

Resp

還要將讀取的ECG、BP、EEG、Resp數據分別從M提取並放置於data的1234行

for  i=1:SAMPLES2READ
     if mod(i,2)==1
         data(1,(i+1)/2) = M(i,1);     % row1:ECG
     else
         data(3,i/2) = M(i,1);         % row3:EEG
     end  
end
for  i=1:SAMPLES2READ
     if mod(i,2)==1
         data(2,(i+1)/2) = M(i,2);     % row2:BP
     else
         data(4,i/2) = M(i,2);         % row4:Resp
     end  
end

 

plot EEG、ECG、Resp

 

當信號七通道時:

M1 = [];
for i=1:SAMPLES2READ
    M1 = [M1;M(i,1)];
	M1 = [M1;M(i,2)];
end
for  i=1:2*SAMPLES2READ
    switch mod(i,7)
        case 1
            data(1,(ceil(i/7))) = M1(i);     % row1:ECG
        case 2
            data(2,(ceil(i/7))) = M1(i);     % row2:BP
        case 3
            data(3,(ceil(i/7))) = M1(i);     % row3:EEG
        case 4
            data(4,(ceil(i/7))) = M1(i);     % row4:Resp (nasal)
        case 5
            data(5,(ceil(i/7))) = M1(i);     % row5:Resp (chest)
        case 6
            data(6,(ceil(i/7))) = M1(i);     % row6:EOG
        otherwise
            data(7,(ceil(i/7))) = M1(i);     % row7:EMG
     end  
end

 

發佈了20 篇原創文章 · 獲贊 3 · 訪問量 4857
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章