2023年12月3日发(作者:)

matlab打开dat形式文件_matlab读取dat文件matlab 读取dat文件关注:145 答案:2 mip版解决时间 2021-01-17 21:36提问者壹玍徴戰何亽陪2021-01-17 14:35想用matlab 语句读取桌面上的dat文件,再把他转化为矩阵。比如用fscanf ,请问怎么做呢最佳答案二级知识专家嘴硬欠吻2021-01-17 14:48命令 dlmread 看help 特适合于ASCII字符类型的以空格分开的矩阵dat文件的读入 注意 参数filename 路径问题全部回答1楼千里故人稀2021-01-17 15:34这是我之前处理心电数据时的程序。心电数据是dat,不知道符不符合你的咯。%-------------------------------------------------------------------------% 程序fun_readecgdata 用于读取ecg信号数据,将原始的二值数据转换为十进制数% 输入参数及其示例:% path= 'd:/matlab/r2007b/work/ecg data'; % 指定数据的储存路径% headerfile= ''; % .hea 格式,头文件,可用记事本打开。这个其实只是记录你的dat数据的一些信息的% datafile=''; % .dat 格式,ecg 数据% samples2read=2048; % 指定需要读入的样本数% % 若.dat文件中存储有两个通道的信号:% % 则读入 2*samples2read 个数据% 输出参数:m —— 一个samples2read行2列的数据矩阵,每列数据代表一个通道的信号值%-------------------------------------------------------------------------function m = fun_readecgdata(path,headerfile,datafile,samples2read)%------ load header data --------------------------------------------------%------ 读入头文件数据 -----------------------------------------------------%% 示例:用记事本打开的 文件的数据%% 117 2 360 650000% 212 200 11 1024 839 31170 0 mlii% 212 200 11 1024 930 28083 0 v2% # 69 m 950 654 x2% # none%%-------------------------------------------------------------------------%-------------------------------------------------------------------------% 【注】函数 fprintf 的功能将格式化的数据写入到指定文件中。% 表达式:count = fprintf(fid,format,a,...)% 在字符串'format'的控制下,将矩阵a的实数数据进行格式化,并写入到文件对象fid中。该函数返回所写入数据的字节数 count。% fid 是通过函数 fopen 获得的整型文件标识符。fid=1,表示标准输出(即输出到屏幕显示);fid=2,表示标准偏差。%-------------------------------------------------------------------------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',[1,3]); % 按照格式 '%*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',[1,5]);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;%------ load binary data --------------------------------------------------%------ 读取 ecg 信号二值数据 ----------------------------------------------%% 说明:.dat 文件的数据格式%% 用 uint8 格式读入 n 个样本,存入矩阵 a 中,则 a 有 n 行、3列,每列一个字节,% 即每行用三个字节表示两个数m1、m2,每个数 12 bits,故又称为 212 格式% m1的低8位存放在 a(:,1),m2的低8位存放在a(:,3),% m1的高4位存放在a(:,2)的低4位,m2的高4位存放在a(:,2)的高4位%% 根据上述数据格式,可以用一系列移位、位与操作,提取出十进制格式的双通道信号数据%%-------------------------------------------------------------------------if dformat~= [212,212], 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, [3, samples2read], 'uint8')'; % 矩阵a共有samples2read行、3列,每列数据都是以uint8格式读入,注意这时数据通过uint8的读入方式已经成为十进制数了fclose(fid2);m2h= bitshift(a(:,2), -4); % 字节向右移四位,即取字节的高四位,属于信号2的高4位m1h= bitand(a(:,2), 15); % 取字节的低四位,属于信号1的高4位prl=bitshift(bitand(a(:,2),8),9); % sign-bit 取出字节低四位中最高位,向左移九位prr=bitshift(bitand(a(:,2),128),5); % sign-bit 取出字节高四位中最高位,向左移五位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; % 由于左移时把符号位也移动了,要减去符号位的值m=m'; % 为了方便后期的数据处理,将输出矩阵 m 转置为2行samples2read列%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%下面是调用啦。。。%%%%%%%%%%%%%%%%%%%%%%='e:xiangmumit-bin';a=[];for i=100:131headerfile= strcat(num2str(i),'.hea'); % .hea 格式,头文件,可用记事本打开datafile=strcat(num2str(i),'.dat'); % .dat 格式,ecg 数据samples2read=2048; % 指定需要读入的样本数a(i-99,:)=fun_readecgdata(path,headerfile,datafile,samples2read);endsave a我要举报如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!点此我要举报以上信息!推荐资讯大家都在看