C++生成加拿大凤凰(Phoenix)TSn文件格式

boost 的函数式编程库 Phoenix入门学习 这篇文章是我学习boost phoenix的总结。 序言 Phoenix是一个C++的函数式编程(function programming)库。Phoenix的函数式编程是构建在函数对象上的。因此,了解Phoenix,必须先从它的基础函数对象上做起。 Phoenix能够提供令人惊艳的编码效果。我先撂一个出来,看看用Phoenix能写出什么样的代码: std::for_e 阅读详情

最近给 地球物理勘探行业 (大地电磁方法)做了个文件格式转换工具。

将自有的明码时间域文件转换成加拿大凤凰(Phoenix)V8的TSn格式。

凤凰(Phoenix)的格式,24bits存放一组ADC采样码。这个和我们平时32/64bits存储由差异。主要是考虑到仪器原有的adc芯片的精度与存储效率问题。

无码无真相,首先是写header:

/* 写Phoenix记录头 */
void TSnWork::writeHeader()
{
    fwrite(&goHeadPhoenix.uiSec,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiMin,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiHour,1, 1,pFile);
    fwrite(&goHeadPhoenix.uiDay,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiMonth,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiYear,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiDayOfWeek,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiCentury,1, 1, pFile);

    fwrite(&goHeadPhoenix.uiDevSN,2, 1, pFile);
    fwrite(&goHeadPhoenix.uiSampleCntPerRecordPerCh,2, 1, pFile);
    fwrite(&goHeadPhoenix.uiChCntPerScan,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiRecoedHeaderLength,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiRecStatus,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiBitSaturationCode,2, 1, pFile);
    fwrite(&goHeadPhoenix.uiBitWidth,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiFS,2, 1, pFile);
    fwrite(&goHeadPhoenix.uiFSUnit,1, 1, pFile);
    fwrite(&goHeadPhoenix.uiClockStatus,1, 1, pFile);

    fwrite(&goHeadPhoenix.iClockErr,4, 1, pFile);

    fwrite(goHeadPhoenix.acReserved, 6, 1, pFile);

    QString oStrPhoenixHeader = QString("%1世纪   %2/%3/%4/ %5:%6:%7 星期%8")
            .arg(goHeadPhoenix.uiCentury)
            .arg(goHeadPhoenix.uiYear)
            .arg(goHeadPhoenix.uiMonth)
            .arg(goHeadPhoenix.uiDay)
            .arg(goHeadPhoenix.uiHour)
            .arg(goHeadPhoenix.uiMin)
            .arg(goHeadPhoenix.uiSec)
            .arg(goHeadPhoenix.uiDayOfWeek);

    emit sigMsg(MSG_Normal, "写Phoenix记录头时间: "+ oStrPhoenixHeader);
}

再是写数据(ADC采样码):

void TSnWork::writeADC(float number)
{
    unsigned char high;
    unsigned char middle;
    unsigned char low;

    unsigned char buffer[3];

    unsigned int intNumber;

    if(number >= 0)
    {
        intNumber = int(std::abs(floor(number)));
    }
    else
    {
        intNumber = ~int(std::abs(floor(number))) + 1;
    }

    high   = intNumber/65536;
    middle = (intNumber%65536)/256;
    low    = intNumber%256;

    buffer[0] = low;
    buffer[1] = middle;
    buffer[2] = high;

    fwrite(buffer, BIT_WIDTH, 1, pFile);
}

MT  的TS5 和  AMT的 TS4   连续采样简单,直接写就ok。

MT 间隔采样 TS3, TS4

AMT 间隔采样 TS2, TS3

相对来说要skip,同时要把header 里面的utc秒给skip对齐。

以下是AMT TS3 的流程代码:

