卫星数据处理错误

时间:2016-10-09 03:34:18

标签: time hex double word satellite

新的卫星数据处理中心刚刚完成,可以使用从轨道卫星发送的实时数据进行初步测试。由于屏幕上显示的是第一条消息,您发现许多数据值远远超出范围     例如,在终端屏幕上定义为“增量时间”并且它似乎超出预期范围[0.01到10,000.00秒],但显示的值(作为双倍)是 [ - 4.12318024e- 028秒] 。在对基于字节的原始数据流进行进一步调查之后,您会发现原始数据是从卫星发送的,用于此双字的 [0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA] 。在其中一个旧终端上,此数据正确显示并且在预期范围内。

a. [5]  What caused this problem?
b. [5]  If this is the real problem, what should the actual value be?

1 个答案:

答案 0 :(得分:0)

啊,失败模式分析。非常重要!

好吧,其他终端正确显示数据 - >终端和数据之间存在不兼容性。

大端,小恩吉安也许?我期待“旧”终端是小端,因为它可能已用C编码。现在你可以解释数据。

这是一些代码

#include  <stdio.h>

union myW {
    double x;
    // Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]
    unsigned char d[8] = {0x83, 0xC0,0xCA, 0xA1, 0x55, 0x66, 0xBA, 0x40};   
};

union myBad {
    double x;
    // Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]
    unsigned char d[8] = {0xC0, 0x83,0xA1, 0xCA, 0x66, 0x55, 0x40, 0xBA};   
};


int  main(void)
{
    myW value;
    value.x = 1.0;  // check how reasonable number looks like

    printf("Something reasonable: \n");
    for(int i = 0; i < 8; i++)
    {
        printf("%u ", value.d[i]);
    }   

    myW received;
    printf("\nWhat shouldve been displayed:\n");
    for(int i = 0; i < 8; i++)
    {
        printf("%u ", received.d[i]);
    }
    printf("\n%f\n", received.x);

    myBad bad;
    printf("\nBad output as:\n");
    for(int i = 0; i < 8; i++)
    {
        printf("%u ", bad.d[i]);
    }
    printf("\n%0.30f\n", bad.x);
 }

输出:

Something reasonable: 
0 0 0 0 0 0 240 63 
What shouldve been displayed::
131 192 202 161 85 102 186 64 
6758.334500

Bad output as:
192 131 161 202 102 85 64 186 
-0.000000000000000000000000000412

使用g ++编译