Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT Zusammenhang zwischen Auflösung und Messdauer


von Jan (Gast)


Lesenswert?

Hallo,

ich habe da mal eine Frage zum Thema Auflösung und Messdauer bei einer 
FFT.
Wie hängen denn diese nun genau zusammen.

Vielleicht das ganze mal an einem Beispiel:

Ich möchte ein Signal bis 1MHz spektral darstellen. Als Samplerate 
wollte ich im ersten Ansatz 2,2MHz verwenden. Wenn ich jetzt eine 1024 
Punkte FFT anwenden würde hätte ich doch eine Frequenzauflösung von 
2,148kHz. Ich hätte dann also einen Wert für den Bereich von 
0...2,148kHz, den nächsten für den Bereich von 2,148...4,296kHz usw..

1. Frage:
Entspricht der Wert für den jeweiligen Bereich der maximalen Amplitude 
in diesem Frequenzbereich, d.h wird nur die Frequenz mit der stärksten 
Amplitude ausgewertet oder die Summer aller vorhandener Amplituden im 
diesem Frequenzbereich? Ich weiss das ist eine sehr allgemeine DSV 
Frage, doch diese beschäftigt mich immer wieder.

2. Frage:

Ich würde ja gerade einmal 465us brauchen um diese Werte einzulesen. Ist 
diese Zeit ausreichend um den gesamten Frequenzbereich von 0...1MHz zu 
analysieren? Oder muss ich mindestens eine Periodendauer der niedrigsten 
auszuwertenden Frequenz an Daten vorliegen haben? Dann hätte ich sicher 
ein Problem mit der Vielzahl von Samples.

Das sind erst einmal meine beiden größten Probleme, die ich auch über 
Suchfunktion nicht eindeutig klären konnte.

Viele Grüsse

Jan

von Alex (Gast)


Lesenswert?

Hi,

zu 1.

http://www.qsl.net/dl4yhf/speclab/fftinfo.htm
"Each frequency bin collects the energy / amplitude from a small 
frequency range."

zu 2.

Jede Frequenz kleiner 2.148 kHz wird sich bei dir also mehr oder minder 
im DC-Bin (0 Hz) niederschlagen, für alle höheren Frequenzen erwischt du 
mindestens eine Periode.

von Jan (Gast)


Lesenswert?

Hallo,

danke für deine Antwort.

Also gut dann habe ich also die Summe der Amplituden wenn ich 2 Signale 
habe die nur 1kHz auseinanderliegen und wenn ich es dann richtig 
verstanden habe sind auch die Frequenzen unterhalb von 2,148kHz mit 
ausgewertet und im ersten part vorhanden.

Ich will meine Ergebnisse später auf einem Display zur Anzeige bringen, 
das eine maximale Auflösung von 800 Pixeln in der Breite hat. Gibt es 
dann überhaupt einen Grund eine FFT mit mehr als 1024 Punkten zu machen? 
Ich kann ja eh nicht mehr als 800 verschiedene Messwerte darstellen. 
Oder habe ich jetzt hier noch einen Punkt nicht in Betracht gezogen?
Ich wäre für evtl. Hinweise wirklich sehr dankbar.

Gruß

Jan

von Alex (Gast)


Lesenswert?

Eine 1024 Punkte FFT liefert dir aber "nur" 512 Punkte des Spektrums 
(beachte die Symmetrie zu fs/2).

Ansonsten ist es soweit in meinen Augen korrekt, es sei denn du möchtest 
eine Art "Zoom" ermöglichen, dann braucht es natürlich mehr Punkte oder 
eine niedrigere Abtastfrequenz - beides verlängert das Intervall zum 
Samplen der nötigen Punkte.

Vergiss nicht noch eine vernünftige Fensterfunktion über deine 
gesampelten Daten zu legen bevor du die FFT berechnest, sonst wird es 
schwierig etwas Vernünftiges mit den Ergebnisdaten anzufangen 
(Genauigkeitsanforderungen?!). Eine FFT liefert dir (theoretisch) nur 
"perfekte" Ergebnisse, wenn das Betrachtungsintervall unendlich lang 
ist. Praktisch nimmst du ein endliches Fenster was einer Faltung des 
Eingangssignals mit einem Rechteckpuls gleichkommt. Dessen Anteile 
findest du dann auch in deinem Spektrum wieder - deshalb der Tipp mit 
der Fensterfunktion. Falls du physikalische Größen aus dem Spektrum 
ablesen willst musst die das Ergebnis der FFT bei Verwendung einer 
Fensterfunktion mit einem Korrekturfaktor multiplizieren.

http://zone.ni.com/devzone/cda/tut/p/id/4844
http://www.daqarta.com/eex06.htm

