【matlab】matlab 按照不同进制格式连续读取dat文件**

【matlab】matlab 按照不同进制格式连续读取dat文件
**【问题】:**现有一个dat文件,有一组数据按找不同格式有规律的存储再文件中,比如说一个雷达数据由表头+帧头+数据+帧尾…。其中不同项的格式不同,表头8进制、帧头数据16进制、帧尾32进制。问如何使用matlab读取分析?
【问题分解】
1,假设文件有16组数据,如何连续读取数据并分帧?
2,如何将不同进制的数据按不同进制读取?
【问题解答】
1,[matlab] 中的 [fread] 函数常见用法:
`A=fread(fileID,sizeA,precision,skip,machinefmt)
参数见附录:
2,fread函数读取文件的起始位置并不是每次从起始开始;例如:

filename = '###.txt';
f = fopen(filename);
data1 = fread(f,1);
data2 = fread(f,2);
fclose(f);

上述代码中的data1和data2的读取起始点并不相同,因此data1与data2的数据也不是同一个数据,在没关闭文件之前,每执行一次fread,则fread的起始位置为上一次fread的结束位置。关闭文件重新打开后,起始位置重置。
【代码】

filename = '###.txt';
f = fopen(filename);
tmp = fread(f,1,'uint8');
a = 16;
for i=1:a
   header = fread(f,1,'unit16');
   data = fread(f,10,'unit16');
   tail = fread(f,1,'unit32');
   data_mat(i,:) =data;
end
fclose(f) 

附录:
1、fileID 文件标识
打开的文件标识。比如fid=fopen(‘file.dat’); fid就是fileID,即文件标识
2、sizeA 输出数组的维度
有3种参数,Inf、n、[m,n]
Inf 代表输出数据是列向量,文件中每一个元素对应一个值
n 代表有n个元素的列向量
[m,n] 代表按列向量排列的m行n列的矩阵,n可以取Inf,但m不可以
3、precision 需要读取数据的类型和大小,默认’uint8=>double’
常见有uint,uint8、uint16等数据格式,需要根据源数据来确定
4、skip 代表跳过多少字节,默认为0
5、machinefmt 待读取数据字节的排列方式,默认为’n’
需要根据源数据格式来确定,有’b’、‘l’、‘s’、'a’等格式
‘n’就是系统字节的排列顺序,即‘native’
‘b’就是’ieee-be’,即’Big-endian ordering’,即低位字节排放在内存的高地址端,高位字节排放在内存的低地址端
'l’就是‘ieee-le’,即‘Little-endian ordering’即低位字节排放在内存的低地址端,高位字节排放在内存的高地址端

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值