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
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.
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
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/4844http://www.daqarta.com/eex06.htm
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.
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
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
"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
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
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.