Detecção de afinação de piano

8

Estou trabalhando em um programa de afinação de piano e parte dele requer detecção de afinação em tempo real. Aqui está o esquema que tenho até agora, que funciona até certo ponto, mas provavelmente poderia usar algum refinamento.

Estou capturando áudio PCM mono, 44,1kHz, 16 bits em pedaços de 2 ^ 14 amostras. Combino as 4 últimas amostras em um buffer de 2 ^ 16 comprimentos, aplico uma janela Hann ao buffer e execute uma FFT nele. Depois, agrupo os resultados da FFT em duas resoluções. Primeiro, agrupo em 200 buckets e, em seguida, corro o algoritmo de detecção de pitch HPS nessa granularidade. Não preciso ter uma frequência exata aqui, só quero chegar perto. Então, eu faço o bucket em 12000 buckets, o que me dá 1 centavo de resolução de 10Hz a 10kHz. Depois que conheço uma frequência aproximada do algoritmo HPS de 200 bin, procuro um pico no intervalo da caixa de 12000 bin para obter uma frequência mais exata.

Isso parece funcionar bem para as notas no meio do teclado. O que acontece com as notas baixas é de cerca de 1,5s de identificação incorreta da nota, como geralmente a 2ª ou a 3ª parcial da nota real e, em seguida, uma identificação correta da nota.

Em todas as parcelas espectrais que criei para ver o que está acontecendo, há mais largura nos picos que eu esperaria. Essa largura é visualmente um tanto consistente da caixa de 200 a 12000 caixas. Eu esperava que os picos fossem mais estreitos no estojo de 200 caixas.

Portanto, o processamento de sinal é novo para mim; portanto, pode haver problemas que eu não gostaria de perguntar, mas em termos de perguntas específicas, os tamanhos das amostras são suficientes para esta tarefa? Hann é a escolha certa da janela? Devo suavizar os dados também antes da FFT? Qual é a sensibilidade do HPS ao número de compartimentos? Eu estava pensando que, se eu usasse muitas caixas, a desarmonicidade talvez não fizesse as partes parciais se sobreporem aos seus fundamentos com a abordagem simples do algoritmo HPS de dividir por 2, 3, 4, etc.

DrTodd13
fonte
A transformação Q constante seria de alguma utilidade para este aplicativo? wellesley.edu/Physics/brown/pubs/cq1stPaper.pdf
Atul Ingle
Apenas curioso: que tipo de dispositivo de hardware você usa para captar sinais, um microfone comum?
amphibient
Estou usando um microfone Samson CO1U.
DrTodd13

Respostas:

6

Semelhante a este tópico:

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

A FFT não é uma maneira particularmente eficiente de criar um sintonizador. Métodos melhores (e mais baratos) incluem correlação automática, loops bloqueados em fases e loops bloqueados por atraso, etc.

Um exemplo é usar o rastreamento de máximos e mínimos locais para aprimorar a freqüência fundamental e, em seguida, usar um oscilador local e um loop de fase para rastrear essa frequência com precisão. Isso pode rastrear um elemento fundamental em movimento durante o ajuste de forma rápida, contínua e com grande precisão, mesmo se a frequência for baixa e se o fundamental for fraco.

Hilmar
fonte
Bem, eu estava usando a FFT em outro lugar do programa para medições de desarmonicidade e cálculos parciais parciais. Portanto, foi mais fácil reutilizá-lo para esse fim também. Eu não estou muito preocupado com barato, mas se loops bloqueados faseados forem melhores, eu os verificarei. Dado que essa não é minha área de especialização, a implementação de algumas dessas coisas pode parecer inpenetrável.
DrTodd13
2

Uma pesquisa por 'software de afinação de piano' ou itens semelhantes produzirá um grande número de hits - alguns bons, outros não tão bons.

Todo tipo de instrumento musical possui características acústicas / físicas / ambientais únicas que afetam seu som. E isso pode ficar complicado, como sugerem milhares de livros e trabalhos de pesquisa (por exemplo: tonalidade, características de ataque / decaimento, desarmonicidade, etc.).

A detecção de pitch é, por si só, um campo abrangente. O seguinte é apenas uma pequena fração do que está disponível: artigo de visão geral 1 e de câmbio pilha pós e artigo de visão geral 2

Quanto às suas perguntas específicas: 1) o tamanho da amostra parece um exagero - dependendo do SNR e da estabilidade da forma de onda, você pode obter precisão de alta frequência usando outros métodos usando menos ciclos. (alguns métodos são baseados na FFT). E você pode capturar ataques / decaimentos com um longo tempo de amostragem, 2) qualquer janela que não seja retangular aumentará a largura do feixe no domínio da frequência, mas isso não significa que você não deve usar um - Hann parece comum com o HPS , pelo que vi, 3) conforme observado no primeiro link acima, o HPS não funciona muito bem em baixa frequência e a desarmonicidade o afetará nas cordas mais baixas. Quanto ao seu método geral, sem ter que escrever muitas páginas, só posso dizer que o faria de maneira diferente, dependendo da faixa de frequência e dos harmônicos com os quais estava lidando.

