www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP dsPIC FFT Quellcode - Verständnisproblem


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

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hoffe hier findet sich jemand, der auf die schnelle meinen 
Denkfehler erkennt. Ich arbeite mich derzeit in die FFT Funktion bei den 
dsPICs ein.

Für mich machen die folgenden Zeilen kienen Sinn:

[c]

p_real = &sigCmpx[(FFT_BLOCK_LENGTH/2)-1].real ;  /* Set up pointers

to convert real array */

p_cmpx = &sigCmpx[FFT_BLOCK_LENGTH-1] ; /* to a complex array. The input

array initially has all */
            /* the real input samples followed by a series of zeros */


for ( i = FFT_BLOCK_LENGTH; i > 0; i-- ) /* Convert the Real input 
sample array */
{          /* to a Complex input sample array  */
(*p_cmpx).real = (*p_real--);  /* We will simpy zero out the imaginary 
*/
(*p_cmpx--).imag = 0x0000;  /* part of each data sample */
}
[\c]

Es geht um folgendes: die FFT-Operation braucht Samples vom Datentyp 
fractcomplex. Das ist eine Struktur aus zwei fractional Variablen (real, 
imag). Das Eingangssignal muss wie folgt vorliegen:

real1,imag1 - real2,imag2- ,..., real256,imag256.

Es liegt aber laut Definition in inputsignal... .c so vor:

real1, real2, ... , real256, imag1,imag2 , ... , imag256.

Die obige Schleife soll diese Daten entsprechend umsortieren. Der Zeiger 
p_real zeigt aber auf die Mitte des Eingangsfeldes sigCmpx, also auf 
real[127]. Nun wird *p_real 256 (FFT_BLOCK:LENGTH) mal dekrementiert, 
aber wohin zeigt er nach der 128igsten Dekrementierung ? Der läuft doch 
über den Anfang &sinCmpx[0] hinaus ??

Die Imaginärwerte werden richtig umgesetzt (=0, da realwertige Samples).

Vielleicht stehe ich auf dem Schlach.

Im Anhnang ist das Projekt vom Microchip.
Im SRC Verzeichnis interessieren eigentlich nur die beiden Dateien 
Inputsignal... .c und main... .c.

Es wäre schön, wenn sich das schnell aufklärt.

Danke für eure Hilfe.


MfG
Thomas

: Verschoben durch Admin
Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Rege und kluge Beteiligung.

Im Microchip Quellcode wird zusammenhängender Speicher aligned 
allocated, deswegen liegen die Daten wirklich "nebeneinander".

Aus diesem Grund scheint es sicher zu funktionieren.

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.