“工作中,我们常用的数采系统有:B&K, LMS, Head等,除其自身的软件(Pulse/Connect, Test Lab, Artemis)外,我们还会用Matlab,Python等软件对数据进行特殊的分析。在此过程中,会遇到原始测试数据格式转换的问题,近几篇文章将简要介绍如何直接读取这一类型的原始数据文件。”
00
—
前言
2020年开篇,先祝大家健康平安!
在这个最漫长的寒假中,我尝试着识别了三种数采系统记录的测试数据(B&K: *.DAT; LMS: *.ldsf; Head: *.hdf)。
这三种数据文件的存储格式虽各不相同,但有着相同的基本原则。
其记录的数据都存在一个文件内,且文件都是由ASCII码明文和某类型的二进制数据组成。即,用记事本打开文件时,显示为图1所示:
图1
我们的任务是:通过编程,直接读取该文件中的数据(虽然各自的软件都可以导出不同数据格式,但是,谁让这个寒假太过漫长
~)。
本篇先介绍二进制数据的一些基本概念及数据类型:
1. 位,字节。
2. ASCII码明文。
3. 16位带符号位的整型。
4. 32位单精度浮点型。
01
—
位,字节
如果我们一位一位(bit)地读取数据的话,显示如图2。
8位是1个字节(8 bits = 1 Byte)。
为了方便查看,图2中特意每8位中间用逗号隔开,且用不同颜色标识。
图2
02
—
ASCII码明文
图1中,用记事本打开文件后,显示的都是8位整型的ASCII码明文,之所以会出现乱码,是因为大部分数据不是ASCII码格式的。
ASCII码是8位整型数据,数据从低位到高位读取。计算方法如图3。
图3
03
—
16位带符号位的整型
图1中,用记事本打开文件后,成片的乱码基本上就是测试数据了。
拿16位带符号位的整型来举例,数据从低位到高位读取。计算方法如图4。
数采系统的数据位数多是:24位、32位等,这可以在硬件信息中查找。
图4
04
—
32位单精度浮点型
另外,还有一种数据类型:浮点型。
拿32位单精度浮点型来举例,数据从低位到高位读取。计算方法如图5。
还有64位,双精度等浮点型,算法不作详述。
图5
05
—
总结
一个数据文件内,往往包含:ASCII明文、整型数据、浮点型数据等。
ASCII明文:介绍了一些基本的测试信息。如:通道数、采样频率、对整型/浮点型的修正系数等。
整型数据:即测试的各通道数据,因为是整数(有正负),所以需要乘以固定的修正系数(各通道可能各不相同)。
浮点型数据:有些数采可能采用浮点型记录数据,浮点型数据是有小数点的数据,有些也需要乘以固定的修正系数。
了解了以上的数据类型,即具备了编程读取数据文件的一些知识准备。后续将简要介绍如何找到数据的具体位置以及还原数据的注意事项等。