Forum: Analoge Elektronik und Schaltungstechnik Frequenz messen, hochauflösend, FFT


von Tobias K. (saibot1)


Lesenswert?

Angenommen, ich möchte eine Frequenz von 100 Hz auf tausendstel Hz genau 
bestimmen. Und das mit möglichst wenigen Schwingungsperioden.

Dann kann ich natürlich Bandpass-Filtern und Nulldurchgänge bestimmen 
und zählen.

Aber was wäre mit Fourier-Transformation (FFT)? Die Frequenzauflösung 
ist angeblich genau 1 / Messzeit, d.h. 1/1000 Hz --> 1000 Sekunden 
Messzeit --> viel zu langsam.
Ist es möglich, den Frequenzbereich auf z.B. 99 Hz bis 101 Hz zu 
beschränken und somit in kürzerer Zeit mit der gewünschten Auflösung zu 
messen? Ich vermute nein, weiß aber nicht genau warum.

Gibt es zu der Problemstellung irgendwelche Theorien oder nützliche 
Internetseiten?

: Verschoben durch Admin
von ... (Gast)


Lesenswert?

Nimm einen Takt von 10 MHz und bestimme die Zahl der Takte während einer 
Periodendauer deines Signals.

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

Hi, Tobias,

> Angenommen, ich möchte eine Frequenz von 100 Hz auf tausendstel Hz genau
> bestimmen. Und das mit möglichst wenigen Schwingungsperioden.

> Aber was wäre mit Fourier-Transformation (FFT)? Die Frequenzauflösung
> ist angeblich genau 1 / Messzeit, d.h. 1/1000 Hz --> 1000 Sekunden
> Messzeit --> viel zu langsam.
Keine Schuld der Hersteller, sondern eine Grenze der Definition. Wwenn 
Du die Dauer einer Periode messen willst, dann musst Du eine Periode 
lang warten. Ganz egal, nach welchem Messprinzip.

Aber vielleicht kannst Du aus der Kenntnis des Senders Vorannahmen 
treffen, wie es der Vorredner tat - wenn Du davon ausgehen kannst, dass 
Dein Signal frequenzkonstant ist, dann genügt die genaue Auszählung 
einer einzigen Schwingung durch Messung der Periode.

Ciao
Wolfgang Horn

von J. S. (engineer) Benutzerseite


Lesenswert?

Dann hat er wieder das Problem des Nulldurchgangs, wenn er die Periode 
bestimmen will. FFT ist schon nutzbar:

Mit einer Abtastfrequenz von 250Hz hält man die Bedingung 50% sicher ein 
und bekommt bei einer FFT-Länge von 65536 eine Auflösung von 3mHz.

Im Bereich 100Hz sollte das dann so ähnlich aussehen:


***            99,9
*****
******
********
*********
*********
********
********
******
*****         100,1
****

Darüber bestimmt man dann den Schwerpunkt. Das ist dann noch mal 
10-20mal feiner, als die Stützstellen selber.

Man muss auch nur die relevanten Frequenzen um die 100Hz herauspicken, 
und von der FFT berechnen lassen / auswerten.

Bei der Schwerpunktbestimmung ist zu beachten, dass infolge des 
Rauschens und der Mittelwertbildung der gefundene Wert immer ein wenig 
in die Mitte zieht. Mit einer Rauschmessung/Schätzung kann man das auch 
noch korrigieren.

Die Frage ist, ob man das Signal vor der FFT noch filtern sollte. Kann 
sinnvoll sein, oder auch nicht.

von Tobias K. (saibot1)


Lesenswert?

... schrieb:
> Nimm einen Takt von 10 MHz und bestimme die Zahl der Takte während einer
> Periodendauer deines Signals.

Ich frage mich, ob FFT sowas auch kann (z.B. mit nur ein oder zwei 
Perioden). FFT hätte den Vorteil, dass in dem Signal auch andere 
Frequenzen vorkommen dürften.

Wolfgang Horn schrieb:
> Wenn
> Du die Dauer einer Periode messen willst, dann musst Du eine Periode
> lang warten. Ganz egal, nach welchem Messprinzip.

Nach meiner Rechnung müsste ich 1000 Sekunden warten --> 100.000 
Perioden.

