De quantos toques um filtro FIR precisa?

20

Estou procurando projetar um conjunto de filtros FIR para implementar um filtro passa-baixo. Também estou tentando reduzir a latência do sinal através do filtro, para saber qual será o número mínimo de toques que posso usar.

Sei que mais toques podem levar a um corte mais nítido da frequência e a uma melhor rejeição da banda, etc. No entanto, o que me interessa é mais fundamental - se eu quiser implementar um filtro passa-baixo com corte em diga que isso significa que eu preciso de pelo menos 100 toques para atenuar os sinais de frequência mais baixa? Ou posso me safar com menos torneiras e, em caso afirmativo, existe algum limite inferior teórico?fs100

Tommy
fonte

Respostas:

24

Citando o clássico Processamento digital de sinais de Bellanger - Teoria e prática , o ponto não é onde está sua frequência de corte, mas quanta atenuação você precisa, quanta ondulação no sinal que deseja preservar pode tolerar e, o mais importante, como restringir sua transição da faixa de passagem para a faixa de parada (largura da transição) precisa ser.

Suponho que você queira um filtro de fase linear (embora você especifique uma latência mínima, não acho que um filtro de fase mínimo seja uma boa ideia, em geral, a menos que você saiba muito bem o que fará com seu sinal posteriormente) . Nesse caso, a ordem do filtro (que é o número de toques) é

N23registro10[110δ1δ2]fsΔf

com

fs a taxa de amostragemΔf a largura de transição, ie a diferença entre o fim da banda de passe e o início da banda de paradaδ1 a ondulação na banda passante, ie "quanto da amplitude original você pode dar ao luxo de variar"δ2 a supressão na banda de parada.

Vamos conectar alguns números! Você especificou uma frequência de corte de ; portanto, seguirei em frente e afirmo que a largura da sua transição não será mais da metade disso, então .fs100Δf=fs200

Vindo da tecnologia SDR / RF, 60 dB de supressão geralmente são totalmente suficientes - o hardware, sem custos absurdos, não será melhor em manter os sinais indesejados fora da sua entrada, então, não deixe de desperdiçar a CPU com um filtro fantástico melhor do que o seu hardware pode fazer. Portanto, .δ2=-60 dB=10-3

Digamos que você possa viver com uma variação de amplitude de 0,1% na banda passante (se você pode viver com mais, considere também tornar o requisito de supressão menos rigoroso). Isso é .δ1=10-4

Então, conectando isso:

NO filtro de Tommy23registro10[110δ1δ2]fsΔf=23registro10[11010-410-3]fsfs200=23registro10[11010-7]200=23registro10[110-6]200=23(registro10106)200=236200=800 .

Portanto, com suas 200 torneiras, você está longe, se você usar uma faixa de passagem extremamente estreita em seu filtro, como eu supunha.

Observe que isso não precisa ser um problema - em primeiro lugar, um filtro de 800 torneiras é assustador, mas, francamente, apenas à primeira vista:

  • Como testei nesta resposta no StackOverflow : Atualmente, a CPU é rápida , se você usar a implementação de FIR otimizada para CPU de alguém. Por exemplo, usei a implementação FFT-FIR do GNU Radio com exatamente o esquema de especificação de filtro acima. Consegui um desempenho de 141 milhões de amostras por segundo - isso pode ou não ser suficiente para você. Então, aqui está o nosso caso de teste específico da pergunta (que levou alguns segundos para produzir):Filtragem FFT FIR baseada em GNU Radioresultados da taxa: rate_avg = 1.40982e + 08
  • Dizimação: se você quiser manter apenas uma fração da largura de banda de entrada, a saída do filtro será drasticamente superamostrada. A introdução de uma dizimação de significa que seu filtro não fornece todas as amostras de saída, mas apenas as uma - o que normalmente levaria a muitos e muitos aliases, mas como você está erradicando todo sinal que poderia ter alias, você pode savely fazê-lo. Implementações inteligentes de filtros (dizimadores polifásicos) podem reduzir o esforço computacional por M dessa maneira. No seu caso, você pode dizimar facilmente e, em seguida, seu computador precisará calcularMMM=50.120050.=24multiplicações / acumulações por amostra de entrada - muito, muito mais fácil. Os filtros no GNU Radio geralmente têm essa capacidade. E dessa maneira, mesmo fora da FFT FIR (que não se presta muito bem a uma implementação de dizimador polifásico), posso extrair outro fator de 2 no desempenho. Não posso fazer muito mais. Isso é bem parecido com a largura de banda da RAM, na minha experiência, no meu sistema. Para
  • Latência: não se importe com isso. Realmente, não, a menos que você precise. Você está fazendo isso com taxas de amostragem de áudio típicas? Lembre-se de mencionados acima. Portanto, o tempo gasto computando a saída do filtro será relevante apenas para o fluxo de sinal ao vivo do MS / s. Para DSP com dados offline: bem, adicione um atraso a qualquer sinal que você tenha paralelamente ao seu filtro para compensar. (Se o seu filtro for de fase linear, o atraso será metade do comprimento do filtro.) Isso pode ser relevante na implementação de hardware do filtro FIR.96kSsridiculamente141SENHORAs
  • Implementação de hardware: talvez a CPU e o SO do seu PC ou dispositivo incorporado realmente não permitam cumprir suas restrições de latência e, portanto, você está procurando FIRs implementados em FPGA. A primeira coisa que você notará é que, para o hardware, existe um paradigma de design diferente - um "Eu suprimo tudo, exceto1100da minha taxa de entrada "O filtro precisa de uma largura de bits grande para os números de pontos fixos que você manipularia no Hardware (em oposição aos números de pontos flutuantes em uma CPU). Esse é o primeiro motivo pelo qual você normalmente dividiria esse filtro em vários , filtros FIR em dizimação menores e em cascata. Outro motivo é que você pode, com cada "etapa" em cascata, permitir que seus multiplicadores (normalmente, "fatias DSP") sejam executados em uma taxa mais baixa e, portanto, multiplexá-los (número de fatias DSP normalmente, é muito limitado), usando um multiplicador para vários toques.Outra razão é que especialmente os filtros de meia banda, ou seja, passagens baixas que suprimem metade da banda de entrada e fornecem metade da taxa de entrada, são muito eficientemente implementáveis ​​em hardware (pois possuem metade as torneiras são zero, algo difícil de explorar em uma implementação de CPU / SIMD).
