Este é um pequeno programa que analisa uma gravação de um relógio ou relógio e informa o quão lento ou rápido ele é executado. Você pode usar isso para regular um relógio mecânico usando, por exemplo, um telefone celular para gravar seu ticking.
$ python fourier.py gravação.wav Presidente inicial: 6,0 p/m 0,00606 Hz Pensamento atualizado: 5.9998549 p/m 1,88e-05 Hz O erro é -2,1 segundos / dia
O arquivo recording.wav
deve ser um arquivo de som mono. Meu telefone celular possui um programa "Voice Memo" que registra áudio usando o microfone embutido. É bastante sensível para esse fim.
Com uma gravação de boa qualidade, você verá algo assim:
O painel superior mostra os últimos 10 segundos na gravação ... Isso permite avaliar a qualidade dos seus dados. Aqui, você pode ver claramente os carrapatos individuais e que este relógio toca 6 vezes por segundo. A relação sinal / ruído é provavelmente 10h ou mais neste exemplo.
O gráfico inferior esquerdo mostra a transformação de Fourier da gravação, ampliada na faixa de 0,5-10 Hz. O pico nesse enredo corresponde à frequência do tique -taque do relógio. É perto de 6 ticks/por segundo, onde deveria estar ... mas quão perto?
O gráfico inferior direito mostra um ajuste ao pico, usado para estimar a frequência em alta precisão. Essa precisão corresponde facilmente à estabilidade da frequência de um relógio mecânico (que varia ligeiramente devido a diferenças de temperatura e orientação, entre outras coisas).
Com uma gravação (muito) de baixa qualidade, você verá algo assim:
Aqui, os carrapatos individuais estão enterrados no barulho ... mas o programa ainda os escolhe! Você precisa de uma gravação mais longa para atingir o mesmo nível de precisão, no entanto.
Eu testei o programa usando sinais sintéticos gerou algumas maneiras diferentes. Os resultados estão resumidos no gráfico acima.
A incerteza fracionária nas escalas de medição cai com o comprimento da gravação à potência (3/2). Também depende da qualidade da sua medição. Portanto, embora você queira fazer uma gravação o mais boa possível, pode ser mais fácil compensar a qualidade com a quantidade. Acho que 5 minutos de dados ruins são tão bons quanto 30 segundos de dados perfeitos. Mas deixar seu relógio e telefone sozinho em uma gaveta de meia por 5 minutos é muito mais fácil do que sair e comprar um microfone melhor. Então depende de você.
Se os dados forem tão ruins que você nem consegue ouvir carrapatos na gravação, pode estar com problemas. Tente novamente em um local mais tranquilo ou encontre um microfone melhor. (E, é claro, verifique se o seu relógio realmente marque.)
A linha preta pontilhada mostra medições de um relógio real. Eu queria ajustá -lo para correr com alguns segundos por dia e encontrei uma gravação de 30 segundos ou um minuto era adequada para a tarefa. Você cutuca a barra do regulador, grava por um minuto, cutuça novamente e assim por diante até obter uma resposta com a qual está satisfeito. Eu o regulou em cerca de 2 segundos por dia, que era meu objetivo. Isso se traduz em um erro inferior a um centésimo de um carrapato ao longo da gravação, o que é bastante impressionante, eu acho!
O gráfico acima mostra um teste usando um sinal 'tick' sintético gerado usando o Audacity. Isso mostra que a incerteza relatada pelo programa é uma representação bastante significativa da verdadeira incerteza "1-σ".
O código é bem direto, e a maior parte do esforço foi feita para fazê -lo correr previsivelmente sem nenhuma intervenção humana. I Fourier Transforme o sinal de entrada para medir a frequência de pico. Antes de transformar, pressiono o sinal com uma janela gaussiana ... escolho a forma da janela de modo que os picos de frequência tenham uma forma gaussiana com uma largura de ~ 3 caixas de frequência. Isso pode ser adequado com precisão com um perfil gaussiano, produzindo uma boa estimativa da verdadeira frequência. Você pode olhar para as parcelas para ter uma noção de quão bem está funcionando.
Eu uso uma função círculo para identificar automaticamente os picos, o que parece funcionar muito bem.
E tento identificar um comprimento "ideal" para a FFT. Não há problemas com isso até agora.
Os resultados não são sensíveis à frequência de amostragem, a menos que seja muito baixo para resolver adequadamente o som do relógio 'tique -taque'. Mas o programa funciona muito rápido, portanto, não há razão para não usar apenas a taxa de amostragem de 44,1 kHz que é bastante padrão.