将 32 位转换为浮点值

标签 c linux embedded

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

相关文章:

linux - 如何在我的 Linux shell 脚本中遍历此 FIND 命令的结果?

linux - 如何在多台主机上同时运行远程脚本

linux - mmc写命令数据源从哪里来?

c - Controller 之间的传输结构

创建 argv[] 以将参数发送到另一个函数

c - 不允许用户输入重复的值

linux - 通过单个命令行操作确定操作系统

c - QueryFullProcessImageName 因有效 HINSTANCE 失败?

c - C 语言编程。数据验证和将字符转换为整数

linux - Beaglebone am335x 通过 mmap、设置和清除引脚访问 GPIO