Forum: Digitale Signalverarbeitung / DSP / Machine Learning Frequenzen erkennen und Abweichungen messen


von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

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?

von Schorsch X. (bastelschorsch)


Lesenswert?

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.

von Hp M. (nachtmix)


Lesenswert?

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
von Alexxx (Gast)


Lesenswert?

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.

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

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.

von Jay (Gast)


Lesenswert?

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?

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

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.

von Dergute W. (derguteweka)


Lesenswert?

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

von Der Andere (Gast)


Lesenswert?

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.

von J. S. (engineer) Benutzerseite


Lesenswert?

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.

von Audiomann (Gast)


Lesenswert?

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?

von Dergute W. (derguteweka)


Lesenswert?

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

von Strubi (Gast)


Lesenswert?

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

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

"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
Noch kein Account? Hier anmelden.