Forum: Digitale Signalverarbeitung / DSP / Machine Learning dsPIC FFT


von Lars H. (larsherzfeld)


Lesenswert?

Hallo,

hat jetzt schon mal jemand eine FFT in einem dsPIC realisiert? Komme mit 
der Microchip Beschreibung nicht ganz klar und für mich ist es das erste 
Mal, dass ich sowas programmieren muss und nicht nur rechnen.

Folgende Ausgangslage:

Ich nutze einen dsPIC30F4012
Ich wandel zwei AD-Kanäle (SIN & COS Signal) und speichere die Daten ab.
Die gespeicherten Daten brauche ich für die FFT um daraus die Frequenz 
zu bestimmen. Letztlich soll daraus eine Geschwindigkeit ermittelt 
werden mittels Dpplerverschiebung.

Habe die Daten bisher separat gespeichert für jeden Kanal einzeln.

Nun meine Frage(n):
Wie speicher ich die Daten am Besten ab?
Wie programmiere ich am Besten die FFT für den dsPIC? Das Microchip 
Besipiel hilft mir im Moment wenig, da ich noch nicht so wirklich 
verstanden habe, was die da machen. Bei einem Verweis auf eine 
ordentlich Erklärung bin ich auch dankbar.

FFT habe ich noch nicht weiter programiert, deswegen stelle ich auch 
keinen Progcode rein. Wie ich die AD-Wandlung mache ist ja wohl eher 
uninteressant.

Vielen Dank

Gruß Lars

von Holger (Gast)


Lesenswert?

>hat jetzt schon mal jemand eine FFT in einem dsPIC realisiert?
ja. Z.B. microchip

>Komme mit
>der Microchip Beschreibung nicht ganz klar

mit welcher Microchip Beschreibung?

>und für mich ist es das erste
>Mal, dass ich sowas programmieren muss und nicht nur rechnen.

sowas musst du nicht programmieren, nur benutzen.

>Nun meine Frage(n):
>Wie speicher ich die Daten am Besten ab?

Wie in der Microchip Beschreibung angegeben

>Wie programmiere ich am Besten die FFT für den dsPIC? Das Microchip
>Besipiel hilft mir im Moment wenig, da ich noch nicht so wirklich
>verstanden habe, was die da machen.

welches Microchip Besipiel? Du musst nicht verstehen, was die da machen, 
solange du die Routine richtig aufrufst

>Bei einem Verweis auf eine ordentlich Erklärung bin ich auch dankbar.

Wenn du fft.s in der Microchip DSP library nicht ordentlich erklärt 
findest, wird es schwer seinm, dich zufriedenzustellen.

von Lars H. (larsherzfeld)


Lesenswert?

@ Holger

einfach mal den Senf dazu gegeben ohne weiterzuhelfen. Aber gut.
Microchip Beispiel, was die in Ihren Examples angeben.

>welches Microchip Besipiel? Du musst nicht verstehen, was die da machen,
>solange du die Routine richtig aufrufst

Dazu kann ich nur sagen, dass ich zu der Sorte Leute gehöre, die gerne 
verstehen, was sie da tun bzw. der Chip. Das bewahrt mich über kurz oder 
lang auch davor, Fehler zu machen, wo ich dann nicht verstehe wieso die 
auftreten.

@ all

Für weitere Hilfe bin ich nach wie vor dankbar.


Gruß Lars

von Matthias (Gast)


Lesenswert?

Hallo Lars,
ich muss sagen, deine Art nach Informationen zu fragen ohne uns die 
Möglichkeit zu geben, auf irgendetwas Bezug zu nehmen, könnte man am 
ehesten als Trollposting ignorieren. Ich gehe aber mal davon aus, daß du 
es ernst meinst.

