资源简介
MATLAB 对ECG原始数据(MIT-BIH库)信号进行低通滤波、工频干扰抑制、线性滤波(基线漂移就正)和简单的QRS波、R点识别。
代码片段和文件信息
%% ECG数据库(MIT-BIH库)读取识别QRS波
%有待确认(1)(2)的效果哪个更好
clc;
clear;
PATH= ‘E:\MATLAB\ecg数据\xdsj‘; %指定数据的储存路径
HEADERFILE= ‘100.hea‘; %.hea 格式,头文件,可用记事本打开
DATAFILE=‘100.dat‘; %.dat 格式,ECG 数据
SAMPLES2READ=4*2048; %指定需要读入的样本数若.dat文件中存储有两个通道的信号:则读入 2*SAMPLES2READ 个数据
%头文件中的信息
fprintf(1‘\\n$> WORKING ON %s ...\n‘ HEADERFILE); % 在Matlab命令行窗口提示当前工作状态
signalh=fullfile(PATH HEADERFILE); % 通过函数 fullfile 获得头文件的完整路径
fid1=fopen(signalh‘r‘); % 打开头文件,其标识符为 fid1 ,属性为‘r‘--“只读”
z=fgetl(fid1); % 读取头文件的第一行数据,字符串格式
A=sscanf(z ‘%*s %d %d %d‘[13]); % 按照格式 ‘%*s %d %d %d‘ 转换数据并存入矩阵 A 中
nosig= A(1); % 信号通道数目
sfreq=A(2); % 数据采样频率
clear A; % 清空矩阵 A ,准备获取下一行数据
for k=1:nosig % 读取每个通道信号的数据信息
z= fgetl(fid1);
A= sscanf(z ‘%*s %d %d %d %d %d‘[15]);
dformat(k)= A(1); % 信号格式; 这里只允许为 212 格式
gain(k)= A(2); % 每 mV 包含的整数个数
bitres(k)= A(3); % 采样精度(位分辨率)
zerovalue(k)= A(4); % ECG 信号零点相应的整数值
firstvalue(k)= A(5); % 信号的第一个整数值 (用于偏差测试)
end;
fclose(fid1);
clear A;
%读取data数据
if dformat~= [212212] error(‘this script does not apply binary formats different to 212.‘); end;
signald= fullfile(PATH DATAFILE); % 读入 212 格式的 ECG 信号数据
fid2=fopen(signald‘r‘);
A= fread(fid2 [3SAMPLES2READ] ‘uint8‘); % matrix with 3 rows each 8 bits long = 2*12bit 矩阵A共有SAMPLES2READ行、3列,每列数据都是以uint8格式读入,注意这时数据通过uint8的读入方式已经成为十进制数了
fclose(fid2);
M2H= bitshift(A(2:) -4); % 字节向右移四位,即取字节的高四位,属于信号2的高4位
M1H= bitand(A(2:) 15); %取字节的低四位
PRL=bitshift(bitand(A(2:)8)9); % sign-bit 取出字节低四位中最高位,向左移九位 移位?
PRR=bitshift(bitand(A(2:)128)5); % sign-bit 取出字节高四位中最高位,向左移五位
M( 1 :)= bitshift(M1H8)+ A( 1 : )-PRL;% 将M1H、M2H分别左移8位,即乘以2^8,再分别加上A(:1),A(:2),
M( 2 :)= bitshift(M2H8)+ A( 2 : )-PRR;% 由于左移时把符号位也移动了,要减去符号位的值
%if M(1:) ~= firstvalue error(‘inconsistency in the first bit values‘); end;
%switch nosig
%case 2
M( 1 :)= (M( 1 :)- zerovalue(1))/gain(1);
M( 2 :)= (M( 2 :)- zerovalue(2))/gain(2);
TIME=(0:(SAMPLES2READ-1))/sfreq;
%case 1
%M( : 1)= (M( : 1)- zerovalue(1));
%M( : 2)= (M( : 2)- zerovalue(1));
%M=M‘;
%M(1)=[];
%sM=size(M);
%sM=sM(2)+1;
%M(sM)=0;
%M=M‘; % 为了方便后期的数据处理,将输出矩阵 M 转置为2行SAMPLES2READ列
%M=M/gain(1);
%TIME=(0:2*(SAMPLES2READ)-1)/sfreq;
%otherwise % this case did not appear up to now!
% here M has to be sorted!!!
%disp(‘Sorting algorithm for more than 2 signals not programmed yet!‘);
%end;
clear A M1H M2H PRR PRL;
fprintf(1‘\\n$> LOADING DATA FINISHED \n‘); %装载数据完成
figure(1); clf box on hold on
plot(TIME M(1:)‘r‘);
%if nosig==2
%plo
- 上一篇:序列二次规划法及matlab代码
- 下一篇:多智能体一致性问题报告
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论