Konvertiert eine 32-bit-float-Wert

Arbeite ich an einem DSP-Prozessor zum implementieren einer BFSK-Frequenz-hopping-Mechanismus mit C auf einem Linux-system. Auf der Empfänger-Teil des Programms, erhalte ich eine input von einer Reihe von samples, die ich de-modulieren, mit Goertzel-Algorithmus, um zu bestimmen, ob das empfangene bit war eine 0 oder 1.

Gerade jetzt, ich bin in der Lage zu erkennen, die bits einzeln. Aber ich muss die Daten zurück, die für die Verarbeitung in form eines float-Arrays. So, ich pack jeden Satz von 32 bits empfangen, um die form eines float-Wert. Rechts bin ich etwas wie :

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;

Nun, die Werte der output array sind nur die Werte von outData array mit 0EN nach dem Komma.
Beispiel: wenn output[i]=12345 die `outData[i]=12345.0000'.

Aber beim testen das Programm, das ich bin die Generierung der Testdaten von bits mit einem array von float
float data[] ={123.12456,45.789,297.0956};

Also nach der demodulation ich nehme an, dass die float-array output haben eine gleichen Werte wie data array.
Gibt es eine andere Methode zum konvertieren von 32-bit-Daten in einen float. Sollte ich Speichere die empfangene bits zu einem char - array konvertieren und dann Sie zu schweben.

  • Methode sollte korrekt sein - bit ist bit, nomatter, wie Sie es verwenden. Überprüfen Sie die tatsächlichen bits vor und nach der transformation, es sollte etwas sein, das auf diesem Teil.
  • Ich habe abgestimmt, die bits, dass ich in der Sender-Teil und dem demodulierten Sequenz von bits. Sie sind passend miteinander. Daher meine Zweifel mit der Konvertierung in das float-array.
  • Es völlig egal, welchen Typ das array haben (gut, technisch so lange wie es ist ein unsigned integer-Typen). Welche Art von CPU ist es? (Fragen über Rechte shift - big endinan?). Welche Art von 'falschen' Werte sind, die Sie bekommen? Was auch immer das problem, ich glaube nicht, dass es in den code oben gepostet - könnte man kompakter Beispiel arbeiten, das Ihrem problem?
  • Die Ausgabe im float-form, bin ich immer output={17142.000000,16951.000000,17300.000000}, die die gleiche wie die unsigned int array outData={17142,16951,17300}. Aber die Ausgabe, die ich erwarte ist data[] ={123.12456,45.789,297.0956} als die bit-Sequenz, die ich als input in das Programm für die Tests generiert sich aus data[] array, und die bit-Sequenz, die ich nach dem basuc de-modulation Schritt ist der gleiche wie der test-Sequenz.
  • Wenn Sie versuchen, um den gleichen numerischen Wert (oder schließen) für float-und int -, Sie werden müssen sehr verschiedene bit-Muster-look-up-der IEEE-Norm 754. Wenn Sie möchten, dass 32 bit Genauigkeit, benötigen Sie Doppel -, nicht-Schwimmer.
  • Agh... So bekommen Sie diese hin-und Herbewegungen von int bits, mit den gleichen Werten wie int war? Was die Hölle der hardware ist das? Was ist float bit-layout auf dieser hardware? Was die erste float-layout und wie Sie ihn verarbeiten? Wenn Sie sicher über Ihre Transformationen (was auch immer es ist - ich habe keine Ideen), warum nicht einfach Umdeuten ersten Schwimmer an uint32, dann zurück zu schwimmen? Und ja, ich bin mir nicht mehr sicher, wir reden über die gleichen Dinge...
  • Sie müssen klären, Ihre Frage. Sie haben erwähnt outData[i]=12345.0000 im text aber outData ist ein unit32_t (oder wäre, aber für die Tippfehler im code!).

InformationsquelleAutor anshu | 2012-07-23
Schreibe einen Kommentar