Dies ist ein kleines Programm, das eine Aufzeichnung einer Uhr oder Uhr analysiert und Ihnen mitteilt, wie langsam oder schnell sie läuft. Sie können diese verwenden, um eine mechanische Uhr mithilfe eines Mobiltelefons zu regulieren, um das Ticken aufzunehmen.
$ python Fourier.py Aufnahme.Wav Erste Vermutung: 6,0 p/m 0,00606 Hz Aktualisierte Vermutung: 5.9998549 P/M 1.88e-05 Hz Der Fehler beträgt -2,1 Sekunden / Tag
Die recording.wav
sollte eine Mono -Sounddatei sein. Mein Handy verfügt über ein „Voice Memo“ -Programm, das Audio mit dem integrierten Mikrofon aufzeichnet. Für diesen Zweck ist es sehr empfindlich.
Mit einer guten Qualitätsaufnahme sehen Sie so etwas:
Das obere Feld zeigt die letzten 10 Sekunden auf der Aufzeichnung an. Dadurch können Sie die Qualität Ihrer Daten bewerten. Hier können Sie die einzelnen Zecken deutlich sehen, und dass diese Zecken 6 -mal pro Sekunde gesehen. Das Signal-Rausch-Verhältnis beträgt in diesem Beispiel wahrscheinlich etwa 10.
Das untere linke Diagramm zeigt die Fourier-Transformation der Aufnahme, die in den Bereich von 0,5-10 Hz vergrößert ist. Der Anstieg in diesem Grundstück entspricht der Tick -Frequenz der Uhr. Es ist fast 6 Zecken/pro Sekunde, wo es sein sollte ... aber wie nahe?
Das untere rechte Diagramm zeigt eine Anpassung an den Peak, mit dem die Frequenz auf hohe Präzision geschätzt wird. Diese Präzision stimmt leicht mit der Frequenzstabilität einer mechanischen Uhr überein (die unter anderem aufgrund von Temperatur- und Orientierungsunterschieden variiert).
Mit einer (sehr) Aufnahme von geringer Qualität sehen Sie stattdessen so etwas:
Hier sind die einzelnen Zecken im Lärm vergraben… aber das Programm wählt sie immer noch aus! Sie benötigen jedoch eine längere Aufnahme, um das gleiche Genauigkeitsniveau zu erreichen.
Ich habe das Programm mit synthetischen Signalen getestet, die auf verschiedene Arten erzeugt wurden. Die Ergebnisse sind im obigen Diagramm zusammengefasst.
Die fraktionale Unsicherheit in den Messskalen fällt mit der Länge der Aufzeichnung zur (3/2) Leistung. Es hängt auch von der Qualität Ihrer Messung ab. Während Sie also eine so gute Aufnahme wie möglich machen möchten, ist es möglicherweise einfacher, die Qualität mit Quantität auszugleichen. Ich finde, dass 5 Minuten beschissener Daten ungefähr 30 Sekunden perfekter Daten sind. Aber Ihre Uhr und Ihr Telefon für 5 Minuten in einer Sockenschublade allein zu lassen, ist viel einfacher als auszugehen und ein besseres Mikrofon zu kaufen. Also liegt es an dir.
Wenn die Daten so schlimm sind, dass Sie jedoch nicht einmal Zecken in der Aufnahme hören können, sind Sie jedoch möglicherweise in Schwierigkeiten. Versuchen Sie es erneut an einem ruhigeren Ort oder finden Sie ein besseres Mikrofon. (Und natürlich stellen Sie sicher, dass Ihre Uhr tatsächlich tickt.)
Die gepunktete schwarze Linie zeigt Messungen einer echten Uhr. Ich wollte es so einstellen, dass es mit ein paar Sekunden pro Tag ausgeführt wird, und fand, dass eine Aufnahme von 30 Sekunden oder einer Minute für die Aufgabe angemessen war. Sie stupsen die Regulierungsstange an, zeichnen eine Minute auf, stupsen Sie wieder an und so weiter, bis Sie eine Antwort erhalten, mit der Sie zufrieden sind. Ich habe es innerhalb von ungefähr 2 Sekunden pro Tag reguliert, was mein Ziel war. Das entspricht einem Fehler von weniger als hundertstel.
Das obige Diagramm zeigt einen Test unter Verwendung eines synthetischen 'Tick' -signals, das mit Audacity erzeugt wird. Dies zeigt, dass die vom Programm gemeldete Unsicherheit eine ziemlich aussagekräftige Darstellung der wahren „1-σ“ -Insicherheit ist.
Der Code ist ziemlich unkompliziert, und der größte Teil der Anstrengungen, die ihn ohne menschliche Intervention vorhersehbar läuft. I Fourier transformiert das Eingangssignal, um die Spitzenfrequenz zu messen. Vor der Transformation schlug ich mit einem Gaußschen Fenster auf das Signal. Ich wähle die Form des Fensters so, dass Frequenzspitzen eine Gaußsche Form mit einer Breite von ~ 3 Frequenzfächern haben. Dies kann genau zu einem Gaußschen Profil passen, was eine gute Schätzung der wahren Häufigkeit ergibt. Sie können sich die Handlungen ansehen, um ein Gefühl dafür zu bekommen, wie gut es funktioniert.
Ich verwende eine Scipy -Funktion, um die Peaks automatisch zu identifizieren, was ziemlich gut zu funktionieren scheint.
Und ich versuche, eine „optimale“ Länge für die FFT zu identifizieren. Bisher keine Probleme damit.
Die Ergebnisse sind nicht empfindlich gegenüber der Abtastfrequenz, es sei denn, es ist zu niedrig, um den "tickenden" Klang der Uhr angemessen aufzulösen. Aber das Programm läuft ziemlich schnell, daher gibt es keinen Grund, nicht nur die 44,1 -kHz -Stichprobenrate zu verwenden, die ziemlich Standard ist.