Dann mußt du, wie Holger schon sagte, einen Link angeben, von welchen 
Beschreibungen und Beispielen du redest. Zum Thema Verstehen von 
angewendeten Programmroutinen schlage ich vor, daß du dich erstmal 
überzeugst, den FFT-Algorithmus und die Butterflyoperation verstanden zu 
haben. Wenn du vor diesem Hintergrund immer noch behauptest, die 
Microchip-Implementierung nicht zu verstehen, und auch angibst, WO die 
Schwierigkeiten liegen, kann man dir eventuell helfen.

Nicht vergessen: auch mal an die eigene Nase fassen.

Matthias

von Karsten S. (Gast)


Lesenswert?

>Ich wandel zwei AD-Kanäle (SIN & COS Signal) und speichere die Daten ab.

Ich verstehe nicht, was du mit SIN & COS Signal meinst. Zur 
Dopplermessung misst du doch einfach ein Signal, das vielleicht 
sinusförmig ist, aber eine unbekannte Phase aufweist. Oder meintest du, 
dass du die beiden Signale zu Testzwecken einspeist? Zu Testzwecken 
solltest du eher diese Funktionen programmtechnisch an die FFT 
übergeben, solange du mit der Prozedur noch nicht richtig umgehen 
kannst. Das schliesst andere Fehlerquellen aus.

>Die gespeicherten Daten brauche ich für die FFT um daraus die Frequenz
>zu bestimmen. Letztlich soll daraus eine Geschwindigkeit ermittelt
>werden mittels Dpplerverschiebung.

Dafür ist eine FFT gänzlich ungeeignet, da sie nur diskrete Frequenzen 
auflöst. Angenommen du rechnest eine 1024-Punkte-FFT, dann hast du eine 
Auflösung von ca. 2km/h bei Schallsignalen oder 600000 km/s bei 
Licht/Radar.

Gruss,
Karsten

von Lars H. (larsherzfeld)


Lesenswert?

@ Matthias

Hallo,

ich fasse mir immer mal wieder an die eigene Nase. Aber ich bin nach wie 
vor der Meinung, dass Holger sich diese Art der Antworet auch sparen 
kann. Ich hatte kein Beispiel angeführt, weil ich dachte, dass es 
hinlänglich bekannt ist. War ein Fehler von mir sehe ich ein. Da hätte 
er aber genauso nach fragen können, wie du es getan hast. Er gibt mir 
hingegen zur Antwort, dass Microchip schonmal ne FFT mit nem dsPIC 
realsiert hat. Das war mir auch klar. Weiterhin kam er mit so schlauen 
Sprüchen, wie ich muss es nicht verstehen nur benutzen. Um es zu 
benutzen sollte ich es aber vielleicht verstanden haben. Aber jetzt 
genug dazu. Im Anhang befindet sich das Beispielprogramm von Microchip 
für MPLAB und C30.

@ Karsten

Danke für die Antwort. Hier ein paar Erklärungen.

Ich habe von einer HF-Karte zwei Ausgangssignale (SIN & COS sind sie 
bezeichnet), welche um 90° Phasenverschoben sind. Normalerweise nimmt 
man das eine Signal zur Bestimmung der Dopplerverschiebung und aus dem 
anderen lässt sich die Bewegungsrichtung bestimmen. Die brauche ich aber 
im Moment nicht, mich interessiert nur der Betrag. Mit MATLAB habe ich 
festgestellt, wenn ich beide Signale zuerst addiere und dann die FFT 
durchführe ist der Frequenzpeak deutlicher zu erkennen. Letztlich würde 
mir aber auch die FFT für ein Signal reichen.

Bei den Signalen handelt es sich um Reflektionssignale von Gasblasen in 
einem Medium (hier erstmal  Luft in Wasser). Die Sendefrequenz liegt bei 
4MHz. Ich erwarte Geschwindigkeiten um ca. 25cm/s.

In MATLAB habe ich mittels derer FFT-Routine die erwartete Frequenz 
bekommen und die daraus resultierende Geschwindigkeit. Nur kann ich 
meine Daten im Moment nicht auf die FFT-Routine von Microchip umsetzen, 
weil ich damit im Moment nicht klar komme. Vielleicht sieht es nach dem 
WE aber anders aus.

