"Subtraindo" um fluxo de áudio de outro fluxo de áudio

8

Sou engenheiro de software há muito tempo, mas praticamente não tenho experiência com processamento de sinal / áudio. Estou interessado em aprender sobre o processamento de sinais por meio de um caso de uso que temos para um de nossos componentes de áudio. NOTA: este é apenas um exercício de aprendizado para mim ... não é uma prioridade que o resultado final seja útil.

Temos um componente (A) que produz áudio (via alto-falante). Temos outro componente (B) que grava esse áudio (através de um microfone simples).

O que eu gostaria de fazer é usar A para gravar o áudio de B. Então eu gostaria, se possível, comparar os dois fluxos. O objetivo seria remover o áudio presente no fluxo A - deixando as condições ambientais existentes durante a gravação - eu entendo que a remoção total não é possível.

Percebo que há problemas de fase e magnitude. Também percebo que não é apenas uma questão simples de "subtrair" B de A. Dito isto, suponho que você possa subtrair A de A.

Eu gostaria de entender como abordar o problema. Novamente, esta é uma experiência de aprendizado para mim (não há prazos); Estou mais do que disposto a começar do começo.

Qualquer conselho / sugestão seria muito apreciado.

CaymanEss
fonte

Respostas:

5

Essa configuração compartilha algumas semelhanças com os problemas de identificação do sistema, onde seria a entrada do sistema LTI da qual você deseja estimar a função de transferência, sendo a saída; e o "som ambiente" é o ruído aditivo. A suposição de LTI é razoável, desde que seus conversores / amplificadores / transdutores sejam de qualidade decente.AB

Portanto, as etapas seriam:

  • Use uma técnica de identificação do sistema para encontrar o FIR filtro que minimiza o erro médio quadrado entre e . Um método simples, que pode não ser o mais adequado aqui, é o de dividir a correlação cruzada de e pela autocorrelação de . Explicação aqui . A limitação é que ela não funcionará bem em gravações longas (você pode calcular melhor suas estimativas em segmentos mais curtos e calculá-las como uma média) - e que a música não é o melhor sinal de "sonda" para enviar a um sistema para estimar sua resposta.h^h^ABABA
  • Agora você pode usar como uma estimativa do sinal original A como "ouvido" pelo microfone e subtraí-lo de para recuperar o som ambiente.h^AB

Dei uma chance a isso usando um clipe de música (A), aplicando um modelo de reverb e amplificador leve para simular um alto-falante em uma sala e, em seguida, misturando uma amostra de áudio de gato para obter (B) e, em seguida, estimando uma resposta de impulso do ( A, B), subtraindo o A filtrado de B. Isso mostra alguns resultados, mas uma melhor técnica de estimativa FIR pode ajudar aqui! (observe que eu truncou o IR estimado para suas primeiras 5000 amostras para acelerar os cálculos).

Observe que existem algoritmos para fazer isso de forma adaptativa (como o LMS ). Isso pode ser mais adequado para o seu problema se e forem processados ​​em tempo real e não offline. Tais algoritmos formam a base dos sistemas de cancelamento de eco usados ​​nas telecomunicações.AB

pichenettes
fonte
Muito obrigado @pinchenettes! Seu c_cat_estimated.wav é exatamente o tipo de resultado que estou tentando alcançar. Existe alguma maneira de você me informar como fez isso (software usado etc.)? Por favor, não hesite em contactar-me directamente: [email protected]
CaymanEss
Usei o Audacity e as unidades de áudio padrão da Apple para processar o áudio original e obter o efeito "ambiente". A amostra de gatos também foi misturada com audácia. O restante do código está em python + numpy: gist.github.com/pichenettes/5434412 . Esta é a "coisa mais simples que poderia funcionar" - o núcleo do algoritmo é de apenas 6 linhas de código.
Pichenettes
Mais uma vez, muito obrigado @pinchenettes. Isso vai me deixar ir. Acabarei desejando fazer isso em tempo real - você acredita que o uso do LMS ainda seria viável?
CaymanEss
Se você sabe que sua resposta ao impulso não será alterada, você pode calculá-la usando um algoritmo lento durante os primeiros segundos e continuar usando. Caso contrário (os alto-falantes estão em movimento, o ambiente está mudando ...), você precisará de um algoritmo adaptável. Observe que você provavelmente terá que lidar com a convolução com respostas de impulso longas se quiser modelar salas -> Verifique isso nas técnicas dsp.stackexchange.com/questions/8771/… . Não estou ciente dos métodos de filtragem adaptativa otimizados para respostas FIR muito longas.
Pichenettes
Os sinais precisam ter o mesmo comprimento, número de canais e taxa de amostragem.
Pichenettes
1

O problema que não permitirá que o som ambiente exato seja a saída é:

(a) a diferença de volume (b) diferença de fase devido a atraso de tempo.

Assim, no geral, o sinal gravado por B será (assumindo que a sala se comporte como um sistema LTI) , onde ou mais a resposta de impulso da sala. Aqui é o sinal ambiente no local de B. Agora, você pode ver que terá , a menos que saiba a resposta ao impulso da sala ou sua estimativa. Para obter informações, você pode seguir em frente fazendo a subtração e vendo o espectrograma do sinal resultante e comparando com o espectrograma de sinal do sinal ambiente e apenas do A.yB[n]=k=0pαkxA[nk]+xamb[n])=(xh)[n]+xamb[n]h[n]=αnxamb[n]z[n]=xA[n]yB[n]z[n]xamb[n]

O contrário é colocar o microfone próximo a A para minimizar o efeito da resposta ao impulso da sala. Essa técnica é usada em fones de ouvido com cancelamento de ruído, onde o ruído ambiente deve ser removido. http://en.wikipedia.org/wiki/Noise-cancelling_headphonese .

Neeks
fonte
Muito obrigado @Neeks. Existe um nome para a equação yB [n] (algoritmo)? Novamente, sou totalmente novo no dsp, portanto, seria benéfico para mim poder ler sobre algoritmos / conceitos específicos.
precisa saber é o seguinte
11
É chamado de deseverberação de fala e áudio. É análogo a um problema de deconvolução quando você assume que a operação de reverberação é devida a um sistema LTI, é um sistema LTI. h(t)
Neeks
1

Isso soa como um caso padrão para "cancelamento de eco acústico". Existem muitas patentes, trabalhos de pesquisa e teses acadêmicas sobre o assunto (a partir de 1967, acredito no artigo de MM Sondhi "Um cancelador de eco acústico adaptável").

Uma visão geral simples está aqui http://supportdocs.polycom.com/PolycomService/support/global/documents/support/technical/products/voice/vortex_choose_acoustic_echo_canceller.pdf .

Este é um livro decente sobre o tópico http://www.amazon.com/Advances-Network-Acoustic-Cancellation-Processing/dp/3540417214

Hilmar
fonte
Obrigado @Hilmar. Por sua recomendação, li a visão geral do cancelamento de eco e vários artigos sobre cancelamento de ruído. Estou errado ao pensar que o cancelamento é o oposto do que eu quero? Novamente, meu objetivo é obter o ruído ambiente, não uma versão limpa do sinal original.
precisa saber é o seguinte