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
Nimm einen Takt von 10 MHz und bestimme die Zahl der Takte während einer Periodendauer deines Signals.
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
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.
... 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.
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.
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.
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
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...
Den Artikel zum Reziproken Frequenzzähler kennst du sicherlich: http://www.mikrocontroller.net/articles/Frequenzz%C3%A4hlermodul
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
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.
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
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
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.
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
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.
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.
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.
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?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.