Algoritmo para determinar a frequência fundamental de potenciais harmônicos

Estou tentando extrair uma frequência fundamental de uma fonte de som. talvez alguém esteja cantando A3 no microfone, então eu quero detectar ~ 110Hz

minha abordagem é:

Flutuadores FFT 1024use a fase de cada compartimento para determinar com precisão sua frequência precisadeterminar picos (normalmente 50 ou mais)ordená-los com o mais alto primeiro

(Pico [0] .power = 1063.343750, .freq = 2032.715088
(Pico [1] .power = 1047.764893, .freq = 3070.605225
(Pico [2] .power = 1014.986877, .freq = 5925.878418
(Pico [3] .power = 1011.707825, .freq = 6963.769043
(Pico [4] .power = 1009.152954, .freq = 4022.363037
(Pico [5] .power = 995.199585, .freq = 4974.120605
(Pico [6] .power = 987.243713, .freq = 8087.792480
(Pico [7] .power = 533.514832, .freq = 908.691833

(MARKER1) comece com o mais alto e combine-o com todos os picos restantes. Portanto, se eu tivesse N picos, terei neste momento pares de picos N-1examine cada par de picos quanto à harmonicidade; ou seja, quão perto está de alguma fração a / b, ou seja, podemos encontrar a / b com b <20 de modo que | peakA.freq / peakB.freq - a / b | <0,01 (isso corresponderia a harmônicos até o 20º)

agora temos uma lista refinada de picos considerados harmônicos entre si

Pico harmônico Par: (0,1) = 2/3, erro: 0,00468 => f0 @ 1019.946289
Harmonic PeakPair: (0,2) = 1/3, erro: 0,00969 => f0 @ 2004.003906
Harmonic PeakPair: (0,3) = 2/7, erro: 0,00618 => f0 @ 1005.590820
Harmonic PeakPair: (0,4) = 1/2, erro: 0,00535 => f0 @ 2021.948242
Harmonic PeakPair: (0,5) = 2/5, erro: 0,00866 => f0 @ 1005.590820
Harmonic PeakPair: (0,6) = 1/4, erro: 0.00133 => f0 @ 2027.331543
Harmonic PeakPair: (0,7) = 9/4, erro: 0,01303 => f0 @ 226.515106

Minha pergunta é: como posso conceber um algoritmo que identifique corretamente o fundamental acima como ~ 1000Hz?

Não é de forma alguma garantido que haverá uma concentração mais alta de valores em ~ 1000 do que em ~ 2000 ou ~ 3000 etc. nem é garantido que haverá alguma entrada ~ 1000. poderíamos ter ~ 5000 x uma entrada, ~ 4000 x três entradas, ~ 3000 x 2 entradas e alguns valores falsos flutuando, como os 226 na lista acima.

Acho que posso repetir o procedimento novamente, eliminando os fundamentos sugeridos que não são "harmônicos" com o restante da lista. isso pelo menos se livraria dos valores falsos ...

pode ser que eu nem esteja fazendo a pergunta certa. Talvez toda essa abordagem seja péssima. Mas acho que faz sentido escolher o pico mais forte e extrair um conjunto de harmônicos associados a esse pico.

na teoria que deve gerar uma carga de proporções, digamos se o pico mais forte original era o terceiro harmônico, esse conjunto de picos deveria conter 3/1 3/2 3/3 3/4 3/5 3/6 3/7 etc. ... embora alguns possam estar faltando.

realisticamente, tenho a sensação de que sempre será um harmônico fundamental ou o primeiro que tem a maior força. mas não sei se posso confiar nisso ...

tantos fatores, está fazendo minha cabeça nadar. Peço desculpas antecipadamente por uma pergunta tão confusa. Espero que eu possa arrumá-lo postumamente.

questionAnswers(3)

yourAnswerToTheQuestion