Was sind Twiddlefaktoren? Habe ich noch nie gehört. Der Begriff ins 
Deutsche übersetzt heißt fummeln, aber was? Muss ich die Daten erst 
drehen, wie Microchip das irgendwo schreibt oder wie?

Letztlich will ich eine FFT mit nur 32 bzw. 64 Werten durchführen.

Ich hoffe ich konnte meine Frage jetzt etwas präzisieren.

@ Holger

Entschuldige meine erste etwas patzige Antwort, aber ich habe deine 
Kommentare wohl etwas zu sehr in den falschen Hals gekriegt, weil ich 
mich inzwischen auch schon 2,5 Tage mit dieser FFT rumärgere.

Gruß Lars

von Holger (Gast)


Lesenswert?

>Entschuldige meine erste etwas patzige Antwort, aber ich habe deine
>Kommentare wohl etwas zu sehr in den falschen Hals gekriegt, weil ich
>mich inzwischen auch schon 2,5 Tage mit dieser FFT rumärgere.

Matthias hat doch bereits festgestellt, dass dein Problem in erster 
Linie beim FFT-Algorithmus liegt und nicht am dspic, für den du noch 
immer kein konkretes Beispiel geschickt hast. 2,5 Tage sind auf deinem 
Level ein bisschen wenig, poste doch in 2,5 Monaten nochmal.

>Er gibt mir hingegen zur Antwort, dass Microchip schonmal ne FFT mit nem >dsPIC 
realsiert hat.
Ja und? Hast du was gegen Microchip und möchtest lieber Code von jemand 
anderem haben?

> Das war mir auch klar.
Das war mir nicht klar, dass dir das klar war. Entschuldige vielmals! 
Allerdings bezweifle ich, dass bei dir irgendwas klar ist.

von Christian (Gast)


Lesenswert?

Also irgendwie scheint mir das Holger sich die Post irgendwie garnicht 
richtig durchliest.

@ Holger ?? Bist Du mit dem falschen Fuß aufgestanden???

Lars wollte, soweit ich den Post verstanden habe, nur ein Beispiel für 
die Verwendung der FFT haben. Das Beispiel in der Doku habe ich auch 
nicht verstanden. Hab grad noch mal reingeschaut. Das Thema würde mich 
auch interessieren, da ich wahrscheinlich in der nächsten ZEit auch so 
ein ähnliches Problem lösen muss.

Bis dann und viele Grüße

Christian

von Matthias (Gast)


Lesenswert?

>Was sind Twiddlefaktoren? Habe ich noch nie gehört. Der Begriff ins
>Deutsche übersetzt heißt fummeln, aber was? Muss ich die Daten erst
>drehen, wie Microchip das irgendwo schreibt oder wie?

Dir ist echt nicht zu helfen. Zum mitmeißeln: FFT ist ein Algorithmus 
zur schnellen Berechnung von Fourierreihen. Vielleicht hast du dich 2,5 
Tage mit der Fouriertransformation beschäftigt, hast aber definitiv noch 
keine Erklärung zur FFT gelesen, sonst würdest du nicht solche Fragen 
stellen. RTFM, denn in der Beschreibung von Microchip und dessen 
Referenzen ist das gut verständlich erklärt, jedenfalls wenn wir die 
gleiche meinen. Aber das wird dein Geheimnis bleiben.

Ich bin für einen IQ-Test als Aufnahmeprüfung für dieses Forum.

Matthias

von Gast (Gast)


Lesenswert?

@Lars
wie wärs mit Nulldurchgänge N im Zeitintervall T zählen und daraus die 
Frequnenz berechnen? Braucht zwar auch etwas Mathematik, aber f=N/T ist 
nicht so anspruchsvoll wie eine FFT und noch dazu genauer, wenn du ein 
sauberes Signal hast.

von Lars (Gast)


