Ich brauche mal 1,2 tipps: Ich möchte ein Signalgemisch analysieren, das aus verschiedenen Wellen unterschiedlicher Frequenz besteht. Beispiel: 50Hz, 33.1/3 und 60Hz und auch 80Hz, sowie Frequenzen zwischen 100 und 200 Hz können vorkommen. Es geht dabei um die Erkennung einer variablen Frequenz innerhalb der 100Hz bis 200Hz mit der eine Information übertragen, welche aber durch vorhandene Brummeinstreuungen der genannten Freuqenzen und deren Oberwellen gestört sind. Ich muss also das Ausmass des Verhandenseins all dieser Frequenzen messen und nach einem Kriterium festlegen, ob sie vorhanden sind oder nicht. Laut Mathematik kann ich das durch eine FFT machen, womit ich mich einigermassen auskenne. Allerdings habe ich ein Problem, die Frequenz sehr schnell zu detektieren und zu erfassen, weil auch die Störfrequenzen nicht exakt sind. Besonders die 80Hz / 160Hz sind sehr variabel. Ich muss ausgeben, ob es 80Hz, 79.9 etc sind, wie stark also die Frequenz vom Ideal abweicht. Abtastrate möglichst 1kHz, d.h. bis zu Tausend Datensätze je Sekunde als Tabelle ausgegeben, die etwa so aussieht: Satz 1 Norm Ist Level 33Hz 33.4 -30dB 50Hz 50.2 -13dB 60Hz 59.4 -30dB 80Hz 79.1 -13dB XXHz 122.4 - 7dB Satz2 Norm Ist Level 33Hz 33.3 -29dB 50Hz 50.1 -12dB 60Hz 59.2 -31dB 80Hz 80.4 -14dB XXHz 122.4 - 7dB D.h man kann anhand der Tabelle die Frequenz mitteln und eine Schwankung erkennen und auch die Amplitude grob mitverfolgen. Geht das mit einer FFT? Wie fein muss ich die detaillieren, um die Frequenz zu berechnen? Wenn ich z.B. eine FFT mit 1Hz Abständen habe, dann würde ich bei einer Änderung von 79.8 auf 79.9Hz eine leichte Verschiebung der Amplituden der FFT-Werte um die 80Hz sehen. Kann ich da einfach Schwerpunkte berechnen? Wie könnte man es besser machen? - Wie berechne ich die Variable Frequenz?
Bei einem Gemisch mit solchen Amplitudenunterschieden und unbekannten Frequenzen dürfte die FFT am besten geeignet sein. Versuch doch mal das Ganze zu simulieren (Python ist recht einfach dafür). Die Gewichtung der einzelnen Bins kann für eine Abschätzung der Frequenz benutzt werden. Dazu auch mal mit der Fensterfunktion rumspielen. Bau dir dein Eingangsgemisch mathematisch zusammen , noch ein bisschen Rauschen dazu rechnen und den PC den Rest machen lassen. Schnell ist immer relativ. Es dauert eben 1 Sekunde bei 1000 Abtastungen a 1kHz. Im späteren Betrieb kannst du ggf. die Abtastungen überlappen lassen, z.B. nach 500 neuen Werten wieder rechnen.
Martin K. schrieb: > Besonders die 80Hz / 160Hz sind sehr > variabel. Ich muss ausgeben, ob es 80Hz, 79.9 etc sind, Warum? Ich denke das sind Störfrequenzen? Dann interessieren sie doch niemanden. Die anderen Festfrequenzen und deren Oberwellen kann man sehr einfach und wirksam mit analogen Doppel-T-Filtern unterdrücken. Das schafft einen besseren Störabstand für die Auswertung der Signalfrequenzen, egal wie du diese nun letztendlich realisierst. P.S.: Martin K. schrieb: > Abtastrate möglichst 1kHz, d.h. bis zu > Tausend Datensätze je Sekunde als Tabelle ausgegeben, Wie willst du denn eine Frequenz von 30Hz 1000Mal pro Sekunde messen? Du hast pro Sekunde ja nur 60 Nulldurchgänge und vielleicht noch einmal soviele Extrema, die du auswerten könntest.
:
Bearbeitet durch User
Also mit einer Abtastfrequenz von 1KHz über eine Sekunde erhälst du eine Frequenzauflösung von 1Hz - und nicht 0,1Hz. Du müsstest also mit 10kHz abtasten oder 1kHz über 10 Sekunden... Außerdem, musst du eine Fensterfunktion auf die Werte anwenden, sonst stimmen die Amplituden nicht mehr. Zudem nimmt man für FFT meist eine Zweierpotenz, z.B. 1024 Werte.
Ja, die Themen der FFT = Binärzahlgröße und Fensterung sind mir bekannt. Messen muss ich die 80Hz genau, weil in der Phase eine Information steckt.
Martin K. schrieb: > Messen muss ich die 80Hz genau, weil in der Phase eine Information > steckt. Bitte formuliere erst einmal dein Problem genau und ändere nicht mittendrin deine Geschichte. Oben hast du uns erzählt: Martin K. schrieb: > geht dabei um die Erkennung einer variablen Frequenz innerhalb der > 100Hz bis 200Hz mit der eine Information übertragen, Also was? 80 Hz? 100 Hz ... 200 Hz?
Das Ganze sind zwei Systeme. Eines für einen Kunden, das andere für mich. Die Signalverarbeitung ist recht ähnlich. Ich kann da leider nicht mehr sagen, aber bei meinem System es ist so, dass ich normal entaltenen Frequenzen benutzen möchte, um sie in Echtzeit auszublenden. Dafür müssen die 50Hz genau in der Phase und Amplitude gemessen und abgezogen werden. Abgezogen werden sie durch ein ständig laufendes Filter, das in der Phase und Amplitude regelt wird. Die Idee stammt aus einem Audioforum. Wenn man so den 50Hz Brumm abzieht, wird er geringer, ohne die realen Musikfrequenzen zu stören. Für die Industrieapplikation geht es darum mehrere Frequenzen genau zu messen. Von mir aus auch mit 10kHz Abtastrate. Die FFT ist eben nur sehr aufwändig und ich müsste sehr viele FFTs überlappen, um zeitnah neue Werte zu bekommen. Also als Beispiel: 100 parallele FFTs zeitversetzt mit 1kHz Abtastrate und 1000 Punkten würden mit 1Sekunde Latenz alle 10ms einen Amplituden- und Phasenwert ausspucken. Problem: 1000 Punkte sind gfs zu weit, um die Frequenzen fein genug aufzulösen.
Moin, Ich glaub - egal, was du machst - wenn du irgendwelche Frequenzen fein aufgeloest messen willst, dann dauert das lange. Punkt. Klar FFT ist halt die Holzhammermethode, damit wird man's schon irgendwie erschlagen koennen. Du kannst auch versuchen, dein Signal z.b. mit einem komplexen 50.000Hz Signal durch einen Quadraturmischer runterzumischen, danach dann (sehr tief) tiefpassfiltern (also wenn du z.b. mit Fehlern von +-1% in deinen 50Hz rechnest, koennte die Grenzfrequenz der Tiefpaesse bei 0.5Hz liegen) und die Frequenz dann "messen". Aber das dauert halt auch lange... Gruss WK
Du wirst ausserdem auch beim Überlappen von Messfenstern immer nur die Frequenzen erhalten, die in dem vergangenen Messfenster da waren. Wenn sich deine Stöfrequenzen aber über die Zeit ändern weisst du nicht wie sie sich seither geändert haben. Damit kannst du nicht in Echtzeit diese in Phase und Frequenz variablen Störungen rausrechnen. Das funktioniert nur bei einem sehr stabilen Signal wie dem Netzbrumm.
Sehe ich genau so. Mit der FFT hat man das Problem, daß man allemöglichen Frequenzen bekommt, die man gar nicht braucht, bzw von denen man viele nicht braucht. Das obere Spektrum ist relativ dicht besetzt und unten fehlt es. Ich habe sowas daher für meine Musikapplikationen so gemacht, dass ich nur die Frequenzen prozessiere, die ich auch wirklich brauche, also z.B. einen 33Band-EQ oder auch ein 88-Tasten-Klavier. http://www.96khz.org/htm/spectrumanalyzer2.htm Wenn die Frequenzen genau gemessen werden sollen, reicht das aber noch nicht. Da geht es nur entweder mit PLLs, die sich auf das Signal selektiv einloggen und einen Phasenabgleich ermöglichen oder ansonsten DFT mehrkanalig komplex, wie bei Radar / Ultraschalldiagenostik. Abtastraten von 1kHz reichen da aber sicher nicht, um daraus Amplitudenwerte genau zu ermitteln. Geht eher Richtung 100kHz! Hier ist eine Lösung für einen Kanal in einem FPGA: http://www.96khz.org/htm/audio2midifpga.htm Das geht auch mit DSPs. Vielleicht geht es mit Goertzel, wenn Du Dich auf einige wesentliche Frequenzen beschränkst und deren Umgebungen mit direkten Nachbarn abdeckst: https://de.wikipedia.org/wiki/Goertzel-Algorithmus Genau wie die FFT braucht aber auch Goertzel eine gewisse Prozesslänge um die Frequenzen selektiv zu finden, also u.U. mehrere Perioden. Und man muss die genaue Frequenz noch nachberechnen. Die 100-200 Hz wirst Du in jedem Fall mit einer FFT am Besten hinbekommen.
Dergute W. schrieb: > Du kannst auch versuchen, dein Signal z.b. mit einem komplexen 50.000Hz > Signal durch einen Quadraturmischer runterzumischen, Meinst Du damit 50Hz oder 50kHz? Wegen des Punktes? Wieso wird das Signal runtergemischt und wohin?
Moin, Ich meine 50Hz. Durch die .000 hintendran wollt' ich nur die Genauigkeit dieser Referenzfrequenz vorgaukeln. Durch dieses Verschieben im Spektrum durch den Mischvorgang wird dann aus den z.b. tatsaechlich anliegenden 50.01Hz im Signal nach dem Mischer 0.01Hz. Die kann ich dann tiefpassfiltern, um alle anderen Signalanteile, die mich gerade nicht interessieren, loszuwerden; danach die Frequenz messen. Das sollte irgendwie zu machen sein, weil man dann die Zeit zwischen Nulldurchgaengen detektieren kann. Aber es dauert halt... Gruss WK
Moin, ich würde zu einer Goertzel-Filterbank tendieren (also ein paar IIR-Filter). Kann man auch modifizieren, wenn du laufend Phasenaenderungen registrieren musst. Phase kriegst du da sehr gut raus. Ist das eine SDR-Ähnliche Applikation mit irgend nem Phase-Keying? Bei der FFT schlagen halt die Überlapp-Probleme zu, die oft mühsam rauszurechnen sind, für ne fortlaufende Phasendetektion ist das nicht so ganz elegant. Aber du kannst ansich bei fortlaufender, überlappender FFT eine gleich effiziente "moving DFT" machen und brauchst kaum Werte puffern. Findet man in div. FFT-Algo-Schinken. Gruss, - Strubi
"Phase Keying" ist zuviel gesagt, aber die Phasenlage wird verwendet, um Zeitpunkte der Messung zu ermitteln und zu korrigieren. Ich mache mich mal bezügl der Görzelmethode schlau.
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.