A maneira mais eficiente de extrair componentes de frequência de sinal de áudio com precisão quase humana em tempo real


14

Estou tentando descobrir como (se possível) extrair os componentes de frequência de uma amostra de áudio arbitrária (normalmente música) de maneira semelhante à FFT, mas em minha pesquisa sobre o algoritmo da FFT, estou aprendendo que ela sofre alguns restrições severas para esse fim.

Existem três problemas que a FFT está apresentando:

  1. Como a resolução da bandeja da FFT é equivalente ao tamanho da sua janela, para obter uma precisão bastante razoável (digamos 1 Hz), você precisa de uma janela excessivamente longa (digamos 1 segundo). Isso significa que você não pode detectar transientes ou frequências recém-introduzidas rapidamente. Isso também significa que o problema não pode ser resolvido com uma CPU mais rápida e uma taxa de amostragem mais alta - a restrição está intrinsecamente ligada ao tempo.

  2. Os seres humanos percebem a frequência logaritmicamente, mas os compartimentos da FFT são espaçados linearmente. Por exemplo, uma diferença de 20Hz na extremidade inferior da nossa audição é enorme , enquanto uma diferença de 20Hz na extremidade alta é imperceptível. Portanto, para obter a precisão que exigimos em baixas frequências, precisamos calcular muito mais do que exigimos em altas frequências.

  3. Alguns desses problemas podem ser resolvidos interpolando entre os compartimentos da FFT. Isso pode funcionar para grande parte do áudio musical, porque as frequências costumam estar bem afastadas e, portanto, não mais do que 1 frequência vaza para um par de caixas. Mas nem sempre será esse o caso, principalmente para sons desarmônicos como instrumentos percussivos. Portanto, a interpolação é realmente apenas uma adivinhação.

Pelo que entendi do algoritmo DFT / FFT, as saídas (amplitudes do compartimento) são efetivamente a correlação do seno / cosseno na frequência de cada compartimento. Parece-me que, se o algoritmo pudesse ser redesenhado para que as frequências bin fossem espaçadas de forma não linear (ou seja, correlacionamos um conjunto diferente de senos / cossenos), poderíamos obter uma resolução psicoacústica da mesma forma em todas as frequências. Isso é possível ou é um sonho baseado no meu entendimento incompleto da matemática envolvida?

Acho que também poderia resolver o problema com força bruta, correlacionando senos / cossenos em cada frequência em que estou interessado. Não sou muito informado sobre matemática aqui. Isso é possível? Que tipo de eficiência? Isso resolveria o meu problema?

Existe uma maneira diferente de obter uma decomposição de frequência mais precisa e em tempo real de um sinal? A eficiência da CPU é uma preocupação, mas não a principal - estou parcialmente interessado em saber se isso pode ser feito teoricamente. No entanto, algo que seja viável em tempo real em uma máquina desktop moderna seria o ideal.


3
Qual problema você está tentando resolver? detecção f0, detecção múltipla de f0 (para transcrição), reconhecimento de acordes, modelagem de timbre ...? Existem soluções ad-hoc para alguns desses problemas. Você se preocupa com a invertibilidade (a ser usada em uma estrutura de análise-> transformação-> ressíntese)?
Pichenettes #

O problema que estou tentando resolver é reconhecidamente bastante aberto. Eu tenho um interesse geral em música digital, cobrindo a maior parte da sua lista. Mas a minha imprecisão é em parte devido a minha falta de conhecimento do que pode ser feito e quais são padrão da indústria específica ou melhores maneiras de resolver cada problema que você menciona (até que eu fiz esta pergunta, eu sempre assumiu FFT era ele ). Mas o item da sua lista de maior interesse para mim é a modelagem de timbre. Eu também gostaria de encontrar maneiras de extrair timbres complexos que soam simultaneamente em uma gravação. A ressíntese é emocionante. Algoritmos de IA são de interesse.
Bryhoyt 14/10/12

