Esiste un algoritmo per trovare una frequenza senza DFT o FFT?


34

Stavo cercando nell'app store Android un accordatore per chitarra. Ho trovato un'app sintonizzatore che affermava che era più veloce di altre app. Ha affermato di poter trovare la frequenza senza usare il DFT (vorrei avere ancora l'URL di questa specifica).

Non ne ho mai sentito parlare. È possibile acquisire un segnale audio e calcolare la frequenza senza utilizzare l'algoritmo DFT o FFT?

Risposte:


29

FFT non è in realtà un ottimo modo per creare un sintonizzatore. FFT ha intrinsecamente una risoluzione di frequenza finita e non è facile rilevare variazioni di frequenza molto piccole senza rendere la finestra temporale estremamente lunga che la rende ingombrante e lenta.

Soluzioni migliori possono essere basate su loop ad aggancio di fase , cicli di ritardo ad aggancio , correlazione automatica, rilevamento zero crossing e di monitoraggio, rilevamento max o min e monitoraggio e combinazione certamente intelligente di questi metodi.

La pre-elaborazione aiuta sempre.


5
Il fatto che un FFT sia in grado di rilevare piccole variazioni di frequenza non è inerente alla sua lunghezza, ma dipende dal rapporto segnale-rumore. Dato il rumore e l'interferenza sufficientemente bassi, l'interpolazione dei risultati FFT può facilmente produrre una risoluzione a frequenza singola sotto-bin.
hotpaw2,

Qualcuno può aiutarmi a uscire con questo: - stackoverflow.com/questions/42359344/...
dreamBegin

12

Un FFT riporta picchi o picchi di frequenza dello spettro (quantizzati in base alla dimensione del contenitore FFT), che è diverso dal tono musicale. È possibile che la frequenza di intonazione percepita sia completamente mancante da uno spettro FFT.

Alcuni dei più semplici sintonizzatori di chitarra hanno appena utilizzato il filtro passa-basso o passa-banda e hanno misurato il tempo tra zero-incroci. Il reciproco fornisce una stima della frequenza.

L'autocorrelazione è un altro metodo di stima dell'intonazione comune; e la correlazione scorrevole o altre misure di auto-somiglianza hanno molte varianti, come scorrevole ASDF (differenza quadrata), AMDF (differenza media), pattern matcher non lineari, controllo adattivo solo per un intervallo limitato di ritardi, interpolazione di ritardo, finestre e selezione adattiva della finestra, varie ponderazioni o utilizzo della teoria delle decisioni per selezionare tra molteplici sequenze di storia del ritardo potenziale, ecc.

Altre possibilità includono l'uso di PLL, demodulatori di quadratura filtrati, trasformazioni di Hilbert filtrate, ecc.

Ma nota che alcuni metodi di filtro e demodulazione DSP sono quasi equivalenti dal punto di vista computazionale al fare 1-bin di un DFT con finestre, che può o meno adattarsi come risposta alla tua domanda.


8

Il rilevamento del passo può essere effettuato in molti modi versatili e curiosi. Un modo per farlo è utilizzare l' autocorrelazione . Questo documento fornisce un esempio di come può essere utilizzato. L'autocorrelazione può essere resa ridicolmente semplice utilizzando un correlatore a 1 bit (per qualche motivo non è stato possibile trovare documenti decenti su questo). Quindi, in teoria, il tono può essere rilevato più velocemente rispetto a FFT, ma dubito che sarà molto più preciso senza una pre-elaborazione davvero intelligente.


Penso che il collegamento sia interrotto? ...
Spacey,

No, tutto funziona. L'ho appena controllato.
Phonon,

7

Dai un'occhiata anche alla relativamente nuova trasformazione algoritmicamente definita di Hilbert-Huang (HHT). Può gestire segnali non stazionari e non lineari che possono essere rilevanti per la tua applicazione.


Questo è stato un vero gioiello quando l'ho trovato, anche se non ti dà la decomposizione di Fourier, ma piuttosto la decomposizione di frequenza istantanea .
Spacey,

La maggior parte dei segnali della vita reale sono in qualche modo non stazionari, cioè variano leggermente in ampiezza e frequenza. L'HHT è meno sensibile a queste variazioni e quindi scompone tali segnali in un modo più naturale, in cui le parti sono più strettamente correlate ai fenomeni fisici sottostanti.
Nordlöw,



2

Puoi effettivamente calcolare la frequenza di un segnale usando il suo pseudo-spettro, che osserva gli autovettori della sua matrice di autocorrelazione. Fondamentalmente decompone il segnale in rumore e sottospazi di segnale. Da lì, puoi trovare il suo spettro. (Puoi anche limitarlo e dargli una gamma di frequenze da controllare). È anche abbastanza immune al rumore. Naturalmente, questo è un metodo parametrico, non unparametrico come DFT.


Apparentemente questo usa la FFT però? mathworks.com/help/toolbox/signal/ref/peig.html
endolith

1
@endolith Puoi calcolarlo senza FFT coinvolti. Dalla matrice di correlazione, si ottengono gli autovettori e quindi il sottospazio di rumore. Quindi puoi costruire il tuo vettore di frequenza su cui proiettare, quindi non usare FFT.
Spacey,

1

Dipende tutto da quale piattaforma vuoi elaborarlo, se hai bisogno di un semplice circuito, suggerisco di eliminare il segnale con guadagno e trasformarlo in un'onda quadra e misurare il periodo con un microcontrollore usando il timer.

Ma se vuoi divertirti con l'elaborazione del segnale, controlla il metodo MUSIC:

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

Spero che sia d'aiuto


0

Esistono molti metodi di stima dell'intonazione senza utilizzare DFT / FFT, alcuni di essi, incluso il metodo MUSIC, sono elencati in questo documento: https://ieeexplore.ieee.org/abstract/document/6521410/ I risultati della simulazione in questo documento indicano che quando la frequenza fondamentale è molto bassa, il metodo NLS esatto supera gli altri tra quelli elencati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.