Newer
Older
DevPhaseLib / CasicDevPhase.h
TAN YUE on 22 Apr 2022 3 KB 20220422 初始提交
#ifndef CASICDEVPHASE_H
#define CASICDEVPHASE_H

#include <QList>
#include <QVector>
#include <math.h>
#include "PhaseProtocolBM.h"
#include "PhaseDataDto.h"

namespace casic {
    namespace birmm {
        namespace tflab {
            class CasicDevPhase
            {
            public:
                CasicDevPhase();

                /**
                 * @brief frameParse 解析协议字节数组并计算稳定度
                 * @param rawBytes  入参 从设备取到的原始二进制字节
                 * @param frameSN 出参 帧计数
                 * @param channelValue 出参 各通道补偿后的时差数据
                 * @param channelExtra 出参 各通道的扩展输出数据 目前仅包括1秒稳定度
                 * @return int 返回是否成功 0=成功 -1=帧解析失败 -2=稳定度结果无效
                 */
                int frameParse(QByteArray rawBytes, qulonglong** frameSN, QList<double>* channelValue, QList<double>* channelExtra);

                /**
                 * @brief setChannelDelay 设置各通道时延补偿绝对值
                 * @param channelDelay 入参 各通道的时延补偿绝对值
                 * @return int 返回是否设置成功 0=成功 -1=失败
                 */
                int setChannelDelay(QList<double> channelDelay);

                /**
                 * @brief getChannelDelay 获取各通道时延补偿绝对值
                 * @return QList<double> 当前使用的各通道时延补偿值
                 */
                QList<double> getChannelDelay();

            private:
                /**
                 * @brief channelDelay 各通道的时延补偿值
                 */
                QList<double> channelDelay;

                /**
                 * @brief frameId 需要返回的帧编号
                 */
                qulonglong frameId;

                /**
                 * @brief frameCount 总共的帧计数
                 */
                qulonglong frameCount;

                /**
                 * @brief phaseVector 各个通道的时差数据 只保留最近的五组数据
                 * 用于计算稳定度
                 */
                QVector<QVector<double>> phaseVector;

                /**
                 * @brief lastSigmaVector 计算Allen方差时的上一个平方和
                 */
                QList<double> lastSigmaVector;

                /**
                 * @brief allan 计算指定数组的阿伦方差值
                 * @param channelData 指定数组
                 * @param d 采样间隔 默认值=1
                 * @param aN 数组长度
                 * @param lastSigma 上一个平方和 需要取到并保存以用于下次计算
                 * @return 返回值 开方后的值
                 */
                double calcAllen(int index, int aN);
            };

            enum RETURN_STATUS {
                SUCCESS = 0,
                FAIL = -1,
                INVALID = -2
            };
        }
    }
}


#endif // CASICDEVPHASE_H