mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 FFT Spektrum verschoben! Wieso?


Autor: Steffan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich weiß war nun einige denken werde... doppelposting ist pfui!
Aber ich habe die befürchtung, das in dem anderen Beitrag niemand mehr 
reinschaut :(

Also zu meinem Problem:

ich habe die FFT von Elm auf meinem uC zu laufen bekommen.
Ich nutze die Version mit dem C-Modul für WinAVR.
Allerdings habe ich ein Problem, das ich mir nicht erklären kann.
Mein uC hat einen Takt von 8MHz, der Prescaler ist auf 128 eingestellt
also arbeitet der ADC mit einem 62,5kHz Takt. Ich betreibe den ADC im 
Freerun Modus. Also braucht die S&H 1,5 und die Wandlung des ADC 13 
Takte, macht zusammen 15 Takte für ein Wandlung. Daraus würde ich 
schließen, das ich eine Abtastung von 4,16kHz habe. Ich speichere 4096 
abgetastete Werte
ab. Nun nehme ich aus diesem Array nur jeden vierten Wert und führe eine
1024 Punkte FFT aus. Da ich nur jeden 4. Wert nehme, müßte es doch einer
Abtastfrequenz von 1,04kHz entsprechen d.h. die Auflösung der FFT
(Auflösung=Abtastfrequenz/Abtastwerte FFT) müßte 1,04Hz betragen.
Ich habe noch einen einfach Tiefpass 1. Ordung davor, der eine
Grenzfrequenz von 503Hz besitzt. Meine Referenzspannung des ADC beträgt
4,88V und ich habe ein Offset von 2,44V. Wenn ich kein Signal anlege
habe ich, so wie es sein soll in dem Array nur Werte zwischen 0 und -64
Wertebereich +-32768 (-64 dürfte der Quantisieurngfehler sein mit
4,88mV). Soviel zu den Daten.

Nun zu meinem Problem: wenn ich ein 100Hz Sinus einspeise, wird mir im
Spektrum bei 85 die höchste Amplitude angezeigt. Wie kann das sein? 
Außerdem habe ich noch neben Spektren. In anbetracht der Auflösung müßte 
das Spektrum doch bei 104 liegen oder nicht?

Hat jemand ne Idee? Bin über jede Hilfe glücklich!

MFG

Steffan

Autor: Steffan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, hat sich erledigt!

Sind gar nicht 15 Takte des ADC sondern nur 13.
Dann ändert sich natürlich auch die Auflösung und es past alles.

Autor: M. Weissi (blomquist)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, kannst du vielleicht mal mehr von deinem Projekt posten oder so? 
Danke

Autor: Axel R. (axelr) Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe noch einen einfach Tiefpass 1. Ordung davor, der eine
>Grenzfrequenz von 503Hz besitzt.

Sind das TATSÄCHLICH 503 Hz?


Interessiert mich auch, das Projekt...

Gruß
Axelr.

Autor: mandrake (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Spektrum enthält auf Grund deines Fensters (ist wahrscheinlich ein 
Rechteck bei dir, denn du transformierst ja nur einen Signalausschnitt) 
noch Spektralanteile des Fensters. Bei einem Rechteck (du schneidest 
einfach einen Zeitbereich aus deinem Signal heraus und machst damit eine 
FFT) bekommst du praktisch für jeden Frequenz-Pin eine skalierte 
sin(x)/x Funktion. Diese addieren sich auf und du bekommst Nebenmaxima.
Mit einer speziellen Fensterfunktion (Hann, Hamming...) kannst du diese 
Effekte minimieren und deinen Bedürfnissen anpassen.

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem, das mandrake beschreibt nennt sich spectral leakage. Wenn 
in deinem Signal auch Anteile enthalten sind, die nicht 100%ig identisch 
mit einer bin-Frequenz sind, wird deren Energie auf alle anderen bins 
aufgeteilt. Dies ist praktisch immer der Fall, weil man nie exakt ein 
ganzzahliges Vielfaches der Periode eines Signals abtastet. Die 
angesprochenen Fensterfunktionen (soft windows) können dieses Problem 
verringern, gehen aber zu Lasten der Frequenzauflösung, d.H. eng bei 
einander liegende Frequenzen können nicht mehr unterschieden werden. 
Dieses Phänomen nennt sich dann spectral smearing.

Falls die Möglichkeit besteht, dass auch Signalanteile mit höheren 
Frequenzen vorkommen, ist dein Filter am Eingang ziemlich nutzlos, weil 
die Grenzfrequenz  ja auch schon fs/2 ist. Der macht also nur einen 
krummen Frequenzgang und verhindert kein Aliasing. Also entweder eine 
tiefere Grenzfrequenz (gerne mit einem Filter höherer Ordnung) nehmen 
oder noch schneller abtasten, Bandbegrenzen (mit einem digitalen Filter) 
und erst dann downsampeln. Alternativ kann man das Filter bei natürlich 
bandbegrenzten Signalen einsparen und mit möglichem Aliasing leben.

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.