mikrocontroller.net

Forum: PC-Programmierung unsigned char Array --> float Array


Autor: neuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe große Probleme mit dem konvertieren eines unsigned char Arrays 
in ein float Array:
float *x_to_float;
x_to_float=new float[500];
float fValue;
memcpy(x, x_uc, sizeof(float));

"x_uc" ist das unsigned char Array

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was erwartest Du? Was steht im char-Array, und was soll danach im 
float-Array stehen?

Dein Codefragment kopiert von x_uc nach x, was auch immer das sein mag. 
Weder "fValue" noch das Array "x_to_float" werden irgendwo verwendet; 
vielleicht ist auch das Dein Problem?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke du wirst nicht drumherum kommen für jedes element des Arrays 
einen Cast zu machen, damit mit einem memcpy, wie bereits gesagt, stumpf 
die Bits kopiert werden ohne zu beachten um welchen Datentyp es sich 
handelt.
Ein float besteht aus VORZEICHEN + EXPONENT + MANTISSE, ein unsigned 
char hingegen nur aus der Wertigkeit der Bits (2^7+2^6...+2^0). Die bits 
werden von jedem Datentyp unterschiedlich interpretiert, zumindest bei 
char,int,long... <=> float,double

Autor: neuer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich benötige diese Konvertierung, weil ich von einem Graubild eine FFT 
berechnen will. Dem FFT Algorithmus muss man ein Array vom Datentyp 
float übergeben. Deshalb das ganze.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deswegen kannst du trotzdem nicht einfach Characters binär in den 
Speicherbereich einer Float-Variablen kopieren und hoffen, die würden 
dabei in das interne float-Format umgewandelt. memcpy kopiert einfach 
blind Bytes von der Quelle zum Ziel.

Wenn du in einen Kochtopf pinkelst, wird doch auch nicht plötzlich Suppe 
draus...

Autor: neuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem hab ich gelöst. Das Array bildgrau ist nun vom Typ float.

Ich hab noch ein Problem mit der Anwendung des FFT Algorithmus.
//sample rate of the signal (must be 2^n)
long sample_rate=8192;

//number of samples you want to send for processing in the fft (any)
//for example 100 samples
long captured_samples=512;

//frequency of the signal (has to be smaller than sample_rate/2)
//for example 46
int frequency=100;

float data[512];

Diese Variablen "sample_rate, frequency" brauche ich doch eigentlich für 
die Bildtranformation nicht oder?

Die Berechneten Werte habe ich mal in eine Textdatei ausgegeben.
"fft.vektor[i,2]".
Vergleiche ich diese Werte mit Matlab, dann sind das ganz andere Werte.
Matlab Code: (Bildgröße: 256/256)
I=imread('bild.bmp')
g=rgb2gray(I)
f=fft(g)

Kann mir da jemand sagen was ich da falsch mache?

Autor: neuer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier der FFT C-Code.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.