Um problema mais específico que tentei resolver no passado e gostaria de tentar novamente em algum momento: gostaria de escrever um programa para "improvisar" em tempo real com um grupo de tocadores ou cantores gravados com um microfone. Cheguei a ponto de meu computador "assobiar" um seno comigo, visivelmente atrasado e desafinado. Seria vital que uma improvisação desse tipo se ajustasse com precisão e no ritmo. Claro, existem outras maneiras de conseguir isso (os jogadores tocam instrumentos digitais ou fornecem ao computador algumas "informações privilegiadas", como uma progressão de acordes predefinida etc.), mas esse não é o meu objetivo.
Bryhoyt 14/10/12

"o algoritmo pode ser redesenhado para que as frequências dos compartimentos sejam espaçadas de maneira não linear, para que possamos alcançar uma resolução pseudoacústica em todas as frequências". Soa como um Morlet contínua transformada wavelet
endolith

Respostas:


5

Como comentei em um post anterior, o método de análise de frequência e tempo conhecido como "transformada de Fourier de curto prazo" é equivalente a um banco de filtros, analisando seu sinal . Para uma determinada janela de análise , do tamanho , o filtro na frequência é: x w n N k / N h n = w - n e j 2 π n kXxWnNk/N

hn=W-nej2πnkN

Para janelas de análise usuais (Hann, Hamming ou mesmo retângulo), isso corresponde a um filtro passa-baixo, com frequência de corte em torno de , que é "deslocado" para a faixa de frequência (graças à modulação exponencial complexa) , portanto, levando a um filtro passa-banda.k1/Nk

Nesse ponto, para responder diretamente à sua preocupação em refletir a percepção humana, algumas pessoas derivaram a ["transformação Q constante" (CQT)] [Brown91]. Baseia-se no mesmo princípio que o FT, na sua interpretação do banco de filtros. No entanto, os centros não são espaçados linearmente quanto a um TF "normal", mas sim espaçados log2. A escala é então intimamente relacionada a uma escala musical ocidental: se alguém escolhe , obtemos 12 frequências por oitava (toca uma campainha? :-)) e a a largura de banda está configurada para, digamos, . Você também pode escolher outros centros, conforme a sua necessidade.f k + 1 = 2 1 / 12 f k 2 1 / 12 - 1fkfk+1=21/12fk21/12-12fk

Você pode encontrar implementações do CQT aqui e ali, uma recente do Prof. Klapuri, que vem com um inverso bastante decente, pode ser encontrada aqui . O grupo de áudio da Telecom ParisTech também possui uma implementação do Prof. Prado, mas ainda não o testei.

[Brown91] J. Brown, "Cálculo de uma constante transformação espectral Q", Jornal da Sociedade Acústica da América, 1991, 89, 425, 425-434

