Filtragem de streaming de áudio


9

Dado algo como 103 pontos de dados ( ), um DFT retornará 103 valores de frequência. Então, fazer algo como filtrar as altas frequências envolve definir os valores de alta frequência da DFT para zero e executar a DFT inversa para recuperar 103 pontos de dados que representam o sinal original sem as altas frequências.N=103

Isso faz sentido para mim, considerando todos os 103 pontos de dados de uma só vez. Mas e o streaming de um arquivo WAV de áudio bastante grande (por exemplo, ). Se alguém quiser filtrar as altas frequências, a abordagem que acabei de descrever em todos os dados de pontos logicamente faz sentido. Mas isso não é razoável ao transmitir um arquivo WAV para reprodução. O que é feito para filtrar a alta frequência na reprodução de um arquivo de áudio por streaming?N=105105

Respostas:


12

FFT -> coeficientes de zeragem -> IFFT não é a maneira correta de fazer a filtragem - o filtro real realizado ao fazer isso tem características ruins.

A maneira correta de filtrar os sinais é calcular os coeficientes de um filtro digital , um processo conhecido como design de filtro e para o qual um grande corpo de ferramentas / documentação de software está disponível, e aplicá-lo à sua sequência de entrada. Em resumo, isso consiste em avaliar para cada amostra uma combinação linear das amostras de entrada anteriores e das amostras de saída anteriores. Dependendo dos requisitos do seu filtro em termos de rejeição / ondulação da banda de parada, apenas alguns coeficientes podem ser necessários, tornando-o muito mais eficiente que a FFT. Como as únicas informações necessárias para calcular uma amostra de saída são as poucas amostras anteriores de entrada / saída, não há problema em aplicá-las ao streaming de áudio.

Você precisará usar a FFT apenas se decidir usar os filtros FIR e se os requisitos de seu filtro fizerem com que eles tenham um número insanamente grande de coeficientes. Nesse caso específico, será eficiente aplicar o filtro a blocos sucessivos dos dados de entrada por meio de FFT e adição de sobreposição .


8

A melhor maneira de aplicar a filtragem no domínio da frequência para fluxos de sinais é adicionar sobreposição (ou sabores relacionados se sobrepõem a salvar ou bloquear convolvers, etc.).

Você basicamente captura um quadro de cada vez (digamos 1024 amostras). Zero pad para o dobro do comprimento (2048), faça uma FFT, multiplique pela função de transferência (também preenchida com zero) do filtro, faça uma FFT inversa. Salve as últimas 1024 amostras como sobreposição para o próximo quadro, adicione a sobreposição do quadro anterior nas primeiras 1024 amostras e esta é a sua saída. Para cada 1024 amostras de entrada, você obtém 1024 amostras de saída e simplesmente repete isso para os próximos quadros até que o fluxo seja concluído.

Todo o negócio com preenchimento zero e sobreposição é necessário, pois a multiplicação no domínio da frequência implementa convolução circular e você realmente deseja convolução linear na maioria das aplicações.

Existem variantes para esses métodos usando diferentes funções da janela e sobreposições, mas é o mesmo princípio: corte-o em pequenos pedaços e processe um pedaço de cada vez.


Existe um livro que explique os detalhes disso?
user782220

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.