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

 

  • 10
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值