我正在研究 DSP 处理器,以在 Linux 系统上使用 C 实现 BFSK 跳频机制。在程序的接收器部分,我得到一组样本的输入,我使用 Goertzel 算法对其进行解调以确定接收到的位是 0 还是 1。
现在,我能够单独检测到这些位。但是我必须以 float 组的形式返回数据进行处理。因此,我需要打包接收到的每组 32 位以形成浮点值。对,我正在做类似的事情:
uint32_t i,j,curBit,curBlk;
unint32_t *outData; //this is intiallized to address of some pre-defined location in DSP memory
float *output;
for(i=0; i<num_os_bits; i++) //Loop for number of data bits
{
//Demodulate the data and set curBit=0x0000 or 0x8000
curBlk=curBlk>>1;
curBlk=curBlk|curBit;
bitsCounter+=1;
if(i!=0 && (bitsCounter%32)==0) //32-bits processed, save the data in array
{
*(outData+j)=curBlk;
j+=1;
curBlk=0;
}
}
output=(float *)outData;
现在,output
数组的值就是outData
数组的值,小数点后补0。
示例:如果 output[i]=12345
`outData[i]=12345.0000'。
但是在测试程序时,我正在使用 float 组生成位的样本测试数据
float 数据[] ={123.12456,45.789,297.0956};
因此,在解调之后,我希望 float 组 output
具有与 data
数组相同的值。
是否有其他方法可以将 32 位数据转换为 float 。我是否应该将接收到的位存储到 char
数组,然后将其转换为 float。
最佳答案
不确定我是否明白你的意思 - 你顺序获取位,如果你有 32 位,你想从中得到一个 float ?
关于:
union conv32
{
uint32_t u32; // here_write_bits
float f32; // here_read_float
};
可以像这样在线使用:
float f = ((union conv32){.u32 = my_uint}).f32;
或者使用辅助变量:
union conv32 x = {.u32 = my_uint};
float f = x.f32;
关于将 32 位转换为浮点值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611787/