這是一個小程序,可以分析手錶或時鐘的錄製,並告訴您它運行的速度或快速。您可以使用它來調節使用機械手錶,例如手機來記錄其滴答作響。
$ python fourier.py recording.wav 最初的猜測:6.0 p/m 0.00606 Hz 更新的猜測:5.9998549 P/m 1.88E-05 Hz 錯誤是-2.1秒 /天
文件recording.wav
應該是一個單聲道文件。我的手機有一個“語音備忘錄”程序,該程序使用內置麥克風記錄音頻。這對此目的很敏感。
有了良好的錄音,您會看到這樣的東西:
頂部面板在錄製中顯示了最後10秒鐘……這使您可以評估數據的質量。在這裡,您可以清楚地看到單獨的壁蝨,並且這款手錶每秒滴答6次。在此示例中,信噪比可能為10ish左右。
左下圖顯示了記錄的傅立葉變換,縮放到0.5-10 Hz的範圍內。該圖中的尖峰對應於手錶的刻度頻率。它接近6個滴答/每秒,應該在哪裡……但是有多近?
右下圖顯示了與峰的合適,用於將頻率估算為高精度。該精度很容易匹配機械手錶的頻率穩定性(由於溫度和方向的差異,其差異略有不同)。
有了(非常)低質量的記錄,您會看到這樣的東西:
在這裡,單個壁蝨被掩埋在噪音中……但是該程序仍然將它們挑出來!但是,您需要更長的記錄才能達到相同的精度。
我已經使用合成信號生成了幾種不同的方式測試了該程序。結果總結在上面的圖中。
測量量表中的分數不確定性隨記錄的長度降低到(3/2)功率。這也取決於您的測量質量。因此,儘管您想盡可能地製作錄音,但數量可以更容易彌補質量。我發現5分鐘的糟糕數據大約是30秒的完美數據。但是,與外出購買更好的麥克風相比,將手錶和手機獨自一人放在襪子抽屜中5分鐘要容易得多。所以取決於你。
如果數據太糟糕了,以至於您甚至無法聽到錄音中的滴答聲,但是您可能會遇到麻煩。在更安靜的地方重試或找到更好的麥克風。 (當然,請確保您的時鐘實際上是滴答作響的。)
虛線線顯示了真實手錶的測量。我想將其調整為每天幾秒鐘,發現30秒或一分鐘的錄音就足夠了。您輕推監管欄,記錄一分鐘,再次輕推,依此類推,直到您得到答案。我的目標是每天大約2秒鐘,這是我的目標。在錄製的範圍內,這意味著不到一百個滴答的錯誤,我認為這給人留下了深刻的印象!
上面的圖顯示了使用Audacity生成的合成“ tick”信號的測試。這表明該程序報告的不確定性是真實“ 1-σ”不確定性的非常有意義的表示。
該代碼非常簡單,大部分努力都可以預見它在沒有任何人類干預的情況下運行。 i傅立葉轉換輸入信號以測量峰值頻率。在轉換之前,我用高斯窗口敲擊信號……我選擇窗口的形狀,以便頻率峰將具有寬度〜3頻率箱的高斯形狀。這可以與高斯輪廓準確地擬合,從而獲得真實頻率的良好估計。您可以查看這些圖,以了解其正常工作。
我使用Scipy功能自動識別峰值,這似乎很好。
我嘗試確定FFT的“最佳”長度。到目前為止,沒有問題。
結果對採樣頻率不敏感,除非它太低而無法充分解決時鐘的“滴答”聲音。但是該程序運行速度很快,因此沒有理由不僅使用44.1 kHz的採樣率。