Rilevazione del tono del piano


8

Sto lavorando a un programma di accordatura per pianoforte e parte di esso richiede il rilevamento del pitch in tempo reale. Ecco lo schema che ho finora che funziona in una certa misura ma probabilmente potrebbe usare un po 'di raffinatezza.

Sto catturando audio PCM mono, 44,1 kHz, 16 bit in blocchi di 2 ^ 14 campioni. Combino gli ultimi 4 campioni in un buffer di lunghezza 2 ^ 16, applico una finestra di Hann al buffer ed eseguo un FFT su di esso. Quindi, divido i risultati della FFT in due risoluzioni. Innanzitutto, eseguo il bucket in 200 bucket e quindi eseguo l'algoritmo di rilevamento del passo HPS con questa granularità. Non ho bisogno di ottenere una frequenza esatta qui, voglio solo avvicinarmi. Quindi, eseguo il bucket in 12000 bucket che mi offrono una risoluzione di 1 cent da 10Hz a 10kHz. Una volta che conosco una frequenza approssimativa dall'algoritmo HPS da 200 bin, cerco un picco per quella frequenza del caso bin 12000 per ottenere una frequenza più esatta.

Questo sembra funzionare bene per le note al centro della tastiera. Ciò che accade con le note basse è di circa 1,5 secondi di errata identificazione della nota come di solito la seconda o terza parziale della nota reale e quindi una corretta identificazione della nota.

In tutti i grafici spettrali che ho creato per vedere cosa sta succedendo, c'è più larghezza rispetto ai picchi che mi aspetterei. Questa larghezza è visivamente in qualche modo coerente dal contenitore da 200 a 12000. Mi sarei aspettato che i picchi si restringessero nel caso del contenitore 200.

Quindi, l'elaborazione del segnale è nuova per me, quindi potrebbero esserci problemi che non avrei mai pensato di porre, ma in termini di domande specifiche, le dimensioni del campione sono sufficienti per questo compito? Hann è la scelta giusta per la finestra? Devo lisciare anche i dati prima di FFT? Quanto è sensibile l'HPS al numero di bin? Pensavo che se avessi usato molti bin, allora l'inarmonicità non avrebbe potuto far sovrapporre i parziali ai loro fondamenti con il semplice approccio dell'algoritmo HPS di dividere per 2, 3, 4, ecc.


La trasformazione Q costante sarebbe di qualche utilità per questa applicazione? wellesley.edu/Physics/brown/pubs/cq1stPaper.pdf
Atul Ingle

Solo curioso: che tipo di dispositivo hardware usi per l'ingresso del segnale, un normale microfono?
anfibio,

Sto usando un microfono Samson CO1U.
DrTodd13,

Risposte:


6

Simile a questa discussione:

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

FFT non è un modo particolarmente efficiente di costruire un sintonizzatore. I metodi migliori (e meno costosi) includono l'auto-correlazione, i loop bloccati in fasi e i ritardi nei loop bloccati, ecc.

Un esempio è utilizzare il tracciamento di massimi e minimi locali per affinare all'incirca la frequenza fondamentale e quindi utilizzare un oscillatore locale e un circuito ad aggancio di fase per tracciare con precisione questa frequenza. Questo può tracciare un fondamentale mobile durante la sintonizzazione in modo rapido, continuo e con grande precisione anche se la frequenza è bassa e se il fondamentale è debole.


Bene, stavo usando FFT altrove nel programma per misurazioni di inarmonicità e calcoli di abbinamento parziale. Quindi, è stato più semplice per me riutilizzarlo anche per questo scopo. Non mi preoccupo troppo dei economici, ma se i loop bloccati graduali sono migliori, li controllerò. Dato che questa non è la mia area di competenza, l'implementazione di alcune di queste cose può sembrare impenetrabile.
DrTodd13

2

Una ricerca di "software di accordatura per pianoforte" o oggetti simili produrrà un gran numero di hit, alcuni buoni, altri non così buoni.

Ogni tipo di strumento musicale ha caratteristiche acustiche / fisiche / ambientali uniche che influiscono sul suo suono. E può complicarsi, come suggerirebbero migliaia di libri e articoli di ricerca (ad es. Tonalità, caratteristiche di attacco / decadimento, inarmonicità, ecc.).

Il rilevamento del passo è esso stesso un campo ad ampio raggio. Quanto segue è solo una piccola parte di ciò che è disponibile: panoramica articolo 1 e pila scambio post e panoramica articolo 2

Per quanto riguarda le vostre domande specifiche: 1) la dimensione del campione sembra eccessiva - a seconda del SNR e della stabilità della forma d'onda, è possibile ottenere una precisione ad alta frequenza usando altri metodi usando meno cicli. (alcuni metodi sono basati su FFT). E potresti catturare attacco / decadimento con un lungo tempo di campionamento, 2) qualsiasi finestra diversa da rettangolare amplierà la larghezza del raggio nel dominio della frequenza, ma ciò non significa che non dovresti usarne uno - Hann sembra comune con HPS , da quello che ho visto, 3) come notato nel primo link sopra, HPS non funziona molto bene a bassa frequenza e l'inarmonicità ti influenzerà sulle corde inferiori. Per quanto riguarda il tuo metodo generale, senza dover scrivere molte pagine, posso solo dire che lo farei diversamente, a seconda della gamma di frequenza e delle armoniche di cui mi occupavo.


Alcune delle varianti di cepstrum sembrano interessanti da provare, quindi inizierò con quello. Forse dovrei scartare la parte dei campioni che corrisponde all'attacco / colpo di martello. Qualcuno capisce quanto tempo impiega la nota a raggiungere uno stato un po 'stabile o esiste un modo per caratterizzare lo stato iniziale in modo da poterlo filtrare?
DrTodd13,

