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) é
N≈ 23registro10[ 110 δ1δ2]fsΔ f
com
fsΔ fδ1δ2 a taxa de amostragem a largura de transição, ie a diferença entre o fim da banda de passe e o início da banda de parada a ondulação na banda passante, ie "quanto da amplitude original você pode dar ao luxo de variar" 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 Tommy≈ 23registro10[ 110 δ1δ2]fsΔ f= 23registro10[ 110 ⋅ 10- 4⋅ 10- 3]fsfs200= 23registro10[ 110 ⋅ 10- 7]200= 23registro10[ 110- 6]200= 23( log10106)200= 23⋅ 6 ⋅ 200= 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):
- 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= 50120050.= 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.96kSs≪ridiculamente141SENHORAs
- 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).
Para uma estimativa rápida e muito prática, eu gosto da regra de ouro de Fred Harris:
Onde:
Atten é a atenuação desejada em dB,
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.
Brincar com esses números também pode demonstrar a importância do processo de redução usando abordagens de dizimação.
fonte
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.
fonte
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.
fonte