von Jan (Gast)


Lesenswert?

Das mit den 512 ist korrekt, aber ich denke ich werde erst einmal damit 
kalkulieren. Ich muss am Ende mal schaun wie schnell meine FFT wird.

Das mit dem Zoom soll tatsächlich möglich sein. Ich habe vor der FFT 
noch ein DDC Modul mit dem ich den eigentlichen Frequenzbereich 
einschränke bzw. aus dem gesamten Frequenzbereich nur einen Teil 
herausnehme. Mit dieser werde ich dann im Falle des zoomens den Span 
verkleinern, so dass ich dann auch die Abtastfrequenz runter setzen 
kann.

Mit dem Thema Fensterfunktion werde ich mich dann wohl auch noch 
beschäftigen müssen, da dein Einwand hier korrekt ist. Ich bekomme aus 
meinem DDC Modul aber I- und Q-Signal. Kann man hierauf jetzt auch eine 
Fensterfunktion anwenden?

Von meinem gesamten System her muss das Timing so sein, das ich alle 
10ms einen neuen Datensatz von meiner FFT bekomme. Dieser soll dann 
immer auf einem Display dargestellt werden. Ich muss jetzt nur noch 
herausfinden was für einen Performance bei der FFT in dieser Zeit 
möglich ist.
Das liegt dann sicherlich auch sehr an der verwendeten Hardware. Hier 
strebe ich einen FPGA von Xilinx an. Die Frage wird wohl nur sein ob ein 
Spartan3 hier noch ausreicht oder ob es ein Virtex4 oder 5 sein muss. 
Für Erfahrungswerte hier wäre ich auch dankbar.

von Alex (Gast)


Lesenswert?

Hi,

was hast du eigentlich vor?

Ein DDC Modul nimmt man eigentlich zum Runtermischen von Signalen, mal 
eben aus dem Frequenzbereich von 0 bis 1 MHz den Bereich von bspw. 10 
bis 100 kHz rausgreifen geht damit wohl eher nicht.

Wenn es nur ums Downsamplen (= jedes Nte Sample wegwerfen) des 
Eingangssignales geht das macht so ein FPGA nebenher (den digitalen 
Filter dafür musst du natürlich auch reinimplementieren => sonst 
Aliasingprobleme).

Das I- und Q-Signal des DDC beschreiben die Einhüllende deines 
Eingangssignales, mittels M = sqrt(I^2+Q^2) kannst du diese berechnen.

Warum muss es ein FPGA sein? Das was du vorhast macht auch ein normaler 
DSP mit links (<200 MHz Takt sowie < 200 Pins). Der lässt sich dann auch 
komfortabler programmieren. Oder ist das Ganze eine 
Arbeitsbeschaffungsmaßnahme? ;-)


Alex

von Jan (Gast)


Lesenswert?

Hallo,

also das mit dem DDC sieht so aus, das ich einen Eingangsfrequenzbereich 
von 0 ... 54MHz in meinem System habe. Aus diesem möchte ich dann 
verschiedene Bereiche anschauen. Es soll ein maximaler SPAN von 10MHz 
und ein minimaler von 10kHz realisiert werden. Ich wollte auf jeden Fall 
mit der DDC aus einem bestimmten Bereich (frei wählbar) in das Basisband 
mischen. Meinst Du das ist so nicht sinnvoll?

Jetzt ist bei uns auch noch die Diskussion aufgekommen ob ich evtl. doch 
mit mehr Punkten die FFT berechnen sollte, damit sich die 
Filtercharakteristik der einzelnen Filter verbessert. Also könnte es 
auch sein das ich eine 4096 Punkte FFT anstrebe.

Einen FPGA hatte ich vorgesehen weil ich eben die DDC mit diesem 
erledigen wollte. Weiterhihn dachte ich das es sich dann auch gleich 
anbietet wenn ich den DSP auch gleich im FPGA realisiere. Spricht hier 
etwas dagegen? Ich bin noch in der Planungsphase und deshalb kann ich an 
allen Stellen noch Einfluss nehmen. Wenn es hier also gute Tips 
bezüglich der Hardware gibt dann höre ich mir die gerne an.

Bei dem FPGA könnte ich fertige Module für die DDC und den FFT 
verwenden. Wenn ich das mache, habe ich I- und Q-Signal am Ausgang der 
DDC und am Eingang der FFT Funktion vom DSP. Wenn ich jetzt meine 
Fensterfunktion auf die von Dir angegebene Formel anwenden habe ich ja 
nur noch ein Signal. Wie verfahre ich dann weiter?

