Ini adalah program kecil yang menganalisis perekaman jam tangan atau jam dan memberi tahu Anda seberapa lambat atau cepat berjalan. Anda dapat menggunakan ini untuk mengatur arloji mekanis menggunakan, misalnya, ponsel untuk merekamnya.
$ python fourier.py record.wav Tebakan Awal: 6.0 P/M 0.00606 Hz Tebakan yang Diperbarui: 5.9998549 P/M 1.88E-05 Hz Kesalahan adalah -2.1 detik / hari
File recording.wav
harus menjadi file suara mono. Ponsel saya memiliki program "memo suara" yang merekam audio menggunakan mikrofon bawaan. Sangat sensitif untuk tujuan ini.
Dengan rekaman berkualitas baik, Anda akan melihat sesuatu seperti ini:
Panel atas menunjukkan 10 detik terakhir pada perekaman ... ini memungkinkan Anda mengevaluasi kualitas data Anda. Di sini, Anda dapat dengan jelas melihat kutu individu, dan bahwa jam tangan ini berdetak 6 kali per detik. Rasio sinyal-ke-noise mungkin 10 atau lebih dalam contoh ini.
Plot kiri bawah menunjukkan transformasi Fourier dari rekaman, diperbesar ke kisaran 0,5-10 Hz. Lonjakan dalam plot ini sesuai dengan frekuensi centang arloji. Hampir 6 kutu/per detik, di mana seharusnya ... tapi seberapa dekat?
Plot kanan bawah menunjukkan kecocokan ke puncak, yang digunakan untuk memperkirakan frekuensi presisi tinggi. Presisi ini dengan mudah cocok dengan stabilitas frekuensi jam tangan mekanis (yang sedikit bervariasi karena perbedaan suhu dan orientasi, antara lain).
Dengan perekaman berkualitas rendah (sangat), Anda akan melihat sesuatu seperti ini:
Di sini, kutu individu dimakamkan dalam kebisingan ... tetapi program masih memilihnya! Namun, Anda memerlukan rekaman yang lebih lama untuk mencapai tingkat presisi yang sama.
Saya telah menguji program menggunakan sinyal sintetis menghasilkan beberapa cara berbeda. Hasilnya dirangkum dalam plot di atas.
Ketidakpastian fraksional dalam skala pengukuran turun dengan panjang rekaman ke kekuatan (3/2). Itu juga tergantung pada kualitas pengukuran Anda. Jadi, sementara Anda ingin membuat rekaman sebaik mungkin, mungkin lebih mudah untuk menebus kualitas dengan kuantitas. Saya menemukan bahwa 5 menit data jelek adalah sekitar 30 detik data sempurna. Tetapi meninggalkan jam tangan dan telepon Anda sendirian di laci kaus kaki selama 5 menit jauh lebih mudah daripada keluar dan membeli mikrofon yang lebih baik. Jadi terserah Anda.
Jika data sangat buruk sehingga Anda bahkan tidak dapat mendengar kutu dalam rekaman, Anda mungkin dalam masalah. Coba lagi di tempat yang lebih tenang, atau temukan mikrofon yang lebih baik. (Dan, tentu saja, pastikan jam Anda benar -benar berdetak.)
Garis hitam putus -putus menunjukkan pengukuran jam tangan nyata. Saya ingin menyesuaikannya untuk berjalan dengan beberapa detik per hari dan menemukan rekaman 30 detik atau satu menit cukup untuk tugas tersebut. Anda mendorong bilah regulator, merekam sebentar, mendorong lagi, dan seterusnya sampai Anda mendapatkan jawaban yang Anda sukai. Saya membuatnya diatur dalam waktu sekitar 2 detik per hari, yang merupakan tujuan saya. Itu diterjemahkan menjadi kesalahan kurang dari seperseratus kutu selama rentang rekaman, yang cukup mengesankan, saya pikir!
Plot di atas menunjukkan tes menggunakan sinyal 'centang' sintetis yang dihasilkan menggunakan Audacity. Ini menunjukkan bahwa ketidakpastian yang dilaporkan oleh program ini adalah representasi yang cukup bermakna dari ketidakpastian yang benar, “1-σ”.
Kode ini cukup mudah, dan sebagian besar upaya dilakukan untuk membuatnya dapat diprediksi tanpa intervensi manusia. I Fourier mengubah sinyal input untuk mengukur frekuensi puncak. Sebelum berubah, saya menekan sinyal dengan jendela Gaussian ... Saya memilih bentuk jendela sehingga puncak frekuensi akan memiliki bentuk Gaussian dengan lebar ~ 3 frekuensi nampan. Ini bisa sesuai secara akurat dengan profil Gaussian, menghasilkan perkiraan yang baik dari frekuensi sebenarnya. Anda dapat melihat plot untuk mengetahui seberapa baik kerjanya.
Saya menggunakan fungsi licik untuk secara otomatis mengidentifikasi puncak, yang tampaknya bekerja dengan cukup baik.
Dan saya berusaha mengidentifikasi panjang "optimal" untuk FFT. Sejauh ini tidak ada masalah dengan itu.
Hasil tidak sensitif terhadap frekuensi pengambilan sampel, kecuali jika terlalu rendah untuk menyelesaikan suara jam 'berdetak' secara memadai. Tetapi program berjalan cukup cepat, jadi tidak ada alasan untuk tidak hanya menggunakan laju pengambilan sampel 44,1 kHz yang cukup standar.