Juergen Schuhmacher schrieb:
> Mit einer Abtastfrequenz von 250Hz hält man die Bedingung 50% sicher ein
> und bekommt bei einer FFT-Länge von 65536 eine Auflösung von 3mHz.

Das macht 262 Sekunden für 3mHz Auflösung. Entspricht anscheinend meinen 
1000 Sekunden für 1mHz.

von Ulrich (Gast)


Lesenswert?

Wenn das Signal wirklich nur 1 Frequenz hat, muss man mit dem 
Interpolieren beim FFT-Ergebnis aufpassen. Die genaue Amplitude für die 
Frequenzen dicht um die Tatsächliche hängt u.A. von genauen Abschneiden 
am Anfang und Ende ab. Einfach nur eine Kurve durch die Amplituden zu 
fitten wird nicht reichen.

Das beschränken der Fouriertransformation auf einen kleinen 
Freuquenzbereich kann man ggf. nutzen um die Rechenzeit und den 
Speicherbedarf zu reduzieren - für die Auflösung gewinnt man dabei aber 
nichts. Falls man es wirklich nit 1000 s Messzeit machen will, ist das 
durchaus sinnvoll.

Wenn man nur mit den Nulldurchgängen arbeitet, sollte man das Signal 
Filtern und das Signal sollte wenig rauschen haben. Dann geht es ggf. 
auch schon mit nur 1 Periode. Ab 3 Perioden kann man die Zeiten aller 
Nulldurchgänge nutzen und so noch ein bisschen mehr herausholen als nur 
über die Zeit vom 1. zum letzten Nulldurchgang.

Ein oft bessere Alternative zum direkten Messen 1 Periode über 2 
Nulldurchgänge ist es das Signal zu digitalisieren und dann einen Sinus 
(oder ggf. die andere bekannte Wellenform) daran anzupassen das benötigt 
allerdings einiges mehr an Rechenzeit.

von Helmut S. (helmuts)


Lesenswert?

Die 100Hz stammen doch bestimmt von einem Oszillator.
Falls ja, dann ist es am sinnvollsten das mit einem Zähler mittels 
Periodendauermessung zu messen. Jeder gute Zähler macht das automatisch.
Eine FFT ist in diesem Fall die weitaus schlechtere Methode, da 
unsäglich langsam.

von Michael L. (Gast)


Lesenswert?

Hallo Tobias,

ich möchte Dir hier die entscheidenden Stichwörter liefern:

Die erste Frage ist, ob das Signal die Information so genau enthält, wie 
Du sie gerne hättest. Bedingt durch das Rauschen, die endliche 
Signallänge und (mit weniger Einfluß) die Abtastrate weist die Frequenz 
eine gewisse Unschärfe auf, die durch die Cramer-Rao-Grenze angegeben 
wird. Es kann gut sein, daß Du eine zu große Meßunsicherheit hast.

Schau mal hier unter Gl. 6.84:
http://books.google.de/books?id=W_vTbYbpNx4C&pg=PA290&dq=cramer+rao+nobach&hl=de&ei=yfp9TpqpBsncsga7n6FK&sa=X&oi=book_result&ct=result&resnum=1&ved=0CC0Q6AEwAA#v=onepage&q=cramer%20rao%20nobach&f=false

Wenn Du wenig Rauschen hast, kannst Du die sog. Momentanfrequenz 
bestimmen.
Du ergänzt das Signal s mittels der Hilberttransformation hilbert(s) zu 
einem analytischen Signal und bestimmst dessen Phase.

Der Phasenanstieg pro Zeiteinheit ist proportional zur Frequenz.


Viele Grüße
Michael

von Tobias K. (saibot1)


Lesenswert?

Vielen Dank Euch für die Antworten.

Ulrich schrieb:
> Das beschränken der Fouriertransformation auf einen kleinen
> Freuquenzbereich kann man ggf. nutzen um die Rechenzeit und den
> Speicherbedarf zu reduzieren - für die Auflösung gewinnt man dabei aber
> nichts.

OK. Ich hatte es ja schon vermutet.

