LinuxシステムでCを使用してBFSK周波数ホッピングメカニズムを実装するためにDSPプロセッサに取り組んでいます。プログラムのレシーバー部分で、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;
これで、配列の値は、小数点以下0output
の配列の値になります。outData
例:output[i]=12345
`outData [i] =12345.0000'の場合。
しかし、プログラムをテストしている間、私はfloatの配列を使用してビットのサンプルテストデータを生成しています
float data[] ={123.12456,45.789,297.0956};
したがって、復調後、float配列はarrayoutput
と同じ値になると予想していますdata
。32ビットのデータをfloatに変換する他の方法はありますか?受信したビットをchar
配列に格納してから、floatに変換する必要があります。