EDIT 20121014: algumas respostas e comentários às suas perguntas (do bryhoyt).

  1. Apenas idéias gerais sobre seus próprios comentários à pergunta principal: você parece estar interessado em muitas aplicações que, para mim, não são problemas triviais de resolver. A "modelagem timbrada" me parece mais relacionada ao reconhecimento de fala ou algo semelhante, para o qual a resolução ou precisão do tom ou da frequência não é um problema (considere como as MFCCs são geralmente calculadas).

    Considere também quantos pesquisadores de ponta ( F. Pachet e a equipe de repmus do IRCAM, França , para citar alguns) estão trabalhando no tópico de improvisação e acompanhamento automáticos: a tarefa não é impossível, mas requer conhecimento em muitas áreas. Para resumir, um sistema típico precisa imitar o sistema auditivo humano (pelo menos), implementar a percepção de som / música / afinação / ritmo, conhecer a teoria musical e tomar decisões com base nas estimativas de todas as etapas anteriores. A transformação de Fourier, ou qualquer representação de sinal, é apenas um (minúsculo) passo em direção ao objetivo final - e potencialmente, na minha opinião, o melhor compreendido até agora.

    Dito isto, ainda há a possibilidade de que todos estejam olhando muito além do que realmente acontece, e que você possa reprimi-lo em uma solução simples e elegante! Não se esqueça de publicar sobre isso assim que estiver pronto! :-)

  2. uma amostra de 0,1s a 44kHz é suficiente para conter uma vasta gama de frequências

    Isso levaria, no caso do FT, a uma resolução da ordem de , em todos os compartimentos de frequência do FT. São quase 2 semitons a 100Hz! Poderia ser melhor...Fs/N=44100/4410=10Hz

  3. A FFT não pode detectar isso para frequências baixas e altas, mas você diz que outros algoritmos podem: qual é o problema?

    Resposta curta: leia minha tese sobre estimativa de melodia!

    Para elaborar um pouco mais: muitos algoritmos de estimativa de afinação vão além das limitações do TF, graças a suposições sobre os sons a serem processados. Esperamos que as notas dos sons naturais (voz humana, oboé, sax, piano ...) sejam mais complexas que os sinusóides isolados. A maioria dos sons agudos é mais ou menos harmônica, o que significa que eles podem ser modelados como somas de sinusóides cuja frequência é um múltiplo da frequência fundamental.

    Portanto, é útil levar em consideração esses harmônicos ao estimar o tom, com métodos que usam funções de detecção como somas espectrais, produtos espectrais ou funções de autocorrelação. Alguém iniciou um tópico relacionado recentemente.

  4. Quais são as compensações? Mais especificamente, que nível de precisão de frequência posso esperar para uma janela razoavelmente curta? (Entendo que o tamanho da janela no CQT é variável - quanto?) Ainda mais especificamente, até que ponto poderei chegar ao meu aprox. objetivo de 0,5% de diferença de frequência com uma janela de 0,005s?

    Como dito anteriormente, com uma janela de 0,005s, você pode esperar algo como 200Hz de "vazamento de frequência". Isso é realmente um problema apenas quando você tem 2 sinusóides com frequências inferiores a 200Hz, de modo que o FT não será capaz de mostrar que são 2 sinusóides diferentes. Bem, estamos longe dos seus 0,5% (a propósito, um semitom está em 6% da frequência!) E 0,005s é realmente um pouco pequeno para o seu propósito. No entanto, se você quiser fornecer uma estimativa a cada 0,005s, ainda poderá processar quadros sobrepostos mais longos, como geralmente feito no processamento de fala / música. É isso que você realmente quer?

    Quanto ao tamanho das janelas, você pode consultar [Schoerkhuber2010], com comprimentos de quadro iguais a: que é o número de frequência caixas por oitava desejadas para o CQT. Isso significa muito longo janelas: e requerem cerca de 0,7s longas janelas. Não é nada dizer que perdemos um pouco da resolução temporal ... Mas, como mencionado anteriormente, isso é um problema apenas se esquecermos a estrutura do som. Além disso, a psicoacústica considera que abaixo de 500Hz, os seres humanos realmente não distinguem tão bem os sinusóides: até os humanos são desafiados por lá. Obviamente, podemos esperar que nossos computadores possam fazer melhor do que nós, mas aqui enfrentamos um problema difícil!

    Nk=Fsfk(21/B-1)
    BB=48.fk=100Hz

    Por fim, observe que existem outras formas de calcular uma representação de som no tempo, considerando, por exemplo, bancos de filtros de gammatona. A vantagem do CQT que mencionei anteriormente é que há software para a transformação e seu inverso. Pessoalmente, continuo atento ao STFT, por sua simplicidade e porque, até agora, nunca precisei de uma melhor resolução em baixas frequências, mesmo para a separação de fontes.

    [Schoerkhuber2010] Schoerkhuber, C. e Klapuri, A., "Caixa de ferramentas de transformação Constant-Q para processamento de música", 7ª Conferência sobre Computação em Som e Música, Barcelona, ​​Espanha, 2010.


