在数字信号处理领域,常常需要将基带采集的AD数据传送到PC,并进行相应的处理和数据可视化。在基带,特别是FPGA中,一般不采用浮点运算,故基带会用一个unsigned long来表示一对IQ数据,其中高16位表示I路,低16位表示Q路。基带将这样的一堆usigned long传递给上位机后,上位机需要将它们拆分位两个浮点型的数组来存储。这个拆分可以用如下的一个函数来完成:
void ULONG2float(unsigned long bbNumber, float * iNumber, float * qNumber)
{
*iNumber = (bbNumber >> 16) / (float)65536; // convert high 16 bits
*qNumber = (bbNumber & 0xffff) / (float)65536; // convert low 16 bits
}
1,pow(2, 16) = 65536
2,注意unsigned long和long的区别,表示的数据范围不同