Le informazioni sono disponibili, ma può essere difficile da trovare - guarda, ad esempio, questa discussione dal forum "piano world" sulle caratteristiche di "attacco": pianoworld.com/forum/ubbthreads.php/topics/1125286/What% 20is
Kevin McGee,

2

Un'altra risposta suggerisce PLL. Penso che dovresti stare lontano da PLL: la maggior parte della letteratura sul tracciamento del pitch si concentra sull'auto-correlazione (ricerca di "YIN Pitch Tracking" - YIN è un moderno algoritmo di tracciamento del pitch basato sull'auto-correlazione) e FFT. Credo che PLL sia più adatto a tracciare piccole fluttuazioni di frequenza, come con la radio.

L'auto-correlazione è un buon punto di partenza. È veloce, efficiente e preciso. Tuttavia, ci sono trucchi per rendere la FFT molto accurata e veloce (la maggior parte delle tecniche che usano la FFT guardano semplicemente la grandezza, ma puoi anche usare le informazioni sulla fase), quindi se hai familiarità con le FFT puoi usare anche quella tecnica.

Se si utilizza una di queste tecniche, suggerisco di pre-filtrare con un passa basso per ridurre le armoniche e concentrarsi sul fondamentale. Con FFT, invece, puoi, o in aggiunta, usare trucchi come guardare il primo massimo locale.

Questo potrebbe essere un buon punto di partenza per il filtraggio e così via. Ti fornirà anche alcuni suggerimenti su come evitare di fare troppo lavoro e si collega al codice sorgente: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

Questo libro contiene sezioni che spiegano sia YIN che FFT utilizzando le informazioni sulla fase: http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0470665998

Infine, dovrai capire le specifiche dei pianoforti. Non sono sicuro se l'accordatore stesso debba fare qualcosa di speciale WRT, ad es. Accordatura allungata, o se ciò è lasciato alla persona che accorda il piano, ma dovrai almeno capire quella roba. Un altro poster ha suggerito di guardare le armoniche stonate, ma il problema principale è quello di identificare e mettere a punto il fondamentale, quindi le armoniche stonate non dovrebbero importare fintanto che identifichi correttamente il fondamentale.


Bella informazione, grazie! Ciò che mi ha interessato è stato un documento chiamato "Accordatura di strumenti musicali basata sull'entropia". Usa una misura di entropia per calcolare un'accordatura per un determinato piano basata sulle inarmoniche specificità del piano. Stavo cercando di duplicare prima i risultati dal documento e poi andare da lì. Una volta / se ciò ha esito positivo, posso usare ciò che questo post sta per sintonizzare il piano sull'accordatura calcolata. Quando parli dell'utilizzo della fase FFT, è un output che è in genere scartato che potrei usare o qualcosa di interno? Sto usando il pacchetto FFT di qualcun altro.
DrTodd13,

Non ho familiarità con queste tecniche (sembra interessante però). Vorrei iniziare con le tecniche standard prima di passare a quel dominio. Anche se sceglierei una tecnica standard che assomigli di più alla tecnica avanzata che vuoi emulare.
Bjorn Roche,

Le uscite FFT sono generalmente in parti reali e immaginarie. Puoi tradurlo in grandezza e fase nel solito modo (reale + immaginario e mag e fase sono entrambe rappresentazioni valide di numeri complessi). Come usarlo per il tracciamento del pitch è sottile: dovrai leggere il libro DAFX per i deets.
Bjorn Roche,

2

Le ampie cime che vedi possono essere il risultato di fenomeni fisici, non di un artefatto di elaborazione del segnale. In generale, i picchi stretti in un risultato FFT rappresentano una sinusoide non modulata esattamente periodica nella finestra nel dominio del tempo. Ma le vibrazioni delle corde del piano non sono così stazionarie. Si evolvono nel tempo, creando una modulazione evidente.

Numerosi effetti: più stringhe di piano per nota scambieranno energia attraverso la tavola armonica; l'energia di vibrazione totale decadrà nel tempo; le modalità di vibrazione possono essere leggermente inarmoniche all'inizio; l'esatta frequenza di vibrazione di ciascuna modalità (armonica) può variare con il decadimento dell'ampiezza a causa della rigidità e del diametro della stringa diversi da zero; e ciascuna armonica può decadere ad una velocità diversa, ecc.

Potrebbe essere necessario decidere quale di queste molteplici modulazioni si desidera chiamare "il tono" (i libri di audiologia possono aiutare) e trovare un metodo per rintracciarlo meglio all'interno del "picco ampio" della FFT.


1

Con le note più basse dei pianoforti, specialmente per i montanti, lo spettro tende ad essere allungato (la distanza tra la fondamentale e la prima sfumatura è un po 'più di un'ottava, ecc.). Questo è ciò che dà ai pianoforti il ​​loro suono percussivo, la nota più bassa sui montanti più vecchi spesso suonerà più come un tonfo che una nota, e come ho capito questo è il motivo per cui i montanti cheep hanno il loro particolare suono tonky a percussione. A causa di questi buoni accordatori di pianoforti (le persone non algoritmi) accorderanno i pianoforti con i toni più bassi rispetto a quelli fondamentali per le note più basse, l'orecchio umano tende a concentrarsi sull'interazione dei toni più bassi per queste note. L'allungamento delle serie armoniche potrebbe anche essere la causa dei picchi più ampi del previsto nello spettro.


Bene, l'inarmonicità non equivale alla variabilità. L'inarmonicità farebbe sì che il picco si trovasse in un punto diverso, ma non vedo perché lo allargerebbe. Forse l'ampiezza del picco è dovuta alla varianza intrinseca del segnale nel tempo e quindi accorciare il periodo di campionamento ridurrebbe la varianza?
DrTodd13
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.