这是一个小程序,可以分析手表或时钟的录制,并告诉您它运行的速度或快速。您可以使用它来调节使用机械手表,例如手机来记录其滴答作响。
$ 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的采样率。