Downsampling filtro lowpass para áudio: FIR ou IIR?

8

Estou trabalhando em um projeto de processamento de áudio em tempo real, no qual tenho que reduzir uma amostra de 44,1 kHz para uma taxa de amostragem ainda a ser determinada, essencialmente para reduzir a complexidade computacional. Estou procurando um filtro de downsampling decente e encontrei artigos sugerindo IIR (principalmente elíptico) e FIR (principalmente fase mínima). O filtro de fase mínima FIR não funcionaria necessariamente para mim, porque eu preciso de um filtro de fase linear. Portanto, as opções são FIR de fase linear que poderia ter uma latência considerável ou um IIR de filtragem dupla ( filtfiltcomando MATLAB ) que primeiro filtra para frente e para trás.

Quais são alguns prós e contras do FIR e IIR como filtros de downsampling? O que é mais prático em uma aplicação em tempo real?

Phonon
fonte

Respostas:

10

Se a fase linear for um requisito, isso provavelmente o levará a uma implementação FIR. É possível criar filtros IIR com fase linear aproximada, mas é fácil projetar um FIR de fase linear.

Se você está preocupado com a latência, a filtragem para frente e para trás como na filtfiltverdade não é realmente uma boa opção. Em geral, ele realmente deve ser usado em um processo offline, pois para implementar exatamente a técnica, você precisa executar todo o sinal através do encaminhamento e, em seguida, fazer o mesmo ao contrário. Isso implica que você tem acesso a todo o sinal de uma só vez, o que não é proporcional ao baixo atraso.

Em geral, um filtro FIR exigirá uma ordem mais alta para um determinado conjunto de requisitos de desempenho. No entanto, os filtros FIR trazem algumas vantagens reais, como estabilidade garantida, menor suscetibilidade a erros de arredondamento (já que o erro de quantização não é realimentado pelo filtro, embora você possa compensar isso com maior complexidade), e simplesmente alcançado resposta de fase linear. Além disso, implementações eficientes de filtro FIR estão disponíveis para muitas arquiteturas de processador, mitigando um pouco o custo dos toques extras.

Outra maneira de reduzir o custo extra para os filtros FIR na sua situação é tirar proveito de técnicas eficientes de processamento de sinais com múltiplas taxas. Especificamente, você pode usar uma abordagem de dizimação polifásica para reduzir significativamente o número de cálculos que você realiza no processo de dizimar seu sinal. Isso tem o efeito de diminuir o número de derivações efetivas (em termos de complexidade computacional) no filtro de dizimação. Além disso, se você precisar dizimar por um grande fator, as abordagens de vários estágios poderão ajudar a reduzir ainda mais sua carga. O livro introdutório de DSP de Lyons tem um bom material de fácil leitura sobre esses tópicos.

Dados parâmetros mais específicos do seu sistema, é possível fazer recomendações mais pontuais. Quais são os seus requisitos de design de filtro? Que tipo de recursos computacionais sua plataforma possui? Com qual taxa de amostra você vai dizimar?

Jason R
fonte
Dizimação polifásica é exatamente o que eu estava procurando! Obrigado =)
Phonon
@Phonon E se você quiser aumentar ainda mais, consulte as implementações 'CIC' (Cascade Integrator Comb). Essa é uma técnica geralmente usada quando a diferença nas taxas de amostragem é muito grande.
Spacey
Os filtros CIC são populares para implementações de hardware (como em FPGAs) porque não requerem multiplicação, apenas atrasos e acréscimos. Isso ocorre às custas de alguns graus de liberdade para a aparência da resposta do filtro. Se você possui requisitos rígidos para a resposta de frequência do dizimador, pode fazer melhor que as abordagens CIC, desde que possa acomodar a carga de trabalho.
Jason R
@JasonR Você despertou minha curiosidade - o que é melhor que o CIC? (Eu estou supondo que você ainda está falando sobre fazer melhor que CIC para FPGA ou estamos falando offline?)
Spacey
Meu comentário foi em referência ao fato de que você tem relativamente pouco controle sobre a resposta de frequência de um filtro CIC quando comparado a um filtro FIR geral, que você pode projetar para ter um corte arbitrariamente nítido se der tapinhas suficientes. Como na maioria dos problemas de design de filtro, você precisa de todas as especificações de desempenho da tabela para escolher a melhor abordagem.
Jason R
1

Quão baixo você quer dizer com "baixa latência"?

Se você quer dizer abaixo de 1 mS com uma grande redução na taxa de amostragem, pode ser necessário um FIR mínimo de fase. Se você quer dizer cerca de 1/30 de segundo, poderá implementar um filtro FIR de fase linear eficiente usando uma abordagem de adição / salvamento de sobreposição de FFT (convolução rápida).

hotpaw2
fonte
1

Um pouco de dificuldade com relação à complexidade do tempo: os filtros FIR são vetorizáveis, o que realmente ajuda nas arquiteturas modernas de CPU. Além disso, os filtros IIR sofrem um impacto no desempenho porque o valor atual de saída depende dos valores anteriores, o que remove a vantagem da tubulação.

MackTuesday
fonte