Marcus Müller
fonte
3
O Lake DSP estava executando 256.000 filtros FIR em tempo real em meados do início dos anos 90. 1200 torneiras? Phfffft! ;-)
Peter K.
2
@PeterK. Esse é o espírito! O profundo respeito por esse FIR de 256kT - a precisão numérica com a qual eles construíram deve ter sido tão impressionante quanto o tamanho do projeto. Sendo muito jovem para apreciá-los tecnologicamente, o início dos anos 90 deve ter sido um momento interessante. Conversei com um engenheiro há algum tempo que fazia os ICs da DFT naqueles dias; a necessidade de ASICs de DSP específicos de aplicativos parecia alta quando as pessoas perceberam o que era possível em plataformas DSP, de acordo com o DSP, para lidar com os fluxos de dados resultantes, mas sem aceleradores "de múltiplos propósitos" (ao contrário de hoje).
Marcus Müller
@PeterK., Sim, mas esses australianos estão sempre puxando nossa perna.
Robert Bristow-johnson
@ robertbristow-johnson oy amigo, que piada interna está acontecendo aqui: D?
Marcus Müller
2
@ MarcusMüller, embora não parecia ser um aumento da popularidade de ASICs para trás, em seguida, em comparação com agora (e eu acho que é porque todos que foi uma especificação ASIC / designer, então agora só usa FPGAs) não eram "polivalentes" DSPs de volta no início anos 90. que o LakeDSP foi feito ou 6 DSP56001.
Robert Bristow-johnson
14

Para uma estimativa rápida e muito prática, eu gosto da regra de ouro de Fred Harris:

Ntumaps=UMAtten22BT

Onde:

Atten é a atenuação desejada em dB,

BTBT=Fstop-FpumassFs

FstopFpumass

Fs

Isso fica muito próximo do que você obteria com um filtro de fase linear com uma ondulação de banda passante de 0,1 dB. Utilizo essa regra geral frequentemente para ter uma idéia inicial do número de torneiras necessárias e depois modificá-las através da iteração no processo de design do filtro.

Observe também: essa regra geral fornece uma excelente visão sobre o que realmente impulsiona o número de toques: interrompa a atenuação da banda e a inclinação da banda de transição (e ondulação da banda passante, mas geralmente - pelo menos para os filtros que eu tive que projetar para aplicativos de comunicação sem fio - o requisito de atenuação dominaria a ondulação). Portanto, sua pergunta ao declarar um ponto de corte em Fs / 100 está ausente com a rapidez com que você precisa fazer a transição para uma banda de parada.

FsFpumassFstop

Ntumaps=60222/100=137

Brincar com esses números também pode demonstrar a importância do processo de redução usando abordagens de dizimação.

Dan Boschen
fonte
7

Adicionando à resposta aceita algumas referências adicionais. Não escreverei as fórmulas que podem estar envolvidas. Essas fórmulas geralmente produzem regras de ouro ou aproximações para começar. Você pode mexer nesses números para o seu design real.

Uma das origens do projeto de Bellanger é: Sobre complexidade computacional em filtros digitais, 1981, Proc. EUR. Conf. Projeto da teoria de circuitos, M. Bellanger. É bastante difícil de obter, mas é factível . Curiosamente, ele também especifica fórmulas para avaliar o número de bits por coeficiente, que devem ser considerados na implementação aritmética finita. Uma versão mais acessível em francês é: Evaluation of the complexité des filtres numériques , 1982.

Várias outras fórmulas são reunidas no projeto de filtro de resposta a impulso finito , Handbook for digital signal processing, 1993, T. Samamaki.

Mais recentemente, você pode ler Estimativa precisa do comprimento mínimo do filtro para filtros digitais FIR ideais , 2000, K. Ichige et al.

Por fim, o papel Projeto eficiente de filtros FIR com pedidos mínimos de filtro usando a otimização da norma 10 , 2014 afirma um projeto em que a ordem é gradualmente diminuída.

Laurent Duval
fonte
4

minimizar max(|H(ω)|)para todos ω na faixa de parada
sujeito a1δ|H(ω)|δ para todos ω na banda passante

Os principais problemas práticos em que posso pensar seriam o número de amostras de frequência usadas ao fazer a otimização, pois o comportamento da amostra entre frequências pode causar efeitos indesejados. A qualidade do ajuste depende, obviamente, do número de torneiras. Eu acho que você poderia dizer que o número mínimo de toques é quando o problema se torna inviável. Portanto, uma solução seria resolver o problema de viabilidade.

Arnfinn
fonte