基于C#的MTU系列大地电磁测深仪数据文件的研究与应用
A C#-based study and application of data files from MTU series magnetotelluric sounders
责任编辑: 王萌
收稿日期: 2022-02-16 修回日期: 2022-05-22
基金资助: |
|
Received: 2022-02-16 Revised: 2022-05-22
作者简介 About authors
贺景龙(1988-),男,2012年毕业于长安大学地球物理学专业,工程师,主要从事物探数据处理工作。Email:
加拿大凤凰公司MTU系列大地电磁仪因其仪器轻便、数据采集稳定可靠等优点得到地球探测各行业的广泛应用,但其数据格式的特殊性,使得处理起来比较麻烦。目前,大多处理依赖该公司开发的SSMT-2000软件进行,这样不利于处理方法的改进以及应用。本文通过研究MTU系列仪器的数据文件格式,利用UltraEdit软件分析数据文件的结构以及规律,基于C#语言编写程序,对TBL、CLB、CLC以及TS文件进行分析与研究,将MTU系列仪器的数据文件从难以读懂的二进制文件转码为比较容易读懂的明码文件,提供了TBL参数文件的修改编辑模块、CLC、CLB文件的数据分析模块以及TS文件的转换模块,并应用该程序对野外实测数据进行了编辑。通过测试,程序可以进行TBL文件参数修改,CLB、CLC文件数据分析,TS文件转换,为研究此类二进制数据文件提供了新的思路和方法。
关键词:
The MTU series magnetotelluric sounders produced by Phoenix Geophysics Ltd. in Canada have been widely used in various fields of earth exploration because of their advantages, such as small weight and stable and reliable data acquisition. However, their special data formats make the data processing troublesome. At present, most of the data processing depends on the SSMT-2000 software developed by Phoenix Geophysics, which is not conducive to the improvement and application of data processing methods. By studying the formats of data files of MTU series magnetotelluric sounders, this study used the UltraEdit software to analyze the structure and rules of the data files and analyzed and studied TBL, CLB, CLC, and TS files based on the C# programming language. As a result, this study transcoded the data files from indigestible binary files into plain files that are easy to understand and provided the modification and editing module of TBL parameter files, the data analysis module of CLC and CLB files, and the transformation module of TS files. The data measured in the field were edited using the program developed in this study. The test results verify that the program can modify TBL file parameters, analyze CLB and CLC files, and convert TS files. Therefore, this study provides a new idea and method for studying such binary files.
Keywords:
本文引用格式
贺景龙, 王占彬, 寇少磊, 杨凯.
HE Jing-Long, WANG Zhan-Bin, KOU Shao-Lei, YANG Kai.
0 引言
大地电磁法作为地球物理中一种重要方法,在各个行业应用广泛。加拿大凤凰公司MTU系列大地电磁仪因其仪器轻便、稳定可靠、功能齐全,在国内油气勘探、矿产勘查、工程勘探等领域使用较多。在对MTU系列仪器的数据处理上,一般是应用SSMT-2000软件进行预处理。前人也有对其文件头数据格式的分析与研究,柳建新等[1]基于VB6.0编程语言,编写了读取TBL格式文件相关程序;仇根根等[2]利用MATLAB平台,分析研究了TBL参数文件的相关内容;雷清等[3]基于Python编写了相关程序,对TBL文件进行了分析研究,实现了相关功能的批量处理。前人大多是对TBL参数文件进行剖析和相关处理,但是对CLB、CLC、TS文件的研究比较少。本次研究是在前人研究的工作基础上,进行更深一步的研究和应用。
1 数据文件格式
1.1 TBL文件
随着MTU系列仪器的更新换代,其TBL参数文件的内容也发生了变化,但是基本格式始终没有多大变化(表1)。TBL参数文件是以二进制编码格式存储的,该文件最初大小是2 350个字节,共有94项记录,随着仪器的更新,现在的大小是3 500个字节,共有140项记录,随着技术和仪器的发展,其大小以后也会发生变化,故TBL参数文件的大小不是固定的,但是TBL参数文件的格式始终是有规律的:每条记录占据25个字节,代表大地电磁测量的一项参数。
字节位置 | 数据类型 | 字节数 | 字节意义 | 备注 |
---|---|---|---|---|
1~5 | string(字符串) | 5 | 记录名(参数名) | |
6~7 | int16(2字节整型) | 2 | MTU控制程序编号 | |
8~11 | int32(4字节整型) | 4 | MTU控制程序 | |
12 | string(字符串) | 1 | 数据类型识别符 | |
13~25 | object(未知类型) | 13 | 记录的数据 | 类型根据识别符可变 |
从前人研究的成果中可以知道,TBL参数文件的25个字节中,记录名占5个字节,数据类型标志符占1个字节,数据占据13个字节,MTU控制程序编号占2个字节,MTU控制程序占4个字节,基于C#创建一个数据结构(public class Record 新数据类型),其中Data类型未知:
public class Record //新数据类型,Data类型未知;
{
public string Name;//5字节
public int16 Mtu1;//2字节
public int32 Mtu2;//4字节
public string Datastyle;//1字节
public object Data; // 未知类型
}
TBL每条记录的第12个字节,即数据类型标志符有6种变化如表2。
表2 不同标志符对应的数据类型对照[1]
Table 2
标志符 | 数据类型 | 字节数 | 字节意义 | 备注 |
---|---|---|---|---|
0 | int32(4字节整型) | 4 | 整数型数据 | |
1 | double(双精浮点型) | 8 | 浮点型数据 | |
2 | string(字符串) | 9 | 字符串数据 | |
3 | string(字符串) | 8 | 字符串数据 | |
4 | string(字符串) | 13 | 字符串数据 | |
5 | Date(时间类型) | 8 | 时间数据 | 格林威治标准时间 |
格林威治标准时间(占8字节)的记录方式如表3。通过研究TBL参数文件的数据结构和数据类型,有利于后期编写相关程序,以快速批量处理TBL参数错误的问题以及完善SSMT-2000软件不具备的一些功能,改进TBL参数文件的研究程度和工作方法。
表3 格林威治时间记录字节分配
Table 3
字节 位置 | 字节 意义 | 字节数 | 备注 |
---|---|---|---|
1 | 秒 | 1 | 时间记录每个字节代表一种时间类型,可以转化为占两个整数的时间数据,例如时间20/7/21/05/13/13:22:45,字节记录反序排列再转二进制就是TBL标准时间格式 |
2 | 分 | 1 | |
3 | 时 | 1 | |
4 | 日 | 1 | |
5 | 月 | 1 | |
6 | 年 | 1 | |
7 | 周 | 1 | |
8 | 世纪 | 1 |
利用SSMT-2000软件可以进行TBL参数文件部分记录的修改和编辑,但是其模块比较封闭,功能比较单一,想要增加一些功能就比较麻烦,不利于大地电磁方法的发展和研究工作,因此,很有必要进行开源的程序开发和接口代码的编写来实现其不具备而又比较迫切的功能。
1.2 CLC、CLB文件
由于前人对CLB和CLC文件的研究比较少,故在研究这两个文件之前,先利用UltraEdit软件进行分解,查看其二进制分布规律。通过分析,这两种文件的大小与仪器和探头的型号是密切相关的,但是其头文件的信息是基本一致的。CLB文件是仪器标定的参数信息文件,CLC文件是探头标定的参数信息文件。研究这2个文件对于TS数据文件的数据校正有很大的帮助。
MTU-5A型仪器的CLB文件的文件头占了132个字节,每个频率为一个数据块,一个数据块共有128个字节,其中频率头信息占8个字节,其他数据信息占120个字节。每个数据块由频率头信息和5频道数据构成,每个频道的数据占24个字节。
AMTC-150型磁探头的CLC文件的文件头数据占132个字节,每个频率为一个数据块,每个数据块由频率头信息和其他数据信息构成,其中频率头信息占8个字节,其他数据信息占24个字节,每个数据块占32个字节。
1.3 TS文件
MTU系列仪器的数据文件是依次记录的时间序列,根据频带不同,TS文件扩展名不同,TSH为V5兼容模式的Band3和Band4的采样频带数据,TSL为V5兼容模式的Band5的采样频带数据,TSn文件对应TS2、TS3、TS4、TS5等的二进制编码文件,TS2文件的采样率为24 000,TS3采样率为2 400,TS4的采样率为150,TS5的采样率为15。
每个TS时间序列文件由许多条记录组成,每条记录由一个数据头(tag)和一串数据(data)组成。TSn文件每条记录的数据头占32个字节,数据按照时间先后以24位补码保存,一个24位补码即是一个采样,每一个扫频(scan)由很多道的很多个采样组成,每条记录里又有很多个扫频。
2 文件信息提取的C#实现
2.1 TBL参数修改模块的实现
基于C#编写TBL参数修改编辑模块,可以完成TBL参数的修改编辑,以及二进制文件到明码文件的转换功能。
图1为基于C#的TBL参数文件的修改编辑模块的WinForm界面,该模块主要完成TBL参数文件的测点编号、文件编号、经纬度、方位角、探头编号、采集时间等记录的编辑和修改功能,并提供二进制TBL文件到明码文件的转换功能。该模块的部分核心代码如下:
for (int i = 0; i < count; i++)
{
record.Name = Encoding.Default.GetString(binary.Skip(25 * i).Take(5).ToArray());
record.Mtu1 = BitConverter.ToInt16(binary.Skip(25 * i + 5).Take(2).ToArray(), 0);
record.Mtu2 = BitConverter.ToInt32(binary.Skip(25 * i + 7).Take(4).ToArray(), 0);
record.Datastyle = ByteToInt(binary.Skip(25 * i +11).Take(1).ToArray()).ToString();
byte[] byteValue = binary.Skip(25 * i + 12).Take(13).ToArray();
}
图1
图1
基于C#的TBL参数文件的修改编辑模块
Fig.1
C# based TBL parameter file modification edit module
2.2 CLB、CLC数据分析模块的实现
将CLB、CLC文件的头文件和数据块分别整合为一个数据结构,如表4所示。CLC文件和CLB文件的文件头信息大部分是一样的,部分参数略有不同。这样就可以把CLB、CLC文件进行二进制到明码文件的转换和分析研究。
表4 CLB、CLC数据结构
Table 4
CLB数据结构 | CLC数据结构 | 数据类型 | 备注 |
---|---|---|---|
DateTime | DateTime | string | 格林威治时间,8字节 |
BoxSerial | BoxSerial | int | 盒子序列号(16位整数),2个字节 |
ScanNumbers | ScanNumbers | int | Scan个数,2个字节 |
Stat | Stat | int | 状态,1个字节 |
Hw | Hw | string | 盒子硬件配置,12个字节 |
Ver | Ver | string | 软件版本号,12字节 |
Tcmb | Tcmb | int | 梳状滤波器型号,4个字节 |
Tals | Tals | int | 锯齿滤波器型号,4个字节 |
Lfrq | Lfrq | int | 工业频率,4个字节 |
V5sr | V5sr | int | V5采样率(单位20byte),4个字节 |
Lpfr | Lpfr | long | 低通滤波器参数,4个字节 |
/ | Hsn | string | 磁棒号,12字节 |
Hatt | Hatt | double | 探头衰减系数,8字节 |
/ | Hnom | double | 探头设定增益,8字节 |
/ | Cphc | double | 磁棒高通夹角频率,8字节 |
Va | Va | int | 频带编号,2个字节 |
Fa | Fa | float | 频率,4个字节 |
Ca | Ca | int | 频率编号,2个字节 |
Value | Value | float | 数据块,120个字节 |
校准文件头的读取采用数据结构的方式一次性进行读取,校准数据的读取通过UltraEdit软件将二进制转换为十六进制,观察期规律,以数据块的形式循环读取。
2.3 TS文件转换模块的实现
根据TS文件的数据格式的特殊性,将其建立一个数据结构:
public class Record //新数据类型,Data类型未知;
{
public string DateTime ;//格林威治时间,8字节
public int BoxSerial;//盒子序列号(16位整数),2个字节
public int ScanNumbers;//记录中scan的个数(16位整数),2个字节
public int ScanTracks;//每次scan的道数,1个字节
public int TagLength; // tag的长度(TSn)或(TSH,TSL),1个字节
public int Status;//状态代码,1个字节
public int Saturation;//位饱和标志,1个字节
public int DiffTagMarks;//保留,不同tag或采样格式的标记,1个字节
public int SamplingLength;//采样长度(单位Bytes),1个字节
public int SamplingRate;//采样率(单位20byte),2个字节
public string SamplingRateUnit;//采样率单位,1个字节
public int ClockStatus;//时钟状态,1个字节
public int ClockError;//时钟误差,单位微妙,4个字节
public string Retains;//保留,必须为0,6个字节
public int Value;//时间序列,TS值
}
针对这样的数据结构,基于C#编写TS文件的转换程序,其核心代码如下:
for (int i = 0; i < count; i++)
{
Task<Int32> t =new Task<Int32>(n => Sum((Int32)n), 1000);//启用多线程
t.Start();
t.Wait();
byte[] linefeed0 = Encoding.ASCII.GetBytes("\r\n");
file_write.Write(linefeed0, 0, linefeed0.Length);
for (int j = 0; j < record.ScanNumbers * record.ScanTracks; j++)
{
if (j != 0 && j % record.ScanTracks == 0)
{
byte[] linefeed = Encoding.ASCII.GetBytes("\r\n");
file_write.Write(linefeed, 0, linefeed.Length);
}
byte[] co = content.Skip((i + 1) * 32 + i * record.ScanNumbers * record.ScanTracks * 3 + j * 3).Take(3).ToArray();
record.Value = Int24ToInt32_1(co);//采样值
byte[] value = Encoding.ASCII.GetBytes(record.Value.ToString() + "\0\0\0\0\0");
file_write.Write(value, 0, value.Length);
}
}
基于C#的TS文件转换模块包含了TS文件的读取、转码、转换等功能。对于研究这类文件和后期数据处理有一定的意义。后期傅里叶变化,加窗处理,数据标定,阻抗估计等更加复杂,在阻抗估计方面,最小二乘法在大地电磁中应用广泛[19]。
3 实测数据应用与讨论
3.1 实测数据文件应用。
本次搜集了一些V5-2000仪器的野外实测数据,以验证程序的可操作性。对于数据的TBL文件参数的编辑通过实测数据的验证,可以对单点进行参数编辑,同时也可以批量进行参数编辑。但是在实际应用中,往往会遇到野外实测数据校准之后死频带难以处理的问题,而校准文件又无法读取实际参数。分析校准文件的频段信息很有意义。
本次应用采用的数据是AMT方法施工中的一些数据,AMT施工中实测数据的CLB、CLC校准文件的频率是固定频率,这样的频率参数表有优点也有缺点,其优点就是施工操作简单,采集样本参数可以保持一致,但是这样对于不用采样点来说,就会有频率空窗。如果不去解码校准文件,很难发现这样的问题。本次开发的CLB、CLC分析模块可以分析不同频段校准文件的频点数以及各频点数对应的校准值,以方便验证校准文件的可靠性(图2)。
图2
图2
基于C#的MTU系列文件处理软件界面
Fig.2
MTU series file processing software interface based on C#
本次还基于C#编写了TBL参数文件的编辑模块,可以批量修改采样点的基础参数。同时也编写了TS文件的转换模块,由于TS文件是随时间连续采样的时间序列,解码成可以读取的文本文件之后就可以利用一些曲线成图软件绘制采样波形图,以查看采样的信号质量。后期如果开发出移动PC软件查看采样波形,就可以在采样的过程中实时监测信号质量了。
3.2 数据解码讨论
对于二进制文件,一般的解码方式是通过查看ACSII码表,进行字符串的转码,其他数据类型在不知道其具体类型的情况下,是比较困难的。世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。
常用的编码方式有ACSII码、GBK码、Unicode码等。其中ACSII码使用7位二进制数表示一个字符,GBK码是我国广泛应用的编码方式,一般是用两个字节来表示一个字符,Unicode码是用不同的字节表示不同字符,比如UTF-8,UTF-16,UTF-32等,分别用1字节,3字节,4字节表示不同范围的字符[20-21]。所以Unicode编码方式是目前世界上最通用的编码方式。Unicode是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字严。具体的符号对应表,可以查询专门的汉字对应表。
MTU-5A仪器记录的数据文件是一种补码,24位AD码,这是为了保持仪器高速且低功耗的采样而采取的数模转换算法。利用UltraEdit软件打开数据文件并转换成16进制编码方式,可以查看一些字符信息和编码规律。如图3所示,TBL文件转换为16进制后,可以查看其分布规律是每25个字节有一个字符串表示参数名称。
图3
4 结论
本次通过研究MTU系列仪器的参数文件以及数据文件,从根本上掌握了该数据文件的二进制编码方式,以及数据采集的基本原理。TBL参数文件是大地电磁测量的数据采集参数文件,存储了数据采集的基本信息。CLB文件是仪器(盒子)标定的参数文件,存储了仪器标定的数据信息。CLC文件是探头(磁棒)标定的参数文件,存储了探头标定的数据信息。TS文件是所采集的数据文件,是按照时间顺序存储的时间序列。通过对这些文件结构剖析以及数据数据分析,为研究后面的时间序列傅里叶变化、加窗处理、数据标定、阻抗估计等处理步骤奠定了基础。
基于C#语言编写程序可以快速处理参数文件的一些错误和未编辑项,在Visual Studio(VS)平台上设计UI界面比较灵活和简单。本次编写的这几个模块都是基于C#语言进行的,程序可操作性比较强。另外可以根据使用者需求自由添加模块,只需编写相关模块和接口即可。这对于后期复杂的数据处理来说,更容易进行二次开发。
此次研究仅仅是对MTU系列大地电磁仪器的参数文件和数据文件进行了剖析和解码。后续复杂的数据处理未能涉及,像时间序列的选取、加窗函数选择,以及时间序列的傅里叶变换等等数据预处理过程,有待下一次研究时在进行讨论。
参考文献
V5-2000大地电磁测深仪文件头数据格式研究
[J].
The data format of MT sounding instrument V5-2000
[J].
基于MATLAB平台对V5-2000大地电磁测深仪TBL文件的分析与应用
[J].
The analysis and application of V5-2000 MT sounder TBL file based on the MATLAB platform
[J].
基于Python对MTU和V8系列大地电磁测深仪TBL数据研究与应用
[J].
Research and application for raw data of MTU and V8 series magneto telluric instruments based on Python
[J].
基于C#语言河流模拟数据处理软件的开发与应用
[J].
Development application of river simulation data processing software based on C# Language
[J].
基于C#的雷达侦察设备测向精度试验数据处理软件设计与实现
[J].
Design and implementation of data processing software for direction-finding accuracy test of Radar reconnaissance equipment based on C#
[J].
使用C#语言进行多线程程序设计
[J].
Multithreaded programming by using C#
[J].
C#语言中数组与字符串存储、使用方式异同的比较
[J].
Comparison of similarities and differences between array and string in C# language
[J].
一种改进的二进制哈希编码方法
[J].
DOI:10.3969/j.issn.0372-2112.2019.02.029
[本文引用: 1]
为了应对手工视觉特征与哈希编码过程不能最佳地兼容以及现有哈希方法无法区分图像语义信息的问题,提出一种基于深度卷积神经网络学习二进制哈希编码的方法.该方法基本思想是在深度残差网络中增加一个哈希层,同时学习图像特征和哈希函数;以此同时提出一种更加紧凑的分级哈希结构,用来提取更加接近图像语义的特征.经MNIST、CIFAR-10、NUS-WIDE数据集的实验,结果表明该方法优于现有的哈希方法.该方法不仅统一了特征学习和哈希编码的过程,同时深层残差网络也能得到更接近图像语义的特征,进而提高了检索准确度.
An improved binary Hash coding method
[J].
二进制准循环码的加法傅里叶变换编码算法
[J].
Additive Fourier transform encoding algorithm for binary quasi-cyclic codes
[J].
基于GeoProbe地球物理平台的软件等值线追踪算法研究与软件开发
[J].
Research on the contour tracking algorithm and the corresponding software development on Geoprobe geophysical platform
[J].
GNSS原始数据解码为RINEX标准数据格式及数据质量分析
[J].
Raw data of GNSS Decoded to standard RINEX format data and analysis of data quality
[J].
二进制数据流通用翻译框架及实现
[J].为了辅助xDSL Modem开发人员做好固件程序的测试工作,提出了一个通用的二进制数据流翻译方案。它能够根据某个协议标准将Modem产生的二进制数据流转换成人们容易理解的形式,从而帮助开发人员快速判定Modem中的固件程序是否符合那个协议标准。同时,为了保证翻译程序不受协议版本变动的影响,将协议标准的内容以协议规则的形式存于外部文件。不同于现有的描述方式,提出了一个灵活且完备的协议规则描述方式,指出了协议规则应具备的10个属性。最后,实现了一个原型系统,并以国际通信联盟标准事业部的G.994.1协议标准为例验证了该翻译方案的有效性。
General framework and its implementation for translating binary data flow
[J].To facilitate testing of firmware of xDSL Modem for developers, a generalized translation approach of binary data flow is proposed. This approach can translate binary data flow generated by Modem into easy understanding format according to some protocol standard, so that the developers can quickly determine whether or not that firmware complies with these standards. Meanwhile, for assuring that translation program is not influenced by the version changes of protocol standard, the content of protocol standard is stored at an external file in protocol rule format. Distinguishing with the existing method, a flexible and completed description method of protocol rules is designed. Finally, a prototype is implemented and G.994.1 protocol standard is used as an example to validate the effectiveness of the approach.
基于C#的GPS数据处理工具箱开发
[J].
Development of GPS data processing toolbox based on C#
[J].
NET API(C#)的钻孔柱状图绘制软件开发
[J].
Development of drawing software of borehole histogram based on NET API(C#)
[J].
基于同步大地电磁时间序列依赖关系的噪声处理
[J].
Removal of magnetotelluric noise based on synchronous time series relationship
[J].
大地电磁测深资料的噪声干扰
[J].
Noise interference of magnetotelluric data
[J].
CSAMT与AMT数据“拼接”处理——以湖南仁里铌钽矿床7号剖面为例
[J].
CSAMT and AMT data"splicing"processing:A case study of No.7 profile of the Renli niobium tantalum deposit in Hunan Province
[J].
大地电磁测深方法数据处理进展
[J].
Advances in magneto telluric data processing
[J].
常用编码方式及其格式转换
[J].
Common coding methods and format conversion
[J].
/
〈 |
|
〉 |
