Existem formulários de implementação padrão para filtros Butterworth ajustáveis?

17

Uma das maneiras padrão de implementar um filtro Butterworth é com uma cascata de seções de segunda ordem, cada uma correspondendo a um par de pólos conjugados complexos. Para um filtro de quarta ordem, por exemplo, haveria duas seções de segunda ordem. Se considerarmos como as localizações dos pólos para um filtro passa-baixo mudam no plano z, à medida que o ponto de corte é projetado entre 0hz e Nyquist, o caminho "varrido" por cada par de pólos corresponde a um par de arcos dentro do círculo unitário , conforme ilustrado na figura a seguir [para filtros de quarta ordem]:

Posições de pólo no plano Z para filtros de passa baixo Butterworth de quarta ordem

Dado o tempo que esses filtros existem e o fato de esses "arcos" corresponderem a linhas retas no plano s, é lógico que alguém teria desenvolvido um formulário de implementação com um único parâmetro capaz de varrer os polos ao longo dos arcos no "tempo de execução" [em oposição ao "tempo de design"]. No entanto, ainda não encontrei nada assim.

É relativamente simples propor várias maneiras de fazer isso, especialmente em segmentos do intervalo, e com a disposição de oferecer um pouco de computação extra. O que eu quero saber é o seguinte:

Existe alguma maneira padrão de implementar um filtro Butterworth [digital] sintonizável de uma determinada ordem que 1) possua propriedades ideais (por exemplo, eficiência, robustez) e 2) cubra toda a faixa?

Ou esse é realmente um problema tão fácil que ninguém se incomoda em falar sobre isso? Se for esse o caso, parece que ele apareceria em programas de design de filtro ao lado das opções para designs "estáticos".

Eu achei isso: A finalidade dos filtros múltiplos Butterworth com freqüência de corte variável , mas a princípio pesquisando não parece ser muita informação sobre o que está nele.

Atualização (re: respostas)

Só para ficar um pouco mais claro:

  • Estou procurando um "meta-design" com um parâmetro (digamos de [0,1]) que ajuste automaticamente o ponto de corte de DC para Nyquist (mantendo o ganho normalizado) para uso em um sistema de variação temporal. Algo como esse ressonador bipolar , exceto com restrições de Butterworth. A idéia é que calcular o parâmetro seja mais eficiente do que executar o procedimento de design offline típico em tempo de execução.
  • Não estou necessariamente procurando como projetar um "meta-filtro" (por exemplo, fazer a matemática com variáveis ​​em vez de números); estou pensando se há opções para formas de implementação padrão (não óbvias) - porque, por exemplo, a abordagem direta que corresponde ao caso estático acaba tendo problemas numéricos no caso de variação temporal.
  • Talvez não haja problemas, e a abordagem direta é a que é usada na prática. Isso seria bom. Minha preocupação é que eu não tenha visto esse tópico mencionado explicitamente em nenhuma das fontes que consultei, mas talvez tenha perdido algo realmente óbvio, por isso estou perguntando.
  • No processo de adicionar mais detalhes aqui, deparei-me com um tratamento geral de estruturas paramétricas de biquad, que é quase o que estou procurando (e tem algumas boas referências).

Atualização 2

Estou procurando respostas como a que eu coloquei no meu segundo comentário para Jason R, da seguinte forma:

"Ah, sim, você deseja usar a parametrização III-2b da tese do tipo" tal ou tal ", na forma de treliça de estado derivado, porque resolve o caso de tal e qual borda usando o número mínimo de multiplicações."

Talvez nada disso exista, mas minha pergunta é se existe, e se sim, o que é, ou onde posso encontrá-lo?

Jackpot

Com base em uma referência à "forma canônica do observador" fornecida por Tim Wescott no tópico comp.dsp na resposta de Jason R , decidi assumir que talvez tivesse que começar a procurar na literatura dos sistemas de controle, então tentei fazer uma busca por "espaço de estado" de butterworth , e resultou o seguinte, muito legal, tratamento de projeto / implementação, não apenas os parâmetros paramétricos de Butterworth, mas também os filtros Chebyshev e Elliptic:

Sophocles J. Orfanidis, "Design Paramétrico Digital de Alta Ordem do Equalizador", J. Audio Eng. Soc. Vol. 53, pp. 1026-1046, novembro de 2005.

Vai demorar um pouco para investigar, mas com base no que li até agora, ficaria muito surpreso se não fosse o que estou procurando. Estou entregando este a Jason R pela referência comp.dsp que me levou ao artigo da Orfanidis. Sua resposta também é uma boa visão prática do design de filtros Butterworth também.

datagrama
fonte