Lesenswert?

@ all

sehe das als erledigt an.

Mit dem IQ-Test könntest du schlechte Karten habe, da meiner mit 
Sicherheit nicht unterdurschnittlich ist, was mehrfach getestet wurde.

Warum das Beispiel vorhin nicht hochgeladen wurde weiß ich nicht ist mir 
aber inzwischen auch egal.
Und in den Erklärungen, die ich zur FFT habe steht auch nichts von 
Twiddlefaktoren (Stöcker, Bronstein), aber bei einer Erklärung dazu 
schick sie mir doch, dann kämen wir vielleicht mal auf den gleichen 
Level und ich kann irgendwann auch behaupten als Profi geboren zu sein 
wie Matthias und Holger.

So das war für mich das Wort zum Wochenende. Danke.

Lars

von Matthias (Gast)


Lesenswert?

>So das war für mich das Wort zum Wochenende. Danke.

Wenn du der gleiche Lars wie larsherzfeld bist, fehlt dir jegliche 
Umgangsform. Genau wie mir, wenn ich so angepflaumt werde, versteht 
sich. Aber will ich was von dir? Und mit dir auf den gleichen Level will 
ich schon gar nicht.

von Gerhard (Gast)


Lesenswert?

Hallo Lars

die FFT eines diskreten Signals ist in einigen Büchern recht gut 
beschrieben. Es gibt auch welche mit Beispielprogrammen, wo der Aufbau 
eines solchen FFT-Programms erklärt wird. In deutsch kenn ich nur ein 
Buch:
- Vorlesungen zum Informatik und Ingenieurstudium Bd 9, Fourier und 
Lapalce-Transformation von  Hans-Jürgen Hotopp ua, ISBN 3-89639-080-5. 
Diese Buch ist vergleichsweise günstig: ca 18 Euro

- DFT/FFT and Convolution.. von Burrus und Parks, Wiley Verlag. Diese 
Buch ist in Englisch, aber wirklich gut, leider eine Antiquität und so 
eigentlich nur in Uni-Bibliotheken oder bei www.abebooks.de zu bekommen.
(ca 60 Euro)

In beiden Büchern, besonders in letzterem wird der Aufbau und die 
Begriffe erklärt.

Gerhard

von Lars (Gast)


Lesenswert?

Hallo Matthias,
ja die Umgangsformen fehlen dann irgendwo allen ein wenig, erst recht 
wenn es so relativ anonym zugeht.

Für mich war das Problem, dass ich eine Frage gestellt habe und irgendwo 
von zwei Leuten mehr oder weniger dumm gemacht wurde. Auf fehlende Teile 
zum Helfen hätte man mich ja auch freundlich Hinweisen können. Ich habe 
leider wenig Erfahrung mit dem Programmieren von Mikrocontrollern und 
weiß somit auch nicht, was andere benötigen um zu helfen. Dann kommen 
noch andere Einflüsse dazu und der Frust entlädt sich halt.

Ich will/wollte was von euch ist auch klar. Ich denke Gerhards Post 
hilft mir auch weiter. Mehr wollte ich ja gar nicht ausser eine 
Empfehlung, wo ich etwas gut nachlesen kann, weil meine Bücher mir nicht 
geholfen haben oder aber wenn jemand hat von demjenigen eine Erklärung. 
Beispielcode und sowas ist zwar schön hilft einem aber meiner Meinung 
nach wenig beim Verständnis.

@ Gerhard

Danke für die Buchtipps, ich werde mal schauen, ob ich die Bücher 
bekomme.


Gruß Lars

von Lars (Gast)


Lesenswert?

Nachtrag

@ Gast

Ist leider kein sauberes Signal, auch wenn sich das mit der Bezeichnung 
SIN & COS so anhört. Daher gestaltet sich das Zählen der Nulldurchgänge 
als sehr problematisch bis gar nicht machbar. Trotzdem danke für den 
Hinweis.

Lars

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.