/* 间隔采样, 第一个片段丢弃,第二个片段留着指定的 L3NS record个数 */
void TSnWork::writeAMT_TS3(quint32 uiHSMP, quint32 uiL3NS)
{
        /* 区别对待自有设备连续采集和间隔采集 */
    if(goHeaderWFEM.uiSlicBase == goHeaderWFEM.uiSliceSample)
    {
        uiSlicCnt = goHeaderWFEM.uiDataCnt/uiHSMP/goHeaderWFEM.uiFS/2;
        uiSkipSecs = 2*uiHSMP - uiL3NS ;
        uiAddSecs =  2*uiHSMP - uiL3NS;
    }
    else
    {
        uiSlicCnt = goHeaderWFEM.uiDataCnt/goHeaderWFEM.uiSliceSample/goHeaderWFEM.uiFS/2;
        uiSkipSecs = 2*goHeaderWFEM.uiSliceSample - uiL3NS;
        uiAddSecs =  2*goHeaderWFEM.uiSlicBase - uiL3NS ;
    }

    for(quint64 i = 0; i < uiSlicCnt; i++)
    {
        for(quint32 j = 0; j < uiL3NS; j++)
        {
            this->writeHeader();

            this->writeScan( goHeaderWFEM.uiFS );

            this->updateHeadPhoenix( 1 );

            emit sigMsg(MSG_Normal, QString("AMT TS3 间隔采样,\u058E记录:%1/%2\u058E片段:%3/%4 \n")
                        .arg(j+1)
                        .arg(uiL3NS)
                        .arg(i+1)
                        .arg(uiSlicCnt));
        }
        this->skipRows( goHeaderWFEM.uiFS*uiSkipSecs );
        this->updateHeadPhoenix( uiAddSecs );
    }

    fclose(pFile);

    emit sigMsg(MSG_Over, "AMT TS3 间隔采样写入完毕!");
}

 

 

Phoenix中不得不吐槽的两大特征 Phoenix是什么?看看官网就知道了,我就不细说了。关于它的优点,官网也是列了一大堆,我也不复述了。 下面只谈谈截止Phoenix4.2.1,我认为存在以下两大缺点: 1. 完全丧失了HBase的多版本特征 HBases至少也是三维结构(row、cf:cq、timestamp)的数据模型,Phoenix将其映射为二维的关系模型后,便面对着损失信息精度的尴尬场面。这种尴尬具体表现 阅读详情

相关推荐

【BOOST C++ 12 函数式编程】(1)Boost.Phoenix库

在函数式编程模型中,函数是对象,与其他对象一样,可以作为参数传递给函数或存储在容器中。本节介绍支持函数式编程模型的 Boost 库。

gongdiwudu的专栏 5212

推荐 Phoenix: 轻量级、高性能的 C++ Web 框架

推荐 Phoenix: 轻量级、高性能的 C++ Web 框架 一、简介 如果你正在寻找一个轻量级、高效的 C++ Web 开发框架,那么 Phoenix 可能是你的理想选择。Phoenix 是一款基于 Wt 库构建的现代 C++ Web 框架,它提供了一种简洁、易于使用的编程模型,让你能够快速地开发出高性能的 Web 应用程序。 二、功能特性 1. 基于事件驱动的编程模型 Phoenix 的核心...

gitblog_00044的博客 681

boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序

boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序实现功能C++实现代码 实现功能 boost::spirit模块使用 phoenix 进行实际表达式评估的语法和语义操作的测试程序 C++实现代码 #define BOOST_SPIRIT_NO_PREDEFINED_TERMINALS #include <boost/config/warning_disable.hpp> #include <boost/spirit/include/qi.hp

希望我的博客,能帮上你解决学习中工作中所遇到的问题 653

【嵌入式开发】256

它的主要作用是将连续的模拟信号转换为离散的数字信号,以便于数字处理器(如微控制器、DSP等)能够读取和处理这些信号。在嵌入式系统中,ADC扮演着桥梁的角色,连接着真实世界的模拟信号和数字世界的数据处理。:环境中的电磁噪声可能会干扰ADC的读数,导致结果不准确。在选择ADC时,应关注其规格书中的这些参数,并在必要时进行校准。为了减小这种误差,可以选择更高分辨率的ADC,或者在软件中使用过采样和平均技术来提高有效位数。为此,可以使用低噪声、低纹波的电源,并在ADC的电源引脚附近放置去耦电容以滤除高频噪声。

宅男很神经 1241

音频大地电磁法原理及数据处理.pdf

#资源达人分享计划#

基于Python 对MTU 和V8 系列大地电磁测深仪TBL 数据研究与应用.pdf

基于Python 对MTU 和V8 系列大地电磁测深仪TBL 数据研究与应用.pdf

MSTAR数据转换成图片

本文研究了将MSTAR格式的数据转换成所需图像格式(如JPG、PNG等)的方法,并给出了相应的MATLAB代码。