Ulrich schrieb:
> Wenn man nur mit den Nulldurchgängen arbeitet, sollte man das Signal
> Filtern und das Signal sollte wenig rauschen haben. Dann geht es ggf.
> auch schon mit nur 1 Periode. Ab 3 Perioden kann man die Zeiten aller
> Nulldurchgänge nutzen und so noch ein bisschen mehr herausholen als nur
> über die Zeit vom 1. zum letzten Nulldurchgang.

Ich denke so werde ich es machen.
Für den Sinus-Fit fehlt wahrscheinlich die Rechenleistung.

Michael Lenz schrieb:
> ich möchte Dir hier die entscheidenden Stichwörter liefern:

Klingt gut :) werde ich mir mal reinziehen...

von ... (Gast)


Lesenswert?

Den Artikel zum Reziproken Frequenzzähler kennst du sicherlich:
http://www.mikrocontroller.net/articles/Frequenzz%C3%A4hlermodul

von Ralph B. (rberres)


Lesenswert?

Reziproge Frequenzzähler haben auch so ihre Tücken.

Versuche mal mit einen schnellen Zähler ( Agilent Racaldana usw ) welche 
10 Stellen pro Sekunde auflösen , einen 1KHz Sinus zu messen. Du wirst 
keine 10 Stellen jitterfrei zur Anzeige bekommen. Bestenfalls vielleicht 
6 Stellen, wenn überhaupt.

Das liegt unter anderen an dem Rauschen des Signals bzw der 
Eingangsstufe, welches den Triggerpunkt mehr oder weniger unscharf 
macht. Mit Rechtecksignal geht es dann etwas besser, sofern das 
Rechtecksignal genügend jitterfrei ist..

Also schraube deine Anforderungen nicht zu hoch. auf 1mHz auflösen geht 
halt nur mit der entsprechende Messzeit.

Ralph Berres

von Andre (Gast)


Lesenswert?

Die Frage ist, wie schnell man messen muss. Bei 100 Messungen trifft man 
die Nulldurchgänge jeweils auch nicht besser, der Fehler nimmt aber 
kontinuierlich ab.

Bei 100% bekommt man dann allerding 1s Latenz.

von Ralph B. (rberres)


Lesenswert?

Naja schneller als 10mS ( 1/100Hz ) kann er eh nicht messen. Er schreibt 
von möglichst wenigen Perioden. Also nehme ich mal an maximal 50mS.

Ralph Berres

von m.n. (Gast)


Lesenswert?

Tobias K. schrieb:
> Angenommen, ich möchte eine Frequenz von 100 Hz auf tausendstel Hz genau
> bestimmen. Und das mit möglichst wenigen Schwingungsperioden.

Als Drehzahlmesser getarnt hatte ich etwas in die Codesammlung gestellt:
Beitrag "einfache Drehzahlmessung mit ATmega88"
Wenn man dort die MESSZEIT auf 1 setzt, wird diese auf minimal 3,3ms 
oder bei 100Hz auf 10ms eingestellt. Wenn man in der Ausgaberoutine die 
x *= 60.0 Anweisung wegläßt, wird die Frequenz in Hz ausgegeben.

1/1000 Hz Auflösung bei 100Hz ist scharf gerechnet eine 5-stellige 
Auflösung; die bekommt man bei 20MHz CPU-Takt schon in 5ms hin.
Wenn Du ein fertiges Programm suchst, findest Du es u.a. hier:
http://www.mino-elektronik.de/fmeter/fm_software.htm

von m.n. (Gast)


Lesenswert?

Ganz vergessen: bei 10ms Messzeit bekommt man bei dem kontinuierlichen 
Verfahren auch 100 Ergebnisse/s. Am besten ergänzt man das Programm noch 
durch eine serielle Datenausgabe, um jeden Wert auch nutzen zu können.

von Wolfgang H. (Firma: AknF) (wolfgang_horn)


Lesenswert?

Hi, Tobias,

>> Wenn
>> Du die Dauer einer Periode messen willst, dann musst Du eine Periode
>> lang warten. Ganz egal, nach welchem Messprinzip.
>
> Nach meiner Rechnung müsste ich 1000 Sekunden warten --> 100.000
> Perioden.
Die Messgenauigkeit hängt vom Abstand des Nutzsignals von Störsignalen 
ab, Shannon gilt auch hier.

