Я работаю над процессором 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
, а затем преобразовать его в число с плавающей запятой.