LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: blabla em 21 de Dezembro de 2021, 16:52

Título: Espectro de um nota de guitarra, que nos ensinam muito sobre física, áudio e DSP
Enviado por: blabla em 21 de Dezembro de 2021, 16:52
Boa tarde a todos,

Hoje trago-vos algo que achei muito interessante,
a pergunta é:

Se eu tocar na minha guitarra um C (Dó), e se fizer no Audacity o gráfico do espectro através da FFT, porquê razão a 3 º harmónica é a que tem maior amplitude e não a 1º harmónica ou fundamental na frequência da minha nota C (Dó)?

A pergunta é simples de perceber, especialmente pelo facto de que vêm com um gráfico.

Contudo nas respostas é que está o verdadeiro sumo da coisa, ou seja é nas respostas que se percebe todas as nuances que podem estar a afetar este sistema de forma a que o gráfico / plot final da frequência vs amplitude tenha aquele comportamento.

Vejam que vale mesmo a pena ver esta discussão. Pelo meio ela inclusivamente chega a ser cômica, mas é uma discussão genial com a qual se aprende muito.

Why is the 5th stronger than the 1st in guitar spectrum?
https://music.stackexchange.com/questions/101677/why-is-the-5th-stronger-than-the-1st-in-guitar-spectrum (https://music.stackexchange.com/questions/101677/why-is-the-5th-stronger-than-the-1st-in-guitar-spectrum)

Só para contextualizar, eu cheguei até esta página ou pergunta no stackexchange depois de umas pesquisas no contexto do espetro de uma nota numa guitarra. Nomeadamente, se existiria uma forma melhor de conseguir fazer um detetor polifónico de acorde de notas de guitarra ex: clássica ou de cordas de Nylon. Com base na análise do espetro de uma FFT do sinal.

No passado, eu já dediquei algum tempo a este problema e já implementei um pequeno projeto que fazia isto mas com base num algoritmo relativamente simples que é o Harmonic Product Spectrum:

Polyphonic note detector using Harmonic Product Spectrum
https://github.com/joaocarvalhoopen/Polyphonic_note_detector_using_Harmonic_Product_Spectrum (https://github.com/joaocarvalhoopen/Polyphonic_note_detector_using_Harmonic_Product_Spectrum)

Na realidade eu estava a conjeturar a hipótese de fazer uma implementação em tempo real deste algoritmo em Rust ou C / C++ em que iria buscar os dados diretamente à placa de som, processa-se buffers de FFT mais pequenos em tempo real, um pequeno servidor de sockets UDP e que envia-se sinais de note_C4_on, note_C4_off, tal como o protocolo MIDI para outras aplicações, e com isso quem sabe para eu ou outras pessoas fazerem um jogo para guitarra que contribui-se para que uma pessoa pratica-se mais guitarra, pelo menos para principiantes. Já fiz uma coisa similar para flauta e para harmónica no passado.

Contudo e neste caso queria ver se conseguia melhorar o algoritmo e foi nesse contexto que cheguei a esta pérola que partilhei aqui convosco.

Obrigado,

Cumprimentos,
João