Existe um algoritmo para encontrar uma frequência sem DFT ou FFT?

34

Eu estava procurando na loja de aplicativos Android um afinador de violão. Encontrei um aplicativo de sintonizador que alegava ser mais rápido que outros aplicativos. Alegou que poderia encontrar a frequência sem usar o DFT (eu gostaria de ainda ter o URL dessa especificação).

Eu nunca ouvi falar disso. Você pode adquirir um sinal de áudio e calcular a frequência sem usar o algoritmo DFT ou FFT?

Slamice
fonte

Respostas:

29

FFT não é realmente uma ótima maneira de fazer um sintonizador. A FFT possui inerentemente uma resolução de frequência finita e não é fácil detectar alterações de frequência muito pequenas sem tornar a janela de tempo extremamente longa, o que a torna pesada e lenta.

Melhores soluções podem basear-se em anéis de bloqueio de fase , anéis de bloqueio de atraso , a correlação automática, de detecção de passagem por zero e de rastreio, detecção máximo ou mínimo e de seguimento e combinação certamente inteligente destes métodos.

O pré-processamento sempre ajuda.

Hilmar
fonte
5
Se um FFT pode detectar pequenas alterações de frequência não é inerente ao seu comprimento, mas depende da relação sinal / ruído. Dado ruído e interferência suficientemente baixos, a interpolação dos resultados da FFT pode facilmente produzir uma resolução de frequência única na sub-caixa.
precisa saber é o seguinte
Alguém pode me ajudar com isso: - stackoverflow.com/questions/42359344/…
dreamBegin
12

Uma FFT relata os picos ou picos de frequência do espectro (quantizados pelo tamanho do compartimento da FFT), que é diferente do tom musical. É possível que a frequência de afinação percebida esteja completamente ausente de um espectro de FFT.

Alguns dos afinadores de guitarra mais simples usavam filtro passa-baixo ou passa-banda e mediam o tempo entre cruzamentos de zero. O recíproco fornece uma estimativa de frequência.

A autocorrelação é outro método comum de estimativa de afinação; e correlação deslizante ou outras medidas de auto-similaridade têm muitas variações, como ASDF deslizante (diferença ao quadrado), AMDF (diferença média), correspondências de padrões não lineares, verificação adaptativa apenas para uma faixa limitada de defasagens, interpolação de defasagem, janelas e seleção de janela adaptável, várias ponderações ou uso da teoria da decisão para selecionar entre várias sequências potenciais de histórico de atraso e etc. Um problema com a maioria das medidas de auto-similaridade é escolher a oitava apropriada, pois uma sub-oitava pode mostrar quase a mesma semelhança.

Outras possibilidades incluem o uso de PLLs, demoduladores de quadratura filtrados, transformações de Hilbert filtradas e etc.

Mas observe que alguns métodos de filtragem e desmodulação do DSP são computacionalmente equivalentes a fazer 1 bin de uma DFT com janela, que pode ou não ser a resposta para sua pergunta.

hotpaw2
fonte
8

A detecção de pitch pode ser feita de várias formas versáteis e curiosas. Uma maneira de fazer isso é usando a autocorrelação . Este artigo fornece um exemplo de como pode ser usado. A autocorrelação pode ser ridiculamente simples usando um correlador de 1 bit (não foi possível encontrar nenhum documento decente sobre isso por algum motivo). Então, teoricamente, o pitch pode ser detectado mais rapidamente do que com a FFT, mas duvido que seja muito mais preciso sem um pré-processamento realmente inteligente.

Phonon
fonte
Eu acho que o link está quebrado? ...
Spacey
Não, tudo funciona. Acabei de verificar.
Phonon
7

Veja também a relativamente nova transformação Hilbert-Huang (HHT), definida por algoritmo . Ele pode lidar com sinais não estacionários e não lineares que podem ser relevantes para a sua aplicação.

Nordlöw
fonte
Esta foi uma jóia quando a encontrei, embora não apresente a decomposição de fourier, mas a decomposição instantânea de frequência.
Spacey
A maioria dos sinais da vida real é um tanto não-estacionária, ou seja, eles variam um pouco em amplitude e frequência. O HHT é menos sensível a essas variações e, assim, decompõe esses sinais de uma maneira mais natural, onde as partes estão mais intimamente relacionadas aos fenômenos físicos subjacentes.
Nordlöw 11/03/2013
3

Se você souber exatamente qual compartimento de frequência está procurando em uma DFT / FFT, poderá usar o algoritmo Goertzel para obter apenas o valor desse compartimento.

http://en.wikipedia.org/wiki/Goertzel_algorithm

Ashutosh
fonte
1
Isso não é para encontrar uma frequência, no entanto.
endolith 4/02/12
2

Você pode realmente calcular a frequência de um sinal usando seu pseudo-espectro, que analisa os autovetores de sua matriz de autocorrelação. Basicamente, decompõe seu sinal em ruído e subespaços de sinal. A partir daí, você pode encontrar seu espectro. (Você também pode limitá-lo e fornecer um intervalo de frequências para verificar). Também é bastante imune ao ruído. Obviamente, esse é um método paramétrico, e não paramétrico, como o DFT.

Spacey
fonte
Aparentemente, isso usa o FFT embora? mathworks.com/help/toolbox/signal/ref/peig.html
endolith
1
@ endolith Você pode calcular sem FFTs envolvidos. Na matriz de correlação, você obtém os vetores próprios e o subespaço de ruído. Em seguida, você pode construir seu próprio vetor de frequência para projetar, para que nenhum FFT seja usado.
Spacey
1

Tudo depende de qual plataforma você deseja processá-lo; se você precisar de um circuito simples, sugiro que apareça o sinal com ganho, transforme-o em uma onda quadrada e meça o período com um microcontrolador usando o timer.

Mas se você quiser se divertir com o processamento de sinais, confira o método MUSIC:

http://en.wikipedia.org/wiki/Multiple_signal_classification

Espero que ajude

osso
fonte
0

Existem muitos métodos de estimativa de afinação sem o uso de DFT / FFT, alguns deles incluindo o método MUSIC estão listados neste documento: https://ieeexplore.ieee.org/abstract/document/6521410/ Os resultados da simulação neste documento indicam que quando a frequência fundamental é muito baixa, o método NLS exato supera outros dentre os listados.

Bizhou Ge
fonte