美文网首页
传感器值信息的压缩表达

传感器值信息的压缩表达

作者: qianlihu | 来源:发表于2017-11-09 17:54 被阅读59次

    上文提到传感器值信息和描述信息的分离。值信息和描述的分离,有利于代码结构化,也可以节约传输带宽。

    这里记录一种传感器值信息的压缩表达方法,但不建议在项目中使用。主要是现在无论是处理器(单片机)还是传输线路,性能都提升很多,并不对节省的这几个字节敏感。

    一般来讲,传感器采集的数据,得到的信息都是展现給人来看的。让我们来看几组温度数据。
    1、2、3、4 温度数据分辨率为1,采集间隔内,数据变化间值为1.
    100、200、300、400,501 温度数据分辨率为1,采集间隔内,数据变化间值为100,501会被我们约等为500。
    2、4、8、17温度数据分辨率为1,采集间隔内,数据指数变化,8后面的预期数据为16,即便测量值为17,我们在口头描述中也多会约等为16。

    因为数据只是用来人为观察,这种约等完全是合理的,也并没有破坏其中的统计规律。

    由上,我们可以看到我们对数据总是有一个识别分辨率的。而这个分辨率一个字节表述就足够了。

    1、2、3、4
    1×100、2×100、3×100、4×100 100为基础数据,有效数据只传输1,2,3,4即可。
    pow(2,1)、pow(2,2)、pow(2,3)、pow(2,4) 2的指数为基础数据,有效数据只传输1,2,3,4即可

    比如下面公式:
    result = (double) (((m * val) + (b * pow(10, k1))) * pow(10, k2))

    其中val为有效数据,m,b,k1,k2都为基础数据,这个函数曲线通过调节参数总能找到一个适应当前数据的渐进线。~,如果找不到这条渐进线,还可以将结果:

    case SDR_SENSOR_L_LN:
                      result = log(result);
                      break;
              case SDR_SENSOR_L_LOG10:
                      result = log10(result);
                      break;
              case SDR_SENSOR_L_LOG2:
                      result = (double) (log(result) / log(2.0));
                      break;
              case SDR_SENSOR_L_E:
                      result = exp(result);
                      break;
              case SDR_SENSOR_L_EXP10:
                      result = pow(10.0, result);
                      break;
              case SDR_SENSOR_L_EXP2:
                      result = pow(2.0, result);
                      break;
              case SDR_SENSOR_L_1_X:
                      result = pow(result, -1.0);     /*1/x w/o exception */
                      break;
              case SDR_SENSOR_L_SQR:
                      result = pow(result, 2.0);
                      break;
              case SDR_SENSOR_L_CUBE:
                      result = pow(result, 3.0);
                      break;
              case SDR_SENSOR_L_SQRT:
                      result = sqrt(result);
                      break;
              case SDR_SENSOR_L_CUBERT:
                      result = cbrt(result);
                      break;
    
    

    这样我们便做好了传感器值信息的压缩。

    这套数据压缩方案来自于IPMI协议

    相关文章

      网友评论

          本文标题:传感器值信息的压缩表达

          本文链接:https://www.haomeiwen.com/subject/polmmxtx.html