Forum: Mikrocontroller und Digitale Elektronik FFT Leerlauf Problem


von amle (Gast)


Lesenswert?

i Leute
Ich hab ein echtes Problem mit dem FFT auf DUE und MEGA unf hoffe auf 
Eure Hilfe, Danke.

Library:
// V 1.5.6 okt 2020
// https://github.com/kosme/arduinoFFT
// https://www.arduinolibraries.info/libraries/arduino-fft
#define  FFT_Samples (64)
1
von FFT.Windowing(FFT_WIN_TYP_HAMMING, FFT_FORWARD)
2
-> Berechnung scheint zu stimmen
3
00.02, 00.02, 00.02, 00.02, 00.03, 00.03, 00.04, 00.05, 
4
00.06, 00.07, 00.08, 00.09, 00.10, 00.11, 00.12, 00.14, 
5
00.15, 00.16, 00.17, 00.19, 00.20, 00.21, 00.22, 00.23, 
6
00.23, 00.25, 00.26, 00.26, 00.27, 00.27, 00.27, 00.26, 
7
00.27, 00.27, 00.27, 00.27, 00.26, 00.26, 00.25, 00.24, 
8
00.23, 00.21, 00.21, 00.20, 00.19, 00.17, 00.16, 00.14, 
9
00.14, 00.12, 00.11, 00.10, 00.09, 00.08, 00.07, 00.06, 
10
00.05, 00.04, 00.03, 00.03, 00.02, 00.02, 00.02, 00.02 
11
12
von FFT.Compute(FFT_FORWARD); (misst Misst, 9.5 und -4.13
13
-> Daten sind von Leerlauf Input, eine Störung am Eingabe  
14
-> sehe ich nicht und kann auch keine Messen
15
09.50, -4.-13, 00.04, 00.01, 00.01, 00.00, 00.00, 00.02, 
16
00.-2, 00.00, 00.00, 00.-1, 00.00, 00.00, 00.-1, 00.01, 
17
00.00, 00.00, 00.00, 00.-2, 00.01, 00.00, 00.00, 00.00, 
18
00.00, 00.00, 00.00, 00.-2, 00.00, 00.00, 00.00, 00.00, 
19
00.01, 00.00, 00.00, 00.00, 00.00, 00.-2, 00.00, 00.00, 
20
00.00, 00.00, 00.00, 00.00, 00.01, 00.-2, 00.00, 00.00, 
21
00.00, 00.01, 00.-1, 00.00, 00.00, 00.-1, 00.00, 00.00, 
22
00.-2, 00.02, 00.00, 00.00, 00.01, 00.01, 00.04, -4.-13

Ich frage mich woher der Peak am Anfang und am Ende der Daten kommt?
Habe den FFT Code angeschaut aber konnte nichts finden.

Kann mir da jemand auf die Sprünge helfen?

von amle (Gast)


Lesenswert?

Hier noch die Eingangs Daten von Analog Eingang
1
von Analog Eingelesen und bereits Dividiert
2
00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 
3
00.28, 00.28, 00.27, 00.28, 00.27, 00.27, 00.27, 00.28, 
4
00.28, 00.28, 00.28, 00.28, 00.27, 00.28, 00.28, 00.28, 
5
00.28, 00.27, 00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 
6
00.28, 00.28, 00.27, 00.28, 00.28, 00.27, 00.28, 00.28, 
7
00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 00.28, 
8
00.28, 00.27, 00.28, 00.27, 00.27, 00.27, 00.28, 00.28, 
9
00.28, 00.28, 00.28, 00.28, 00.28, 00.27, 00.28, 00.28

von Sven B. (scummos)


Lesenswert?

Das sind die DC-Kanaele, da dein Input nicht DC-frei ist (Mittelwert ist 
0.28), ist da Energie drin ...

Schau dir nochmal an, was das Ergebnis ueberhaupt bedeutet.

von Wolfgang (Gast)


Lesenswert?

amle schrieb:
> Ich frage mich woher der Peak am Anfang und am Ende der Daten kommt?

Das ist der gleiche, bis auf den DC-Wert. Den DC-Wert gibt es natürlich 
nur einmal. Und der Rest liegt an der fehlenden Fensterfunktion.

von Amle (Gast)


Lesenswert?

Hallöchen
Ja danke, ich hab es auch gerade bemerkt, der Pegel des OpAmp ist nicht 
in der Mitte. Warum auch immer muss ich noch analysieren.

Besten Dank, mein Tag ist gerettet.
Hab mal das Offset Softwaremässig Korrigiert, funktioniert nun 
einwandfrei.

von c-hater (Gast)


Lesenswert?

Amle schrieb:

> Hab mal das Offset Softwaremässig Korrigiert, funktioniert nun
> einwandfrei.

Nicht wirklich. Du hast nämlich nicht verstanden, dass das fehlende 
Fenster nicht nur DC betrifft, sondern alle Frequenzen. Die Wirkung ist 
nur bei DC-Pegel != 0 und Absenz anderer Frequenzen am einfachsten zu 
bemerken.

Der Hintergrund ist, dass ohne Fenster immer ein "Sprung" am Beginn und 
am Ende der Messung in's Signal eingefügt wird. Es sei denn, die zu 
messende Frequenz ist ein ganzzahliges Vielfaches der FFT-Frequenz und 
die FFT ist damit in der Phase auf den Nulldurchgang synchronisiert. Da 
man mit einer FFT typisch aber mehrere bis ganz viele Frequenzen 
gleichzeitig misst, ist das in der Praxis ausser in gewissen 
Spezialfällen kaum erreichbar.

Es ist also ein sehr übliches Problem, weswegen es eben diese Vielfalt 
von Fensterfunktionen gibt und eine FFT-Anwendung ohne jede 
Fensterfunktion ist fast nie sinnvoll. Sinnvoller ist, sich darüber 
Gedanken zu machen, welche Fensterfunktion für die eigene Anwendung die 
geeignetste wäre.

von Joe L. (joelisa)


Lesenswert?

Wieviel (und welche) Werte schmiesst noch gleich eine FFT über 64 
samples raus?

Beitrag #6665402 wurde von einem Moderator gelöscht.
von c-hater (Gast)


Lesenswert?

Joe L. schrieb:
> Wieviel (und welche) Werte schmiesst noch gleich eine FFT über 64
> samples raus?

128 oder 64. Je nachdem, wofür man sich im Detail interessiert.

Aber was spielt das für eine Rolle in Bezug auf das eigentliche Problem 
des TO?

Jetzt mal sehr optimistisch angenommen, dass du es überhaupt verstanden 
hast...

von Joe L. (joelisa)


Lesenswert?

c-hater schrieb:

> 128 oder 64. Je nachdem, wofür man sich im Detail interessiert.

Da hab ich ja gleich jemand erwischt, der sich wirklich mit der Thematik 
auskennt. Und sicher kannst mir auch fix erlären kann, wieso FFT[1] 
identisch ist mit FFT[63]. Und ebenso FFT[2] mit FFT[62], FFT[3] mit 
FFT[61], usw.

Wofür interessiert 'man' sich denn, will sagen, was wird in den Daten 
des TO eigentlich dargestellt?

Zusatzfrage: Wie kommen denn die 128 FFT-Werte zustande, sprich (um beim 
Beispiel zu bleiben): Welche Info steckt in diesem Fall in der weiteren 
64 FFT-Werten?

> Aber was spielt das für eine Rolle in Bezug auf das eigentliche Problem
> des TO?

Vielleicht hat der TO ja das gleiche Verständnisproblem wie ich?

> Jetzt mal sehr optimistisch angenommen, dass du es überhaupt verstanden
> hast...

Wahrscheinlich nicht so richtig - deshalb frag ich ja ...

von 0 Max 123 (Gast)


Lesenswert?

Hallo, die FFT rechnet so als wäre das eine periodische Funktion. Daher 
musst du Antennensignal Nullen anhängen z.b. eine 256. FFT benutzen und 
64 Punkte für die Messwerte bereithalten und die restlichen Punkte mit 0 
ergänzen man nennt dieses Verfahren auch zero-padding. Auf diese Art 
wird der Sprung am Ende des Spektrums verkleinert

von Axel R. (axlr)


Lesenswert?

Im Eröffnungsbeitrag:

amle schrieb:
> von FFT.Windowing(FFT_WIN_TYP_HAMMING, FFT_FORWARD)
> -> Berechnung scheint zu stimmen
> 00.02, 00.02, 00.02, 00.02, 00.03, 00.03, 00.04, 00.05,
> 00.06, 00.07, 00.08, 00.09, 00.10, 00.11, 00.12, 00.14,
> 00.15, 00.16, 00.17, 00.19, 00.20, 00.21, 00.22, 00.23,

da wird doch "gefenstert", oder nich?

von M. K. (sylaina)


Lesenswert?

Joe L. schrieb:
> Da hab ich ja gleich jemand erwischt, der sich wirklich mit der Thematik
> auskennt. Und sicher kannst mir auch fix erlären kann, wieso FFT[1]
> identisch ist mit FFT[63]. Und ebenso FFT[2] mit FFT[62], FFT[3] mit
> FFT[61], usw.

Weil die FFT (generell jede Fourier-Transformation) immer symetrisch 
ist. Warum das so ist lässt sich schwer in einem Thread erklären, im 
Studium nimmt dieses Thema nicht grundlos min. ein Semester ein. Eine 
Fourier-Transformation geht auch immer von einem periodischen Signal 
aus, das ist u.a. die Randbedingung dafür. Man kann sie auch auf nicht 
periodische Signale anwenden aber die FT geht dann immer davon aus, dass 
das, was die FT vom Signal sieht, vom Anbeginn der Zeit bis in alle 
Ewigkeit sich immer genau so wiederholt.

Hier mal ein Video von TI, in welchem u.a. der von die beobachtete 
Effekt beschrieben wird bei der FFT.

https://www.youtube.com/watch?v=dCeHOf4cJE0

von Wilhelm M. (wimalopaan)


Lesenswert?

M. K. schrieb:
> Weil die FFT (generell jede Fourier-Transformation) immer symetrisch
> ist.

Das ist falsch.
Nur wenn die Eingangsfolge reel ist, ist der Realteil der FFT gerade und 
der Imaginärteil ungerade.

von Justin S. (Gast)


Lesenswert?

M. K. schrieb:
> Weil die FFT (generell jede Fourier-Transformation) immer symetrisch
> ist.

Das ist leider nicht richtig.

M. K. schrieb:
> im Studium nimmt dieses Thema nicht grundlos min. ein Semester ein

... und selbst das war wohl etwas zu wenig.

Der wahre Grund ist, dass die Fourier-Transformation jedes reellwertigen 
Signals symmetrisch ist. Für Signale, deren Imaginärteil nicht 0 ist, 
gilt das eben nicht.

PS.: War ich wohl zu langsam mit der Antwort.

von Joe L. (joelisa)


Lesenswert?

Ihr bringt die Sache schon weiter, wobei ich immer noch davon ausgehe, 
dass der TO (ebenso wie ich) die FFT-Ergebnisse nicht richtig zu 
interpretieren weiss.

Hier scheint ja noch nicht mal Einigkeit darüber zu herrschen, wie viele 
Werte eine FFT-64 rausschmeisst und wie diese Werte zu interpretieren 
sind.

von Wilhelm M. (wimalopaan)


Lesenswert?

Joe L. schrieb:
> Hier scheint ja noch nicht mal Einigkeit darüber zu herrschen, wie viele
> Werte eine FFT-64 rausschmeisst und wie diese Werte zu interpretieren
> sind.

Nun, dann mal aufgedröselt:

Eine FFT bildet 64 Eingangswerte auf 64 Ausgangswerte ab. Es wird aber 
komplex gerechnet. Daher sind es (s.a. Bibliothek oben) 128 double Werte 
auf 128 double Werte. Wenn die Eingangsfolge reel ist, ist der 
Imaginärteil der Eingangswerte also überall null. Man hat also nur 64 
signifikante Werte in der Eingangsfolge. Die Reelwertigkeit der 
Eingangfolge hat zur Konsequenz, dass die Ausgangsfolge einen gerade 
Realteil und einen ungeraden Imaginärteil hat. Also auch hier sind nur 
64 Werte signifikant.

Kleine Übung: nimm Papier und Bleistift und zeige, dass die o.g. 
Symmetrie wahr ist.

von M. K. (sylaina)


Lesenswert?

Justin S. schrieb:
> ... und selbst das war wohl etwas zu wenig.

Sowas kannst du gern stecken lassen. Das muss nicht sein.

Wilhelm M. schrieb:
> Das ist falsch.
> Nur wenn die Eingangsfolge reel ist, ist der Realteil der FFT gerade und
> der Imaginärteil ungerade.

Das hatte ich in der Tat nicht mehr auf dem Schirm. Danke für die 
Korrektur.

von Joe L. (joelisa)


Lesenswert?

Wilhelm M. schrieb:

Danke Wilhelm - wirklich gut erklärt!

> Eine FFT bildet 64 Eingangswerte auf 64 Ausgangswerte ab. Es wird aber
> komplex gerechnet. Daher sind es (s.a. Bibliothek oben) 128 double Werte
> auf 128 double Werte.

Offensichtlich will der TO die Frequenzanalyse eines gemessenen Signals 
durchführen. Technisch betrachtet krätscht da der Herr Nyquist rein und 
meint, bei fft[32] sei Schluss - weil was drüber kommt ist technisch 
nicht auswertbar da Alias. Wenn's dumm läuft hat der TO sein 
Eingangssignal noch nicht mal bandbegrenzt, und dann darf er genau 
genommen noch nicht mal sampeln.

Z.B. 
https://www.professorkuttner.de/wp-content/uploads/2014/08/150616-Kuttner-PWSMT-12-4-3-FFT-Parameter.pdf 
beschreibt das recht gut.

Mein Tip an den TO:
- DC hast ja schon erkannt.
- Alles über fft[32] ist Mist, braucht nicht weiter ausgewertet werden.
- Befass dich mal mit dem Linienbastand (sozus. der 
Frequenzselektivität)
  deiner FFT.

Kuck dir auch mal die Doku eines FFT-Analyzers an (z.B. 
http://cdn.teledynelecroy.com/files/manuals/93xxc_appendix_c.pdf) wegen 
weiteren Fallstricken/Tips.

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.