Преобразование 32-битного значения в число с плавающей запятой

Я работаю над процессором DSP для реализации механизма скачкообразной перестройки частоты BFSK с использованием C в системе Linux. В принимающей части программы я получаю набор выборок, которые я де -модулирую, используя алгоритм Герцеля, чтобы определить, был ли полученный бит 0 или 1.

Прямо сейчас я могу обнаружить биты по отдельности. Но я должен вернуть данные для обработки в виде массива с плавающей запятой. Итак, мне нужно упаковать каждый полученный набор из 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с нулями после запятой. пример :если output[i]=12345то `outData[i]=12345.0000'.

Но при тестировании программы я генерирую образцы тестовых данных битов, используя массив чисел с плавающей запятой.float data[] ={123.12456,45.789,297.0956};

Итак, после демодуляции я ожидаю, что массив с плавающей запятой outputбудет иметь те же значения, что и массив data. Есть ли другой способ преобразовать 32 -бит данных в число с плавающей запятой. Должен ли я сохранить полученные биты в массив char, а затем преобразовать его в число с плавающей запятой.

5
задан Matteo 23 July 2012 в 11:41
поделиться