#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