gpt4 book ai didi

将 32 位转换为浮点值

转载 作者:IT王子 更新时间:2023-10-29 01:10:20 28 4
gpt4 key购买 nike

我正在研究 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com