Kevin McGee
fonte
Algumas variantes do cepstrum parecem interessantes para tentar, então vou começar com isso. Talvez eu deva descartar a parte das amostras que corresponde ao "ataque" / golpe do martelo. Alguém sabe quanto tempo leva para que a nota atinja um estado um tanto estável ou existe uma maneira de caracterizar o estado inicial para que eu possa filtrá-lo?
DrTodd13
As informações estão disponíveis, mas pode ser difícil encontrá-las - veja, por exemplo, este tópico do fórum 'world piano' sobre as características 'attack': pianoworld.com/forum/ubbthreads.php/topics/1125286/What% 20is
Kevin McGee
2

Outra resposta sugere PLL. Eu acho que você deve ficar longe da PLL: a maioria da literatura sobre rastreamento de afinação se concentra na correlação automática (procure por "Rastreamento de afinação YIN" - YIN é um algoritmo moderno de rastreamento de afinação baseado na correlação automática) e FFT. Eu acredito PLL é mais adequado para rastreamento de pequenas flutuações na freqüência, como com rádio.

A correlação automática é um bom lugar para começar. É rápido, eficiente e preciso. No entanto, existem truques para tornar a FFT muito precisa e rápida (a maioria das técnicas que usam a FFT apenas analisa a magnitude, mas você também pode usar as informações de fase); portanto, se você estiver familiarizado com as FFTs, também poderá usar essa técnica.

Se você usar alguma dessas técnicas, sugiro pré-filtragem com uma passagem baixa para reduzir harmônicos e focar no fundamental. Com a FFT, você pode, em vez disso, ou além disso, usar truques como analisar o primeiro máximo local.

Esse pode ser um bom ponto de partida para a filtragem e assim por diante. Também fornecerá algumas dicas sobre como evitar muito trabalho, além de links para o código-fonte: http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

Este livro possui seções que explicam o YIN e o FFT usando informações de fase: http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0470665998

Finalmente, você terá que entender as especificidades dos pianos. Não tenho certeza se o próprio afinador precisa fazer algo WRT especial, por exemplo, afinação esticada, ou se isso depende da pessoa que afina o piano, mas você precisará entender pelo menos essas coisas. Outro pôster sugeriu a observação de harmônicos desafinados, mas a questão principal é identificar e afinar o fundamental, para que os harmônicos desafinados não sejam importantes, desde que você os identifique adequadamente.

Bjorn Roche
fonte
Boa informação, obrigado! O que me interessou foi um artigo chamado "Ajuste de instrumentos musicais baseado em entropia". Ele usa uma medida de entropia para calcular uma afinação para um determinado piano, com base nas inarmonicidades específicas do piano. Eu estava tentando primeiro duplicar os resultados do papel e depois partir daí. Uma vez / se for bem-sucedido, eu posso usar o que esta postagem está prestes a afinar o piano para a afinação computada. Quando você fala sobre o uso da fase FFT, é uma saída geralmente descartada que eu poderia usar ou algo interno? Estou usando o pacote FFT de outra pessoa.
DrTodd13
Não estou familiarizado com essas técnicas (embora pareça interessante). Eu começaria com técnicas padrão antes de passar para esse domínio. Embora eu escolha uma técnica padrão que mais se pareça com a técnica avançada que você deseja emular.
Bjorn Roche
As saídas FFT são geralmente em partes reais e imaginárias. Você pode traduzir isso em magnitude e fase da maneira usual (real + imaginário e mag & phase são representações válidas de números complexos). Como usar isso para rastreamento de afinação é sutil - você precisará ler o livro DAFX para obter os detalhes.
Bjorn Roche
2

Os grandes picos que você vê podem ser o resultado de fenômenos físicos, não um artefato de processamento de sinal. Em geral, picos estreitos em um resultado de FFT representam um senoide não modulado exatamente periódico na janela no domínio do tempo. Mas as vibrações das cordas do piano não são tão estacionárias. Eles evoluem com o tempo, criando uma modulação perceptível.

Vários efeitos: várias cordas de piano por nota trocam energia através da mesa de som; a energia total da vibração decairá com o tempo; os modos de vibração podem ser levemente inarmônicos; a frequência exata da vibração de cada modo (harmônico) pode mudar com o decaimento da amplitude devido à rigidez e diâmetro da corda diferentes de zero; e cada harmônico pode se deteriorar a uma taxa diferente etc.

Você pode ter que decidir qual dessas múltiplas modulações deseja chamar de "afinação" (os livros de audiologia podem ajudar) e encontrar um método para rastrear melhor dentro do "pico amplo" da FFT.

hotpaw2
fonte
1

Com as notas mais baixas dos pianos, especialmente nas verticalidades, o espectro tende a ser esticado (a distância entre o tom fundamental e o primeiro som é um pouco mais do que uma oitava, etc.). É isso que dá aos pianos seu som percussivo, a nota mais baixa nas colunas verticais mais antigas costuma parecer mais um baque do que uma nota e, pelo que entendi, é por isso que as colunas verticais têm seu som tonk honky percussivo. Devido a esses bons afinadores de piano (as pessoas que não são algoritmos) ajustam os pianos com tons mais baixos do que o fundamental para as notas mais baixas, o ouvido humano tende a se concentrar na interação dos tons mais baixos para essas notas. O alongamento da série harmônica também pode ser a causa dos picos mais amplos do que o esperado no espectro.

Nathan Day
fonte
Bem, desarmonicidade não é igual a variabilidade. A desarmonicidade faria com que o pico estivesse em um ponto diferente, mas não vejo por que o tornaria mais amplo. Talvez a largura do pico se deva à variação inerente do sinal ao longo do tempo e, assim, encurtar o período da amostra reduziria a variação?
DrTodd13