นี่เป็นโปรแกรมขนาดเล็กที่วิเคราะห์การบันทึกนาฬิกาหรือนาฬิกาและบอกคุณว่ามันทำงานช้าหรือเร็วแค่ไหน คุณสามารถใช้สิ่งนี้เพื่อควบคุมนาฬิกาเชิงกลโดยใช้เช่นโทรศัพท์มือถือเพื่อบันทึกการฟ้อง
$ python fourier.py recording.wav เดาเริ่มต้น: 6.0 p/m 0.00606 Hz อัปเดตเดา: 5.9998549 P/M 1.88E-05 Hz ข้อผิดพลาดคือ -2.1 วินาที / วัน
recording.wav
ไฟล์. wav ควรเป็นไฟล์เสียงโมโน โทรศัพท์มือถือของฉันมีโปรแกรม“ บันทึกเสียง” ที่บันทึกเสียงโดยใช้ไมโครโฟนในตัว มันอ่อนไหวมากสำหรับจุดประสงค์นี้
ด้วยการบันทึกคุณภาพดีคุณจะเห็นอะไรแบบนี้:
แผงด้านบนแสดง 10 วินาทีสุดท้ายในการบันทึก ... ซึ่งจะช่วยให้คุณประเมินคุณภาพของข้อมูลของคุณ ที่นี่คุณสามารถเห็นเห็บแต่ละตัวได้อย่างชัดเจนและนาฬิกาเรือนนี้ทำเครื่องหมาย 6 ครั้งต่อวินาที อัตราส่วนสัญญาณต่อสัญญาณรบกวนน่าจะเป็น 10ish หรือมากกว่านั้นในตัวอย่างนี้
พล็อตด้านล่างซ้ายแสดงการแปลงฟูริเยร์ของการบันทึกซูมเข้าสู่ช่วง 0.5-10 Hz เข็มในพล็อตนี้สอดคล้องกับความถี่เห็บของนาฬิกา ใกล้กับ 6 เห็บ/ต่อวินาทีควรอยู่ที่ไหน… แต่ใกล้แค่ไหน?
พล็อตด้านล่างขวาแสดงให้เห็นถึงจุดสูงสุดที่ใช้ในการประเมินความถี่ให้มีความแม่นยำสูง ความแม่นยำนี้ตรงกับความเสถียรความถี่ของนาฬิกาเครื่องจักรกล (ซึ่งแตกต่างกันเล็กน้อยเนื่องจากความแตกต่างของอุณหภูมิและการวางแนวเหนือสิ่งอื่นใด)
ด้วยการบันทึกคุณภาพต่ำ (มาก) คุณจะเห็นอะไรแบบนี้:
ที่นี่เห็บแต่ละตัวถูกฝังอยู่ในเสียง ... แต่โปรแกรมยังคงเลือกออก! อย่างไรก็ตามคุณต้องมีการบันทึกที่ยาวขึ้นเพื่อให้ถึงความแม่นยำในระดับเดียวกัน
ฉันได้ทดสอบโปรแกรมโดยใช้สัญญาณสังเคราะห์ที่สร้างวิธีที่แตกต่างกันสองวิธี ผลลัพธ์จะสรุปไว้ในพล็อตด้านบน
ความไม่แน่นอนของเศษส่วนในเครื่องชั่งการวัดลดลงด้วยความยาวของการบันทึกไปยังพลังงาน (3/2) นอกจากนี้ยังขึ้นอยู่กับคุณภาพของการวัดของคุณ ดังนั้นในขณะที่คุณต้องการให้การบันทึกที่ดีที่สุดเท่าที่จะทำได้มันอาจจะง่ายกว่าที่จะชดเชยคุณภาพด้วยปริมาณ ฉันพบว่าข้อมูลเส็งเคร็ง 5 นาทีนั้นดีพอ ๆ กับข้อมูลที่สมบูรณ์แบบ 30 วินาที แต่การออกจากนาฬิกาและโทรศัพท์ของคุณอยู่คนเดียวในลิ้นชักถุงเท้าเป็นเวลา 5 นาทีนั้นง่ายกว่าการออกไปซื้อไมโครโฟนที่ดีกว่ามาก มันขึ้นอยู่กับคุณ
หากข้อมูลแย่มากจนคุณไม่สามารถแม้แต่จะได้ยินเห็บในการบันทึกคุณอาจมีปัญหา ลองอีกครั้งในที่ที่เงียบกว่าหรือหาไมโครโฟนที่ดีกว่า (และแน่นอนตรวจสอบให้แน่ใจว่านาฬิกาของคุณติ๊กจริง ๆ )
เส้นสีดำประแสดงการวัดนาฬิกาจริง ฉันต้องการปรับให้ทำงานด้วยไม่กี่วินาทีต่อวันและพบการบันทึก 30 วินาทีหรือหนึ่งนาทีก็เพียงพอสำหรับงาน คุณเขยิบแถบผู้ควบคุมบันทึกเป็นเวลาหนึ่งนาทีเขยิบอีกครั้งและอื่น ๆ จนกว่าคุณจะได้รับคำตอบที่คุณมีความสุข ฉันได้รับการควบคุมภายในประมาณ 2 วินาทีต่อวันซึ่งเป็นเป้าหมายของฉัน นั่นแปลว่าข้อผิดพลาดน้อยกว่าหนึ่งร้อยของเห็บในช่วงการบันทึกซึ่งค่อนข้างน่าประทับใจฉันคิดว่า!
พล็อตด้านบนแสดงการทดสอบโดยใช้สัญญาณ 'เห็บ' สังเคราะห์ที่สร้างขึ้นโดยใช้ความกล้า สิ่งนี้แสดงให้เห็นว่าความไม่แน่นอนที่รายงานโดยโปรแกรมเป็นตัวแทนที่มีความหมายค่อนข้างมากของความไม่แน่นอน“ 1-σ” ที่แท้จริง
รหัสนั้นค่อนข้างตรงไปตรงมาและความพยายามส่วนใหญ่ก็ทำให้มันทำงานได้อย่างคาดไม่ถึงโดยไม่มีการแทรกแซงของมนุษย์ ฉันฟูริเยร์แปลงสัญญาณอินพุตเพื่อวัดความถี่สูงสุด ก่อนที่จะเปลี่ยนฉันกดสัญญาณด้วยหน้าต่างเกาส์เซียน…ฉันเลือกรูปร่างของหน้าต่างเช่นยอดความถี่จะมีรูปร่างแบบเกาส์เซียนที่มีความกว้างของถังขยะความถี่ ~ 3 สิ่งนี้สามารถพอดีกับโปรไฟล์เกาส์เซียนซึ่งให้การประเมินที่ดีของความถี่ที่แท้จริง คุณสามารถดูแผนการเพื่อให้เข้าใจได้ว่ามันทำงานได้ดีแค่ไหน
ฉันใช้ฟังก์ชั่น Scipy เพื่อระบุยอดเขาโดยอัตโนมัติซึ่งดูเหมือนว่าจะทำงานได้ค่อนข้างดี
และฉันพยายามระบุความยาว "ที่เหมาะสม" สำหรับ FFT ไม่มีปัญหากับมันจนถึงตอนนี้
ผลลัพธ์ไม่ไวต่อความถี่ในการสุ่มตัวอย่างเว้นแต่ว่าจะต่ำเกินไปที่จะแก้ไขเสียง 'ติ๊ก' ของนาฬิกาได้อย่างเพียงพอ แต่โปรแกรมทำงานได้ค่อนข้างเร็วดังนั้นจึงไม่มีเหตุผลที่จะไม่ใช้อัตราการสุ่มตัวอย่าง 44.1 kHz ที่ค่อนข้างมาตรฐาน