Uma pequena observação: o CQT pode ajudar a resolver as preocupações dos pontos 1 e 2, mas não o ponto 3. Quanto ao ponto 3, sempre há uma troca entre resolução de tempo e frequência, e se você deseja uma boa resolução de frequência em baixa componentes de frequência, você provavelmente precisará aceitar para perder a resolução do tempo. Agora, para a estimativa de campo, pode haver algumas outras soluções, você pode ler a minha em minha tese de doutorado se você estiver interessado: D
Jean-louis Durrieu

Eu não entendo direito. Sei que você não recebe nada de graça - não posso esperar que um algoritmo detecte com precisão frequências que não foram amostradas em uma boa resolução por pelo menos alguns períodos da frequência mais baixa. Mas uma amostra de 0,1s a 44kHz é suficiente para conter uma vasta gama de frequências, que um ser humano pode distinguir com precisão (em termos relativos - "aqui está o quinto", "há um quarto diminuído", etc.), provando as informações está lá em algum lugar. A FFT não pode detectar isso para frequências baixas e altas, mas você diz que outros algoritmos podem: qual é o problema?
Bryhoyt 14/10/12

De todas as excelentes respostas acima, o CQT parece o ajuste mais exato para a pergunta que eu estava fazendo. Quais são as compensações? Mais especificamente, que nível de precisão de frequência posso esperar para uma janela razoavelmente curta? (Entendo que o tamanho da janela no CQT é variável - quanto?) Ainda mais especificamente, até que ponto poderei chegar ao meu aprox. objetivo de 0,5% de diferença de frequência com uma janela de 0,005s? (Essa é a minha guesstimate áspera quando um ser humano poderia começar algo de audição está fora de sintonia ou off-beat)
bryhoyt

5

Primeiro, com a abordagem clássica de transformada de Fourier de curto prazo, existem alternativas à interpolação - em particular técnicas que utilizam informações de fase para recuperar a frequência instantânea ( consulte esta pergunta ), que pode fornecer com precisão a posição de um pico espectral sem um aumento do tamanho da FFT. A desvantagem, como você disse corretamente, é que você não está aumentando a capacidade do sistema de discriminar picos adjacentes - mas isso já é uma grande melhoria em comparação ao uso da frequência central do índice de bin da FFT.

srFFT_sEuze

Existe outra abordagem de força bruta que funciona: "sondar" seus sinais com exponencial complexo em janelas (wavelets de Gabor). Eles são caracterizados por uma frequência central, um tempo central e uma largura de banda (que mede como a wavelet se espalha ao longo do tempo ou sobre a frequência). Você terá que avaliar muitas, muitas, muitas correlações entre seu sinal e essas wavelets com quantas compensações, frequências e larguras de banda desejar. O resultado será o mesmo de um STFT "lado a lado" muito flexível, no qual um tamanho ideal de janela é selecionado para cada intervalo de tempo e cada faixa de frequência. Além do custo computacional, a desvantagem é que não há algoritmo eficiente e causal (você precisará conhecer tantas amostras com antecedência quanto a maior wavelet do seu dicionário). Se você quiser experimentar essas técnicas,MPTK .

k

  • k
  • Eles apresentam bom desempenho na presença de ruído branco - isso requer que o sinal seja embranquecido antes da análise; executar a análise em canais individuais de um banco de filtros também ajuda.

Eles são computacionalmente caros, mas podem funcionar on-line, com janelas curtas se os pedidos e / ou o ruído do modelo forem baixos.


4

Frequência ou afinação? Já existem toneladas de trabalhos de pesquisa e livros sobre a percepção do campo humano. Mas, no IIRC, os seres humanos tendem a ser ruins em "extrair" frequências com precisão, a menos que sejam fundamentais. E múltiplos picos de frequência dentro de uma "banda crítica" tendem a ser percebidos como ruído. Portanto, qualquer método com "precisão quase humana" também pode precisar incluir também algumas falhas de estimativa perceptiva humana.

