이 프로그램은 시계 나 시계의 녹음을 분석하고 얼마나 느리거나 빠르게 실행되는지 알려주는 작은 프로그램입니다. 이를 사용하여 똑딱 거리는 휴대 전화를 사용하여 기계식 시계를 조절할 수 있습니다.
$ 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-10Hz 범위로 확대 한 것으로 나타났습니다. 이 플롯의 스파이크는 시계의 진드기 주파수에 해당합니다. 그것은 6 개의 진드기에 가깝습니다. 초당은 어디에 있어야합니다.
하단 오른쪽 플롯은 주파수를 높은 정밀도로 추정하는 데 사용되는 피크에 맞는 것을 보여줍니다. 이 정밀도는 기계식 시계의 주파수 안정성과 쉽게 일치합니다 (무엇보다도 온도와 방향의 차이로 인해 약간 다름).
(매우) 품질이 낮은 레코딩을 사용하면 다음과 같은 것을 볼 수 있습니다.
여기서 개별 진드기는 소음에 묻혀 있습니다. 그러나 프로그램은 여전히 그들을 선택합니다! 그러나 동일한 수준의 정밀도에 도달하려면 더 긴 녹음이 필요합니다.
합성 신호를 사용하여 몇 가지 다른 방법을 생성하여 프로그램을 테스트했습니다. 결과는 위의 플롯에 요약되어 있습니다.
측정 척도의 분수 불확실성은 기록의 길이 (3/2) 전력으로 떨어집니다. 또한 측정의 품질에 따라 다릅니다. 따라서 최대한 녹음을 잘 만들고 싶지만 수량으로 품질을 보충하는 것이 더 쉬울 수 있습니다. 5 분의 엉뚱한 데이터는 30 초의 완벽한 데이터만큼 우수하다는 것을 알았습니다. 그러나 시계와 전화를 양말 서랍에 5 분 동안 홀로 남겨 두는 것이 외출하고 더 나은 마이크를 구입하는 것보다 훨씬 쉽습니다. 그래서 그것은 당신에게 달려 있습니다.
데이터가 너무 나빠서 녹음에서 진드기를들을 수 없다면 문제가 발생할 수 있습니다. 더 조용한 장소에서 다시 시도하거나 더 나은 마이크를 찾으십시오. (물론 시계가 실제로 진드기를 확인하십시오.)
점선 검은 선은 실제 시계의 측정을 보여줍니다. 하루에 몇 초 만에 실행되도록 조정하고 싶었고 30 초 또는 1 분의 녹음이 작업에 적합하다는 것을 알았습니다. 당신은 레귤레이터 막대를 깎고, 1 분 동안 기록하고, 다시 한 번, 당신이 만족하는 대답을 얻을 때까지. 나는 하루에 약 2 초 이내에 규제를 받았다. 이것이 나의 목표였다. 그것은 녹음 범위에 걸쳐 100 분의 1 미만의 진드기를 해석합니다. 이는 매우 인상적이라고 생각합니다!
위의 플롯은 Audacity를 사용하여 생성 된 합성 '진드기'신호를 사용한 테스트를 보여줍니다. 이것은 프로그램에 의해보고 된 불확실성이 진정한“1-거”불확실성을 의미있는 표현임을 보여줍니다.
이 강령은 매우 간단하며 대부분의 노력은 인간의 개입없이 예측할 수있게 만들었습니다. 푸리에는 입력 신호를 변환하여 피크 주파수를 측정합니다. 변형하기 전에 가우시안 창으로 신호를 쳤다. 나는 주파수 피크가 ~ 3 주파수 빈의 가우스 모양을 갖도록 창의 모양을 선택한다. 이것은 가우스 프로파일에 정확하게 맞을 수 있으며, 실제 주파수에 대한 좋은 추정치를 산출합니다. 음모를보고 얼마나 잘 작동하는지 알 수 있습니다.
나는 scipy 함수를 사용하여 피크를 자동으로 식별하는데, 이는 꽤 잘 작동하는 것 같습니다.
그리고 FFT의 "최적"길이를 식별하려고합니다. 지금까지 문제가 없습니다.
시계의 '진드기'사운드를 적절하게 해결하기에는 너무 낮지 않는 한 결과는 샘플링 주파수에 민감하지 않습니다. 그러나이 프로그램은 매우 빠르게 진행되므로 44.1 kHz 샘플링 속도 만 사용하지 않을 이유가 없습니다.