Respostas:

10

Não sei exatamente o que você está procurando. Como você observou na sua pergunta, as funções de transferência da família de filtros Butterworth são bem compreendidas e facilmente calculadas analiticamente. É bastante simples implementar uma estrutura de filtro Butterworth que pode ser ajustada por ordem do filtro e frequência de corte:

  1. Com base na ordem do filtro selecionada, na frequência de corte e na taxa de amostragem, calcule as localizações dos pólos do filtro de protótipo analógico Butterworth. Como os filtros Butterworth não possuem zeros, a função de transferência é determinada pela localização dos pólos (e pelo ganho DC).

  2. Usando a transformação bilinear , mapeie as localizações dos pólos do protótipo analógico para as respectivas localizações na sua realização digital do filtro.

  3. Novamente, o filtro digital é definido pelos locais dos pólos encontrados na etapa 2. Divida o filtro em seções de segunda ordem , agrupando os pólos em pares.

É isso aí. Como eu disse, é fácil projetar programaticamente um filtro Butterworth usando quaisquer parâmetros que você possa precisar; nenhuma das operações é terrivelmente complicada de implementar.

Editar: não tenho certeza do resultado final que você está procurando. Acho que você está mais interessado em como implementar filtros IIR com coeficientes variáveis ​​no tempo, não necessariamente específicos para um filtro Butterworth. Presumo que seu objetivo é minimizar artefatos ao alterar a frequência de corte do filtro; isso foi abordado em uma discussão no grupo de notícias comp.dsp no início deste ano. Embora não tenha certeza de quais são os seus casos de uso ou requisitos para essa estrutura de filtro, existem várias maneiras de realizar a alternância.

Sei que você disse que gostaria que seu filtro tivesse um único parâmetro que define a frequência de corte, mas o fato é que sua estrutura sintonizável deve ter uma maneira de converter a frequência de corte nos coeficientes necessários (ou no caso Butterworth, apenas o pólos). O processo que descrevi acima é apropriado para gerar as localizações dos pólos com base na taxa de amostra normalizada desejada.

Você poderia potencialmente simplificar o processo de cálculo da localização do pólo analisando a geometria dos locais dos pólos do filtro digital no plano z. O filtro analógico Butterworth possui pólos que ficam em um semicírculo na metade esquerda do plano s; a transformação bilinear mapeia esse semicírculo no padrão de aparência elíptica que você ilustrou na descrição da sua pergunta. Usando esse padrão conhecido nos pólos do filtro analógico Butterworth, na função de mapeamento da transformada bilinear e em alguma álgebra, você poderá criar uma expressão relativamente simples para as localizações dos pólos do filtro digital, oferecendo assim um filtro mais direto ação de ajuste.

Jason R
fonte
Jason, não estou procurando como projetar uma determinada especificação Butterworth, estou procurando um "meta-design". Vou atualizar a pergunta com um pouco mais de detalhes.
datageist
1
Re: Editar. O processo que você descreveu no último parágrafo é exatamente como eu o abordaria - estou me perguntando se isso realmente foi abordado em algum lugar. Em outras palavras, coisas como "Ah, sim, você deseja usar a parametrização III-2b da tese do tipo" tal e tal ", na forma de treliça de estado derivado, porque resolve o caso de tal e qual borda usando o número mínimo de multiplicações. "
datageist
1
Pequeno comentário exigente: no plano Z, o filtro BW tem zeros. Para filtros passa-baixo, todos estão em -1 e para filtros passa-alto, são +1.
Hilmar
@ Hilmar: Bom ponto. Os zeros dos quais você fala correspondem aos zeros que ocorrem como no plano (para filtros passa-baixo; como para passa-alto ). s±ss0 0
Jason R
2

Sim, existem formulários de implementação padrão para o Butterworth e quase todas as outras respostas de filtro. Todos eles estão totalmente implementados na minha biblioteca de filtros IIR de código aberto. Aqui está um trecho de código que produz os pares pólo / zero para um filtro Butterworth de grau arbitrário:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

Como você pode ver, a posição dos polos é calculada subdividindo o plano s em "pares" de segmentos iguais.

É fornecido código adequado para todos os tipos comuns de respostas de filtro: Chebyshev, Elliptic, Legendre, incluindo as versões de prateleira de cada uma.

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Captura de tela

Vinnie Falco
fonte
A biblioteca DSPFilters aborda diretamente o caso de uso contemplado pela pergunta original, utilizando uma equação parametrizada para calcular pares de pólo / zero de um filtro digital em tempo de execução. Vou alterar a resposta para incluir também um trecho de código-fonte.
Vinnie Falco