Uma FFT é apenas um banco de filtros que não são ideais para muitas finalidades, a menos que a ortogonalidade e a invertibilidade sejam requisitos. Outros bancos de filtros são possíveis se você não precisar desses dois (e a percepção humana claramente não), como um banco de filtros de frequência MEL. Uma vez que um pico de frequência é identificado por um banco de filtros de frequência MEL, uma análise mais aprofundada por técnicas de interpolação por FFT ou vocoder de fase pode ser útil para refinar uma estimativa de frequência de qualquer pico de frequência espectral isolado.

Observe que nenhuma dessas informações de fato é coletada por nenhuma dessas técnicas de filtragem usadas no mesmo período de dados no domínio do tempo, em comparação com uma FFT. O que está acontecendo pode realmente ser a perda de informações para melhor corresponder à "imprecisão" ou anomalia do sistema auditivo humano.

E a estimativa de afinação a partir de um conjunto de frequências é um problema completamente diferente, novamente um tópico com muitos trabalhos de pesquisa e capítulos de livros sobre audiologia e outros.

A última parte da sua pergunta sobre desempenho pode ser um arenque vermelho. Atualmente, pode-se fazer dezenas de FFTs e dezenas de diferentes bancos de filtros em tempo real em um processador de telefone celular. Dadas as bibliotecas FFT muito eficientes disponíveis dos fornecedores de CPU, uma FFT com milhares de "excesso" de bandejas pode ser mais eficiente do que um banco de filtros significativamente menor, porém mais ingênuo.


Resposta muito informativa, obrigado. Estou ciente da diferença entre altura e frequência, mas sua resposta realmente ajudou a destacar quanta precisão humana depende do som que atende a certos requisitos. Parece verdadeiro ao meu conhecimento de harmonia que os humanos são muito ruins em extrair frequências que não são fundamentais. Posso distinguir com precisão os intervalos afinados entre si e os intervalos afinados (intervalos consoantes mais facilmente do que dissonantes). Mas eu teria problemas para distinguir dois intervalos desafinados (além de "achatado", "muito achatado", "afiado" etc.).
Bryhoyt 14/10/12

2

Existem muitas alternativas, mas isso depende do que você está fazendo. Fisicamente, eu diria que nossos ouvidos são mais como um banco de filtros paralelos do que uma FFT, o que lhes dá uma boa resolução de tempo, e um processo chamado "focalização" oferece uma boa resolução de frequência. Portanto, em alguns casos, você poderia usar teoricamente um banco de filtros, mas isso exige muito processamento, deixando muitos dados para processar.

É possível visualizar as wavelets como um conjunto de filtros particularmente eficientes e relacionados. O problema com as wavelets para análise musical e de áudio é que elas geralmente fornecem apenas uma resolução de oitava (embora você possa fazer várias coisas sobre isso, eu realmente não vi wavelets serem particularmente úteis no áudio).

Outra abordagem é usar janelas FFT sobrepostas. Você pode aumentar a resolução de frequência da FFT observando não apenas as informações de magnitude, mas também as informações de fase. Isso permite que você use janelas muito mais curtas do que você usaria, o que resulta em melhor desempenho e melhor resolução de tempo. É difícil redimensionar corretamente as janelas sobrepostas, e fazer muitas suposições sobre a fase também pode ser perigoso. Seja como for, esse tipo de truque provavelmente é o ponto principal da solução de problemas complexos de análise de frequência de tempo.

Existem várias outras ferramentas para aplicativos específicos também.


1
xnXkmWn
Xfm=nxn+mWne-j2πnkN
Nxnm
Xfm=pxpWp-me-j2π(p-m)kN=pxphm-p
hn=W-nej2πnkN

1
Os STFTs podem ser um banco de filtros, mas nem todos os bancos de filtros são STFTs.
Bjorn Roche
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.