Aether大地电磁系统
Aether 是全新一代高速低速同时采集的大地电磁系统,通过 GPS 进行同步授时定位, 所有通道完全同步采集,连续时间序列存储。也可以用于任何传统电磁法 MT、 ATM、 CSAMT、 TEM、SIP、TDIP 等任何电法、电磁法数据的采集,及其地球物理新方法创新,电磁环境监 测等方面。
Aether是全新一代高频低频同时采集的电磁系统。它通过GPS进行同步授时定位,所有通道完全同步采集,连续时间序列存储。可以用于任何传统天然源电磁法MT、AMT,也可以用于常规有源法CSAMT、TEM、SIP、TDIP等。
通过3G/4G/5G网络,实时传输和下载时间序列数据,无需现场下载;适合用于长周期电磁和地震监测。
特点
● 连续时间序列存储
多通道数据连续记录,用以保证数据完整性,有限时间内可用数据最多,提高野外工作效率,增加抗干扰处理手段。完全区别于其它“老”仪器的间断采集方式,破坏了数据完整性,也降低了工作效率。
● 实时阻抗估计
可实时显示时间序列波形、频谱、仪器所有工作状态,并可实时处理并显示阻抗。
● 高低频同时记录
支持24bit 6通道高频(最高96kHz)和32bit 6通道低频(最高4kHz)在)同时采集和存储;同时采集单个点的高频数据和低频数据,避免不同仪器、不同时间采集数据拼接的问题。
● 电磁通道通用
Aether系列支持任意电磁法的传感器输入,包括电极、感应线圈磁探头、磁通门探头、地震速度传感器、加速度传感器等。
● GPS同步时间与坐标
精确的GPS授时,保证每个采样点都有精确的时间标签,并记录GPS位置。
自有设备采集的明码时间域文件转换成*.atts格式:
无码无真相:
#include "WriteBinary.h"
WriteBinary::WriteBinary(QStringList aoStrFileName, ATTS_HEAD oHead) :
gaoStrFileName(aoStrFileName),
goHead(oHead)
{
}
void WriteBinary::run()
{
/* atts file */
FILE *pFileATTS;
QString oStrFileName = gaoStrFileName.first();
oStrFileName.chop(8);
QString oStrFileATTS = QString( oStrFileName + ".atts");
pFileATTS = fopen ( (oStrFileATTS.toLocal8Bit().data()), "wb" );
fwrite(&goHead.flag, 8, 1, pFileATTS);
fwrite(&goHead.nChan, 2, 1, pFileATTS);
fwrite(&goHead.bits, 2, 1, pFileATTS);
fwrite(&goHead.format, 4, 1, pFileATTS);
fwrite(&goHead.Fs, 8, 1, pFileATTS);
fwrite(&goHead.UnixBegin, 4, 1, pFileATTS);
fwrite(&goHead.UsBegin, 4, 1, pFileATTS);
fwrite(&goHead.UnixEnd, 4, 1, pFileATTS);
fwrite(&goHead.UsEnd, 4, 1, pFileATTS);
fwrite(&goHead.nSize, 8, 1, pFileATTS);
fwrite(&goHead.notchFreq, 8, 1, pFileATTS);
fwrite(&goHead.notchHarm, 2, 1, pFileATTS);
fwrite(&goHead.unused, 30, 1, pFileATTS);
for(int i = 0; i < 16; i++)
{
fwrite(&(goHead.Chan[i].Valid), 2, 1, pFileATTS);
fwrite(&(goHead.Chan[i].Comp), 2, 1, pFileATTS);
fwrite(&(goHead.Chan[i].Direct), 2, 1, pFileATTS);
fwrite(&(goHead.Chan[i].lens), 4, 1, pFileATTS);
fwrite(&(goHead.Chan[i].ChName), 4, 1, pFileATTS);
fwrite(&(goHead.Chan[i].SN), 16, 1, pFileATTS);
fwrite(&(goHead.Chan[i].Gain), 4, 1, pFileATTS);
fwrite(&(goHead.Chan[i].Offset), 4, 1, pFileATTS);
fwrite(&(goHead.Chan[i].Azimuth), 4, 1, pFileATTS);
fwrite(&(goHead.Chan[i].CRes), 4, 1, pFileATTS);
fwrite(&(goHead.Chan[i].iAC), 2, 1, pFileATTS);
fwrite(&(goHead.Chan[i].iDC), 2, 1, pFileATTS);
fwrite(&(goHead.Chan[i].unused), 4, 1, pFileATTS);
}
fwrite(&goHead.Stn, 4, 1, pFileATTS);
fwrite(&goHead.Lat, 8, 1, pFileATTS);
fwrite(&goHead.Long, 8, 1, pFileATTS);
fwrite(&goHead.Alt, 4, 1, pFileATTS);
fwrite(&goHead.Line, 4, 1, pFileATTS);
fwrite(&goHead.rKchanACDC, 4, 1, pFileATTS);
fwrite(&goHead.unused2, 998, 1, pFileATTS);
fwrite(&goHead.Comment, 64, 1, pFileATTS);
fwrite(&goHead.ends, 2, 1, pFileATTS);
QMap<int, QString> oMap;
oMap.clear();
foreach(QString oStrFile, gaoStrFileName)
{
qDebugV0()<<oStrFile.right(5).left(1).toInt()<<oStrFile;
/* 通道编号和文件名对应好 */
oMap.insert(oStrFile.right(5).left(1).toInt(), oStrFile);
}
//qDebugV0()<<oMap<<goHead.nSize/5<<goHead.nSize;
QByteArray baLine;
baLine.clear();
QStringList asLine;
asLine.clear();
QString sData;
sData.clear();
float fLine = 0.0;
/* Ex */
QFile oFileEx(oMap.value(1));
if(!oFileEx.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebugV5()<<"Can't open the file!"<<oFileEx.errorString()<<endl;
}
oFileEx.readLine();
/* Ey */
QFile oFileEy(oMap.value(2));
if(!oFileEy.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebugV5()<<"Can't open the file!"<<oFileEy.errorString()<<endl;
}
oFileEy.readLine();
/* Hx */
QFile oFileHx(oMap.value(4));
if(!oFileHx.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebugV5()<<"Can't open the file!"<<oFileHx.errorString()<<endl;
}
oFileHx.readLine();
/* Hy */
QFile oFileHy(oMap.value(5));
if(!oFileHy.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebugV5()<<"Can't open the file!"<<oFileHy.errorString()<<endl;
}
oFileHy.readLine();
/* Hz */
QFile oFileHz(oMap.value(6));
if(!oFileHz.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebugV5()<<"Can't open the file!"<<oFileHz.errorString()<<endl;
}
oFileHz.readLine();
for(int j = 0; j < goHead.nSize/5; j++)
{
/* Ex */
baLine.clear();
baLine = oFileEx.readLine();
QString sLineEx(baLine);
sLineEx.remove("\n");
asLine = sLineEx.split(",", QString::SkipEmptyParts);
sData = asLine.first();
fLine = sData.simplified().toFloat();
fwrite(&fLine, goHead.bits/8, 1, pFileATTS);
/* Ey */
baLine.clear();
baLine = oFileEy.readLine();
QString sLineEy(baLine);
sLineEy.remove("\n");
asLine = sLineEy.split(",", QString::SkipEmptyParts);
sData = asLine.first();
fLine = sData.simplified().toFloat();
fwrite(&fLine, goHead.bits/8, 1, pFileATTS);
/* Hx */
baLine.clear();
baLine = oFileHx.readLine();
QString sLineHx(baLine);
sLineHx.remove("\n");
asLine = sLineHx.split(",", QString::SkipEmptyParts);
sData = asLine.first();
fLine = sData.simplified().toFloat();
fwrite(&fLine, goHead.bits/8, 1, pFileATTS);
/* Hy */
baLine.clear();
baLine = oFileHy.readLine();
QString sLineHy(baLine);
sLineHy.remove("\n");
asLine = sLineHy.split(",", QString::SkipEmptyParts);
sData = asLine.first();
fLine = sData.simplified().toFloat();
fwrite(&fLine, goHead.bits/8, 1, pFileATTS);
/* Hz */
baLine.clear();
baLine = oFileHz.readLine();
QString sLineHz(baLine);
sLineHz.remove("\n");
asLine = sLineHz.split(",", QString::SkipEmptyParts);
sData = asLine.first();
fLine = sData.simplified().toFloat();
fwrite(&fLine, goHead.bits/8, 1, pFileATTS);
}
oFileEx.flush();
oFileEy.flush();
oFileHx.flush();
oFileHy.flush();
oFileHz.flush();
oFileEx.close();
oFileEy.close();
oFileHx.close();
oFileHy.close();
oFileHz.close();
fflush(pFileATTS);
fclose(pFileATTS);
emit Sig("转换完成!\n" + oStrFileATTS);
}
QFile ,Q_DISABLE_COPY。可以使用QList<QFile*> 来存放文件指针。大佬们见笑了。