thu_ldq的博客 6895

大数据审计常用的算法模型

数据预处理:用聚类算法(K-Means)对数据分组,缩小分析范围;异常初筛:用孤立森林/DBSCAN快速标记疑似异常样本;风险分级:用随机森林/XGBoost对疑似异常打分,确定核查优先级;关联深挖:用FP-Growth挖掘异常样本背后的人员/流程关联;文本佐证:用BERT分析相关合同/审批文本,获取舞弊证据。例如,某审计项目通过“K-Means分组→孤立森林标异常→FP-Growth找关联→BERT审合同”的流程,仅用1周就完成了过去3个月需10人团队的工作量,且挖出2起隐藏的串标舞弊案。

Yulay专栏 1066

MSTAR 数据转格式

MSTAR是陆地目标的雷达图像数据集,但给出的文件是二进制格式的文件,在下载数据集是说明中给了一个地址可以下载到转换工具(https://www.sdms.afrl.af.mil,需翻墙),我用的不是很明白。 README中对MSTAR数据格式说明如下: F...

zseqsc_asd的博客 3231

手把手教你用Python实现最简单的语义通信(Sem Comm)Demo

本文通过Python和PyTorch,手把手教你构建一个基于深度学习的语义通信(Semantic Communication)Demo。该Demo使用自编码器架构,从MNIST图像中提取低维语义特征进行传输与重建,实现了从“传输比特”到“传递含义”的跨越,并探讨了其效率优势与鲁棒性。

weixin_29080843的博客 245

手把手教你用TiggerRamDisk绕过iPhone/iPad激活锁(支持iOS16.3,Win/Mac双平台保姆级教程)

本文详细介绍了如何使用TiggerRamDisk工具绕过iPhone/iPad的激活锁,支持iOS16.3系统,并提供Windows和Mac双平台的保姆级教程。从工具准备、设备连接到核心解锁流程,一步步指导用户完成操作,帮助二手设备或旧设备重获新生。

weixin_29323493的博客 899

phoenix 源码分析v0.01

第一节 参考 https://blog.youkuaiyun.com/gaoshui87/article/details/52180414 问题: 1.phoenix生成scan,最后发给server执行的代码没找到 2.local index的执行过程 3.phoenix得server端协处理器如何处理的 4.ConnectionImplementation.locateRegionInMeta()...

研究源码的最底层,只持有正确的仓位 1427

6 赫斯曼网管软件industrial hivision用户管理

文章目录前言一、打开Industrial HiVision服务器二、在用户管理界面添加策略三、使用可选策略四、接受策略总结 前言 安装 Industrial HiVision 后,所有人都能广泛使用程序。安全起见,请进行相 关配置,对访问权限进行限制。 本文主要介绍用户管理基于某种角色模型。在访问角色中定义角色名称,通过分配访问权限给这些角色分配角色功能。例如,给管理人员自然要分配可用的权限,而观察员尽管可以登录,但没有能够进行更改的权限。Industrial HiVision 提供以下访问角色: 

t98746194的博客 1378

Phoenix综述(史上最全Phoenix中文文档)

个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于Phoenix的资料寥寥无几,中文资料更是几乎没有。本人详细阅读Phoenix官网,整理成此篇中文文档,供后人参考。如有翻译错误的地方,请批评指出。 1. Phoenix定义 Phoenix最早是sal...

weixin_33690367的博客 5171

清理异常值(MAD:绝对中位差)

清理异常数据: 中位数绝对偏差(MAD):用来描述单变量样本在定量数据中可变的一种标准 在统计学中,绝对中位差是刻画一元数据样本变化的一个鲁棒度量。由公式可以看出,其求解还算简单,给定一个数据样本集,首先求其中位数,然后求原始数据减去中位数的绝对值从而形成一个新的数据样本,再求新的数据样本的中位数即为绝对中位差。比如说有一个数据样本集X={2 3 8 7 9 6 4},这时候数据的中位数是6,原...

spider_man 1万+

国产麒麟系统中的PaddleOCR离线绿色部署:高效安全的文字识别新纪元

摘要:本文详细介绍了PaddleOCR在银河麒麟V10SP1系统上的离线部署方案。通过Conda虚拟环境隔离依赖,采用离线包安装方式实现无网络部署,支持80+语言识别。重点讲解了模型量化剪枝优化、多线程处理等性能调优技巧,并提供了完整的OCR识别代码示例。该方案具有数据本地化处理的安全优势,适用于医疗票据数字化等对隐私要求严格的场景,同时解决了模型加载失败、内存不足等常见问题。

墨夶的博客 1227

开始C++之路

开启C++之路 记录遇到的个问题及解决方法

phoenix_wang001的博客 319

STM32版CCD线性摄像头寻线寻迹小车_stm32接ccd

目前大多数的小车寻线寻迹都是用红外对管寻线,这是比较简单也比较成熟的技术方案,且成本也低。本文将介绍使用CCD线性摄像头寻线寻迹。TSL1401 线性传感器由一个 1x128 的光电二极管阵列、相关的电荷放大电路以及一个内部像素数据保功能组成。内部像素数据保功能可以为所有像素点提供同时积分的开始和停止时间。该阵列由 128 个像素组成,每个像素的感光面积为 3,524.3 平方微米。像素之间的间隔为 8μm。内部控制逻辑简化了操作,该模块需要串行输入(SI)信号和时钟信号(CLK)。

2401_87557129的博客 3228

Phoenix 快速入门

一、Phoenix 介绍: Phoenix 操作hbase有两种方式,创建表,创建视图。 区别如下: 创建表的话,就可以对HBase进行插入,查询,删除操作。 视图的话,一般就只可以进行查询操作。 虽然看起来,表的功能,比视图更强大一些。但是就像是mysql等关系型数据库 一样,删除表操作,会将表删掉。但是删除视图操作,却不会影响原始表的结构。 因为使用phoenix 创建...

Stay Focused And Work Hard !!! 5794

【Flink】FlinkCDC获取mysql数据时间类型差8小时时区解决方案

​ 1、背景: 在我们使用FlinkCDC采集mysql数据的时候,日期类型是我们很常见的类型,但是FlinkCDC读取出来会和数据库的日期时间不一致,情况如下 FlinkCDC获取的数据中create_time字段1694597238000转换为时间戳2023-09-13 17:27:18,而数据库中原始数据如下,并没有到下午5点,这就导致了FlinkCDC读出来的时间和数据库中实际的时间不一致的情况,与数据库对比可以发现,这里的时间戳与数据库时间刚好相差了 8 个小时,在实际生产中这种情况是不

一杯咖啡半杯糖的博客 3854

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

phoenix-plugin项目开源

摘要:phoenix-plugin是笔者自己封装的一个类似mybtis的orm框架,专门用来操作phoenix(一个基于hbase的数据库),项目地址:https://github.com/appleappleapple/phoenix-plugin  下面来看看使用说明:phoenix-plugin使用说明一、概述Phoenix-Plugin 是一个使用jdbc封装了操作Hbase的工具类.可以

Evankaka的专栏 4617

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Phoenix 介绍和基本用法

Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。 Download:http://phoenix.apache...

Cswe_N 7万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++文件操作函数详解

C++通过以下几个类支持文件的输入输出 (1)      ofstream:写操作,输出文件类; (2)      ifstream:读操作,输入文件类; (3)      fstream:可同时读写的文件类。 1.     open函数:打开文件 函数原型:void open(const char*filename,int mode,int access);       参数说明:

Phoenix_FuliMa 2万+

phoenix 使用说明

phoenix 使用说明 2018-06-14~2018-06-19 Apache Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问。Apache Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端。数据表的元数据存储在HBase的表中被会标记版本号,所以进行查询的时...

恒 4885

[Phoenix基本命令]--phoenix命令汇总

phoenix-4.7.0命令汇总!all Execute the specified SQL against all the current connections !autocommit Set autocommit mode on or off !batch Start or execute a batch of sta...

欢迎来到我的博客,一起探索代码里的世界! 5291

使用Phoenix连接HBASE,squirrel使用,代码连接使用Phoenix

1 使用Phoenix连接HBASE 1.1 什么是Phoenix? phoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。Phoenix是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建...

涂作权的博客 7229
上一篇: Qwt人机交互界面剔非点工具
下一篇: C++生成 桔灯 Aether仪器的 *.atts 格式 时间域文件
QQ_278397935
博客等级 码龄18年 120粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值