Redução de ruído com áudio muito barulhento


8

Estou tentando escrever um algoritmo que segmentaria automaticamente um pedaço de áudio com gravações de chamadas de pássaros. Meus dados de entrada são arquivos wave de 1 minuto e na saída eu gostaria de receber chamadas separadas para análise posterior. O problema é que a relação sinal / ruído é bastante terrível devido às condições ambientais e à baixa qualidade de um microfone (amostragem mono de 8 kHz).

Ficaria muito grato por qualquer conselho sobre como prosseguir com a redução de ruído.

Aqui está um exemplo da minha entrada, gravação de áudio de um minuto em formato de onda: http://goo.gl/16fG8P

É assim que o sinal se parece:

Meu sinal de entrada (8 kHz).  Áreas marcadas indicam cantos de pássaros

A filtragem passa-banda, na qual mantenho apenas algo entre 1500 - 2500 Hz, melhora a situação, mas ainda está longe das expectativas. Neste espectro ainda existe muito ruído.

Spectrogram

Também plotei energia média de longo prazo (com intervalos de 32 amostras) e removi alguns cliques dela. Aqui está o resultado:

Energia média a longo prazo

Com todo o ruído restante, tenho que definir um limiar muito baixo para o algoritmo de detecção de início para selecionar os últimos 10 segundos das chamadas de pássaros. O problema é que, se eu ajustá-lo dessa maneira, na próxima gravação eu posso obter um monte de falsos positivos.

O filtro da média móvel ajuda um pouco com o ruído do vento. Alguma outra ideia? Eu estava pensando em "Subtração espectral", mas aqui parece-me que tenho um problema de galinha e ovo - para encontrar uma área com apenas ruído, preciso segmentar o áudio e segmentar o áudio necessário para remover o ruído. Você conhece alguma biblioteca que possua esse algoritmo ou algumas implementações em pseudo-código? O Methinks Audacity usa esse método para remover o ruído. É muito eficaz, mas cabe ao usuário marcar a área somente de ruído.

Estou escrevendo em Python e é um projeto de código aberto gratuito.

Obrigado pela leitura!


Bem-vindo ao DSP.SE. Esta é uma pergunta incrível! Espero que você possa obter algumas boas pistas aqui.
Phonon

@Lukasz Tracewski Respeitado senhor: Embora seja tarde demais, mas estou trabalhando no mesmo projeto, estou tendo problemas como como fazer espectrograma a partir de um arquivo wav. Graças em advance.Any hel seria muito apreciada
Mubeen Khan

@MubeenKhan Você quer dizer ajuda com a produção de espectrograma a partir de um arquivo de áudio? Existem dezenas de ferramentas e bibliotecas adequadas para esse fim. Você precisa de alguma recomendação? Ou você está perguntando sobre redução de ruído?
Lukasz Tracewski 7/10/19

Respostas:


4

No final, o que provou ser a melhor solução foi a detecção do início com base no conteúdo de alta frequência ou energia. Antes que pudesse funcionar, tive que usar o filtro passa-alto para cortar os primeiros 1 kHz, pois continha muito ruído.

Depois de ter uma área somente de ruído, eu poderia usar seu perfil para reduzir o ruído do restante da amostra.

Uma biblioteca que achei particularmente útil foi Aubio . Ele tem um bom conjunto de exemplos e fornece muitos algoritmos para você escolher para a detecção de início.


0

Não sei muito sobre redução de ruído de áudio, mas após uma subtração rápida e suja do ruído da banda passada filtrada (em torno de 1500-3000 hz), entendi o seguinte:

https://dl.dropboxusercontent.com/u/98395391/signal_denoised.wav

Eu acho que soa um pouco melhor dos sinais filtrados e originais.

Com um simples filtro Wiener, obtenho resultados muito semelhantes.


A menos que eu o entenda mal, parece que você está se referindo a algo que eu já fiz no segundo parágrafo da minha pergunta (logo abaixo do primeiro gráfico). Com o método descrito em minha resposta, consegui encontrar todos os onets e aplicar a subtração espectral, o que fornece resultados ainda melhores. Lamentavelmente, também produz os chamados "tons musicais", que agora são minha principal preocupação. Obrigado mesmo assim!
Lukasz Tracewski
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.