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/4844 http://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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.