Ein weiterer Einwand den ich hier bekommen habe ist folgender. Wenn ich 
das I- und Q-Signal als Ausgang der DDC bekomme, hat man behauptet das 
ich mit meiner Abtastfrequenz auf die Nutzfrequenz herunter gehen kann 
und den Herrn Shannon nicht berücksichtigen muss?!?! Wie sieht es dann 
da nun aus?
Vielleicht bin ich im moment auch nur zu müde um das ganze noch zu 
durchschauen. (seit 15 Stunden bei der Arbeit)

Also wieder mal einige Fragen, aber ich hoffe ich konnte einen weiteren 
Einblick in das System geben.

Viele Grüße

Jan

von Alex (Gast)


Lesenswert?

"Ich wollte auf jeden Fall mit der DDC aus einem bestimmten Bereich 
(frei wählbar) in das Basisband mischen. Meinst Du das ist so nicht 
sinnvoll?"

Prinzipiell geht das schon, ABER :)

Bsp.: Du willst den Bereich von 10 MHz bis 11 MHz herausnehmen, dein 
Eingangssignal hast du mit 110 MS/s abgetastet (das macht kein DSP mehr 
...), um Shannon nicht zu verletzen. Bevor du das Signal heruntermischen 
kannst musst du erstmal dafür sorgen, dass bei allen anderen Frequenzen 
keine nennenswerten Signalanteile mehr vorhanden sind, d.h. du brauchst 
einen Bandpass, der dir 0...10MHz und 11...54MHz sperrt. Danach kannst 
du mit dem DDC das Signal auf 0 ... 1MHz ziehen, wobei das 
Ausgangssignal des DDC zunächst noch immer 110 MS hat. Allerdings kannst 
du jetzt hier eine Dezimation um bspw. 50 auf 2.2 MS/s vornehmen (heißt 
49 von 50 Werten wegwerfen, wenn bereits der nötige Tiefpass im DDC 
implementiert wurde, sonst musst du den auch noch reinbauen, erst danach 
darf man dezimieren). Mit der bereits angegebenen Formel erhältst du ein 
reellwertiges Signal, auf welches du Fensterfunktion und FFT anwenden 
kannst.

Es gibt aktuelle FPGA-Core mit Hardware-Multiplizierern und anderen 
Arithmetikeinheiten, sowas würde ich in Betracht ziehen. Die Arithmetik 
die du da reinstopfst wird dir sonst ziemlich schnell die Anzahl der 
benötigten Logikzellen wachsen lassen.

Da die gängigen Tools alle Simulatoren haben würde ich mich erst später 
auf einen konkreten Typen festlegen und erstmal so schauen, was ich so 
brauche.

Zeichne dir einfach mal die Eingangsspektren auf und überlege dir, was 
damit während des Signalflusses passiert, wir können gern auch anhand 
solcher Bilder diskutieren (alternativ Matlab m-files mit 
Beispielsignalen), ich habe dazu heute abend nur keine Muße mehr zu, das 
muss von dir ausgehen.

BTW: Understanding Digital Signal Processing von Richard G. Lyons ist 
ein super Buch, dass dir sicherlich helfen würde ;-)

Alternativ tuts auch das hier häufig verlinkte Openbook auf 
http://www.dspguide.com

von Jan (Gast)


Lesenswert?

Hallo,

war leider 2 Tage nicht in der Lage hier zu posten, aber nun bin ich 
wieder da.

Gleich mal eine Frage zu deinem Beispiel Alex.
Wieso benötige ich vor der DDC noch die Bandpässe? Ich habe noch in 
keiner Dokumentation etwas darüber gelesen, dass ich vorher noch die 
nicht genutzten Bereiche wegfiltern muss.
Reicht hier nicht das Tiefpassfilter im DDC?
Ich werde heute mal wieder versuchen einige Informationen zu finden und 
mich dann sicher später auch noch wieder hier zurück melden.

Matlab habe ich leider nicht zur Verfügung deswegen wird es sicher 
schwer mit solchen files...

Jan

von Klaus (Gast)


Lesenswert?

Ich hab jetzt nicht den kompletten Thread verfolgt, also sorry falls das 
schon geschrieben wurde.

Ein Problem bei der FFT ist der Leakage-Effekt. Der tritt immer dann 
auf, wenn man in einem FFT-Block keine ganze Zahl Periode des Signals 
hat - ob etwas oder weniger als eine Periode spielt keine Rolle. Der 
Effekt äussert sich darin, dass Spektrallinien, die in der Theorie 
Diracs sind im Spektrum plötzlich sehr breit erscheinen. Manche 
Messungen sind dann überhaupt nicht mehr möglich. Abhile schafft es hier 
ganze Signalperioden in einem FFT-Block zu verarbeiten oder wenn dies 
nicht möglich ist mit Fensterfunktionen zu arbeiten.

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.