一. 概述
Sdf文件包括两部分:文件头header和文件数据data,其中此版本定义Towfish Type为5000,Header version为4,pageVersion value为5001 二. 详细文件格式定义
1. Header
typedef struct
{
//U32 VerifyCode; //每个page开头的校验码,值为FFFF FFFF H
U32 numberBytes; 教师教育研究50572 //该页所包含的字节数(不包括八个F校验码)
U32 pageVersion; 英菲尼迪万人盛典5001 //所用的版本号
//U32 configuration;
U32 pingNumber; 12126 //在整个航行中页的序号
U32 numSamples; 2276 //在每个通道的数据个数
//U32 beamsToDisplay; //未用8byte
//U32 errorFlags;
U32 range; 75 //扫描宽度
U32 speedFish; 165 //拖鱼速度
//U32 speedSound; /////////////////////////
//U32 resMode; //
//U32 txWaveform; //
//U32 respDiv; //
//U32 respFreq; //未使用为32byte
//U32 manualSpeedSwitch; //
//U32 despeckleSwitch; //
//U32 speedFilterSwitch; ///////////////////////////
U32 year; 2009
U32 month; 2
U32 day; 24
U32 hour; 1
U32 minute; 27
U32 second; 48
U32 hSecond; 93 //单位为0.01s
//U32 fixTimeHour; //未使用为12byte
//U32 fixTimeMinute;
//float fixTimeSecond;
float heading; 66.7 //航向
//float pitch; //未使用为4byte
float roll; -0.1 //横滚 roll from compass
float depth; 0.612 //深度
float altitude; 8.0072 //高度
float temperature; 0//温度
float speed; 1.65246 //速度
//float shipHeading;
//float magneticVariation; //地磁变化
double shipLat; 0.540461 //船维度
double shipLon; 1.95593 //船经度
double fishLat; 0 //声纳维度
double fishLon; 0 //声纳经度
/* Added at version 3 */
原教旨主义
//U32 tvgPage; //未用信息
U32 headerSize; 512 //文件头包含字节数
//U32 fixTimeYear; ////未用信息328byte
//U32 fixTimeMonth
//U32 fixTimeDay;
// float auxPitch;
//float auxRoll;
//float auxDepth;
//float auxAlt;
// float cableOut;
//float fseconds;
//U32 altimeter;
//U32 sampleFreq;
//U32 depressorType;
//U32 cableType;
// F32 shieveXoff;
//F32 shieveYoff;
//F32 shieveZoff; 中国地下音乐
//F32 GPSheight;
//U32 rawDataConfig;
/* Added at version 4*/
//U32 header3ExtensionSize;
//U32 sbpTxWaveform;
//U32 sbpPreAmpGain;
//U32 sbpDataRaw;
//U32 sbpNumSamples;
//U32 sbpSampleFreq;
//U32 sbpTxWaveformVersion;
//float wingAngle;
//U32 emergencySwitchState;
//U32 laybackMethod;
//double laybackFishLat;
//double laybackFishLon;
//float fishHeadingOffset;
//float pressureSensorOffset;
//U32 reserved3[48];
}SYS5000HEADER ;
其中typedef unsigned long U32;
typedef unsigned short U16;
2. Data Format
数据段的完整定义可以参考SDF Data Page Definitions Specification 中的定义,本文是从实现有用数据的读取介绍的,只做出如下定义 2011山西中考英语U16 *chan1Data;
U16 *chan2Data;
U16 *chan3Data;
U16 *chan4Data;
U16 *chan5Data;
U16 *chan6Data;
U16 *chan7Data;
U16 *chan8Data;
U16 *chan9Data;
U16 *chan10Data;
文献中定义如下
unsigned short chan1Data[];
unsigned short chan2Data[];
unsigned short chan3Data[];
unsigned short chan4Data[];
unsigned short chan5Data[];
unsigned short chan6Data[];
unsigned short chan7Data[];
unsigned short chan8Data[];
unsigned short chan9Data[];
unsigned short chan10Data[];
…. ….
每一通道数据定义为前2byte为该通道数据的个数,紧接着的为数据,其中每2byte代表一个数据
三. 转换Bmp图片实现
1.基本思路
从sdf文件中读取数据填充到bmp文件中,即可实现图片转换
2.详细说明
(1)利用检验码信息来确定每个page的开始位置,即用fopen打开sdf文件后,每次用fread读取4byte判断其值是否为ffff ffffh,若是则到一个page的开头,文件指针指向当前page,否则继续读取
(2)到每个page开头后,按照文件头的定义,用fread读取每个参量的值,未用部分读取相应的byte,使文件指针向文件尾移动
(3)读取完每个page的文件头之后,再来读取每个通道的数据,总共有10通道
1.通道数据填充到bmp的排列方式如下表:
chan1Data[n-1]…chan1Data[0] | chan6Data[0]…chan6Data[n-1] |
chan2Data[n-1]…chan2Data[0] | chan7Data[0]…chan7Data[n-1] |
chan3Data[n-1]…chan3Data[0] | chan8Data[0]…chan8Data[n-1] |
声呐 chan4Data[n-1]…chan4Data[0] | chan9Data[0]…chan9Data[n-1] |
chan5Data[n-1]…chan5Data[0] | chan10Data[0]…chan10Data[n-1] |
| |
2.page重叠部分的处理:
每个天线的间距为0.2m,重叠部分处理要利用的数据有当前page的速度speed1,时间t1和上一个page的速度speed2,时间t2,则重叠的行数为
N=5-{(t1-t2)*(speed1+speed2)/2}/0.2
将当前的page中重叠部分与上一个page重叠部分取平均值作为新的数据填充到bmp数据中(取sdf数据低8位作为bmp的数据)