Wenn dieser Abstand so groß ist wie am Ausgang eines quarzgesteuerten 
Rechteckgenerators, dann kannst Du die Periode so messen, wie es "..." 
schon beschrieben hat: "Nimm einen Takt von 10 MHz und bestimme die Zahl 
der Takte während einer Periodendauer deines Signals."

Ist der Störabstand kleiner, kostet Dich das Aufwand (wie die 
Korrelationsmessung von Juergen oder die Zeit der Auszählung mehrerer 
Schwingungen.

Der Spaß des Ingenieurs ist das Spiel mit den physikalischen Größen.

Ciao
Wolfgang Horn

von Martin K. (mkmannheim) Benutzerseite


Lesenswert?

Ulrich schrieb:
> Das beschränken der Fouriertransformation auf einen kleinen
>
> Freuquenzbereich kann man ggf. nutzen um die Rechenzeit und den
>
> Speicherbedarf zu reduzieren

Görztel geht am schnellsten für diese Applikation. Man sollte sich 10 
Frequenzen raussuchen und fertig ist die Laube.

von Kurt (Gast)


Lesenswert?

Juergen Schuhmacher schrieb:

> Mit einer Rauschmessung/Schätzung kann man das auch
> noch korrigieren.

Korrigieren?
Würde eher vermuten, dass man damit die Unsicherheit
beziffern könnte. - Was immer noch sinnvoller ist,
als sich blind drauf zu verlassen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Das Rauschen liefert einen konstanten Beitrag zur Mittelwertbildung. 
Wenn das Level ungefähr bekannt ist, kann man das von den Integralsummen 
abziehen, bevor man zur Mittelwertberechung dividiert.

> Görztel geht am schnellsten für diese Applikation.
Der Görztelalgoithmus dürfe bei den (wegen der Feinheit) vielen zu 
prozessierenden Frequenzen zu langsam sein.

> Für den Sinus-Fit fehlt wahrscheinlich die Rechenleistung.
Wenn Du es geschickt machst, brauchst Du nur drei bis 4 Ansätze, einen 
geschätzten Sinus zu korrelieren und aus den Korrelationskoeffizienten 
den passenden zu ermitteln - ebenfalls über Schwerpunktbildung.

von m.n. (Gast)


Lesenswert?

Wenn man die FFT-Ansätze so ließt, könnte man den Eindruck bekommen, das 
sei alles easy.
Aber wie sieht es denn bei der geforderten Auflösung/Genauigkeit mit den 
Randbedingungen aus?
Abtastrate und deren Genauigkeit (wohl <10ppm)?
Auflösung und Jitter des ADC?

Ein ATmega8 mit Quarz und interem ADC wird doch da wohl nicht 
ausreichen?

von Ulrich (Gast)


Lesenswert?

Der µC interne AD sollte keinen nennenswerten zusätzlichen Jitter 
mitbringen. Bei einem Abstand der Werte von z.B. 50 µs und 8 Bit 
effektiver Auflösung sollte das reichen einen Nullduchgang auf etwa 0,1 
µs genau festzulegen, allein mit den beiden Samples vor und hinter dem 
Nulldurchgang. Das reicht gerade für die Geforderten 1 mHz nach 10 ms. 
Durch die Zusätzlichen Samples hätte man noch mehr Information und 
könnte höher auflösen.

Man hat da aber ein Problem: um alle Samples zu speichern reicht das RAM 
nicht aus, um für eine Berechnung in Echtzeit wird mit der 
Geschwindigkeit beim AVR kaum reichen - eventuell noch gerade für einen 
einfachen Digitalen Filter um dann das Timing der Nulldurchgänge zu 
kriegen. Also gerade so das man die zusätzlichen Samples dazwischen 
verschenkt und auch gleich einen noch relativ einfachen analogen Filter 
und dann die ICP Funktion nutzen könnte.

von J. S. (engineer) Benutzerseite


Lesenswert?

Ulrich schrieb:
> reichen einen Nullduchgang auf etwa 0,1

Du musst in jedem Fall filtern, weil Dir sonst Rauschen und Oberwellen 
den Nulldurchgang verwässern.

Oder eben Sinus-Fit mit fliessender Adaption
Beitrag "Re: Wechselspannung 100kHz genau messen"

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.