参考了Segd2.1标准文档的加上自己理解和测试后得出的,如有错误欢迎大家指摘:
segd 2.1 标准包括主要包括以下几项:
先上图:
1. General Header Block1 32字节,主要负责标记地震数据编号,格式,记录时间, 设置参数总数(Segd Channel Set)和扩展项长度( Extended Header,External Header)
2. General Header Block2 32字节,主要定义版本号,记录时长等
3. General Header Block3 32字节,主要标记对应的线号桩号
4. Segd Channel Set 定义长度为 8*32 (8 以上个类型的参数),地震数据设置的参数,比如采样率,记录每一道时长,检波器参数,该参数在当前文件存在多少道
5. Segd Extended Header 扩展的的针对性的描述,扩展的辅助道,或者道数类型等
6. Segd External Header 一些自定义的震源位置,TB时间等
再上图:
7. 地震数据 (Segd2 Seis Trace Harder) 主要包括上述描述的Segd Channel Set的地震数据,数据的编码格式8058
7.1 Segd Trace Headers 负责记录Segd Channel Set的类型,扫描或者检测类型,当前道的序列号,切割时间的偏移量等
7.2 Extension Headers1 负责记录当前道震源的位置,当前道的样点数
7.3 Extension Headers2 负责记录当前道的TB的GPS时间,补偿时间等
7.4 Extension Headers3 负责记录当前道震源接收的位置
7.5 Extension Headers4 可以自定义震源位置
7.6 Extension Headers5 可以自定义
7.7 Extension Headers6 可以自定义
7.8 Extension Headers7 可以自定义
7.9 地震数据 每一个采样为4*8 bit 浮点数,具体大小参考当前道的样点数
第 1 - 6 项主要包括定义当前的SEGD的数据概况:
SSegdGeneralHeaderBlock1 ;
SSegdGeneralHeaderBlock2 ;
SSegdGeneralHeaderBlock3 ;
SSegdChannelSet ;
SSegdExtendedHeader ;
SSegdExternalHeader ;
第 7 项主要详细描述地震数据的每一道的概况和值:
每一道包括道头(7.1 - 7.8)和数据(7.9)
SSegdTraceHeaders ;
SExtensionHeaders1 ;
SExtensionHeaders2 ;
SExtensionHeaders3 ;
SExtensionHeaders4 ;
SExtensionHeaders5 ;
SExtensionHeaders6 ;
SExtensionHeaders7 ;
以下详细定义下C++枚举方便大家理解,其他的就只要赋值即可:
typedef struct SSegdGeneralHeaderBlock1
{
unsigned char iFileNumber[2] = { 0x00, 0x00 }; // 0-1 文件号 最大9999 当超过9999时置为FFFF
unsigned char iFormatCode[2] = { (unsigned char)0x80, (unsigned char)0x58 }; // 2-3 非必要,暂时固定值(数据的编码格式为8058)
unsigned char iGeneralConstants[6] = {0}; // 4-9 非必要,暂时固定值,未使用
unsigned char iYear = 0x20; // 10 年的后两位,比如2020年,这里填0x20
unsigned char iNumAddBocksAndDays[2] = { 0x20, 0x00 }; // 11=1/2 up 非必要,暂时固定值0x20
// 11-12 (11=1/2 down) 儒略日,一年的第几天
unsigned char iHour = 0x00; // 13
unsigned char iMinute = 0x00; // 14
unsigne