Este não é realmente um problema específico do MATLAB; Vejo mais algumas perguntas gerais:
Como você implementa um filtro IIR digital?
Você pode aplicar qualquer filtro digital geral, convocando sua resposta de impulso com o sinal que deseja filtrar. Isso se parece com:
y[ n ] =∑k = 0N- 1x [ k ] h [ n - k ]
Isso funciona muito bem para filtros FIR , mas você encontra complicações nos sistemas IIR , porque as respostas de impulso são infinitamente longas (N→ ∞na soma acima). Isso dificulta o cálculo da saída do filtro usando a soma direta de convolução acima. Para realmente implementar um filtro IIR, precisamos de uma maneira de expressar a saída do filtro de maneira mais computacionalmente tratável.
O atributo de um filtro IIR que torna sua resposta a impulsos infinitamente longa é a natureza recursiva do sistema ; há feedback da saída de volta para a entrada do filtro. Isso significa que a saída de um filtro IIR em um determinado instante de tempo pode depender de duas fontes de informações separadas:
O sinal de entrada para o filtro, passado e presente, e
Valores passados do sinal de saída do filtro.
Isso leva à representação da equação da diferença do sistema IIR:
uma0 0y[ n ] =∑k = 1M- 1umaky[ n - k ] +∑k = 0N- 1bkx [ n - k ]
Essa representação ilustra que podemos implementar um filtro IIR calculando uma soma ponderada de M saídas passadas do filtro e N entradas passadas do filtro (na prática, N e Mpoderia e muitas vezes são os mesmos; a ordem do filtro quando definida como acima ém a x ( M, N) - 1) Essa é uma expressão de forma fechada que captura o comportamento do filtro completamente, adequada para implementação automatizada, e é a equação mencionada no trecho de ajuda do MATLAB que você mostrou na sua pergunta. Observe queuma0 0 é quase exclusivamente assumido como igual a 1 1; Eu o incluí apenas porque é mostrado no texto de ajuda citado, referenciado como a(1)
.
Portanto, para responder especificamente à sua pergunta, como o texto sugere, o MATLAB implementa sistemas IIR usando a equação acima. Ao projetar um filtro IIR com MATLAB ou outro, você obtém dois conjuntos de coeficientes (umak e bkna equação da diferença) que definem como ponderar as entradas e saídas do filtro na implementação do filtro. Existem algumas outras sutilezas que às vezes são relevantes; por exemplo, o texto refere-se ao uso de uma realização "transposta de forma direta II" do filtro. Você aplica o filtro calculando a equação da diferença acima para cada amostra de saída desejada.
De fato, existem várias topologias que podem ser usadas para implementar filtros digitais, cada uma com suas próprias vantagens e desvantagens. O DF2T é frequentemente usado devido à sua estrutura mais eficiente (contém um número mínimo de elementos de atraso) e à sua robustez aprimorada ao erro de arredondamento (uma vez que os coeficientes feedforwardbk são implementados primeiro).
Como o MATLAB cria filtros Butterworth?
A documentação para a butter
função não especifica como ela gera a aproximação discreta do protótipo do filtro analógico Butterworth . No entanto, ao espreitar butter.m
, você encontra:
% step 5: Use Bilinear transformation to find discrete equivalent:
if ~analog,
[a,b,c,d] = bilinear(a,b,c,d,fs);
end
Parece que ele usa a transformação bilinear para mapear o protótipo de filtro Butterworth para uma realização de filtro digital.