Método de Tustin, transformando circuitos analógicos em equivalentes digitais para uso em sistemas embarcados

método de tustin

Boas meus caros leitores, neste artigo iremos apresentar a vocês algo que já foi indiretamente demonstrado em artigos já escritos no Embarcados. Um método matemático simples que permite construir equivalentes digitais a partir de uma função de transferência de um circuito analógico.

Muito bem, mas aí você leitor me pergunta, que utilidade teria tal método no meu dia a dia profissional ou acadêmico? Para ilustrar a motivação deste artigo, considere o circuito RC abaixo:

First order RC circuit
Figura 1 – Circuito RC simples

Podemos dizer que o simples circuito acima se comporta também como um tipo trivial de filtro passa-baixas de primeira ordem, correto? Agora vamos considerar um adicional nesse caso. Desejamos mensurar um sinal no domínio analógico com nosso microcontrolador de 8 a 32 bits (a arquitetura aqui assumida é genérica), mas que dentro do seu espectro capturado, nos interessa filtrar uma única componente desse. Então, além do tradicional filtro anti-aliasing, precisamos desse filtro adicional externo, que então é projetado, simulado e atende as especificações que deseja-se ter.

Mas, aí você leitor, que leu a série de algortimos DSP publicadas aqui no Embarcados e decidiu que seria uma boa idéia levar esse filtro para dentro do seu microcontrolador – afinal filtros digitais não é uma ciência para poucos como defendo por aqui, ok, ponto pra você -, eis que você se dá conta: “Hum, mas eu já projetei esse excelente filtro analógico e não queria perder o trabalho que tive.”

Então eu digo, calma, você não precisa perder isso, esse artigo foi feito para você! Existe uma forma de levar seu modelo projetado no domínio de sinais contínuos para o domínio de tempo discreto, utilizando pouca matemática ou mesmo entregando essa função a um programa de cálculo numérico como MATLAB ou SCILAB.

Método de Tustin, ou transformada bilinear

Esse método, desenvolvido pelo professor Arnold Tustin (1899 – 1994), é uma das conhecidas técnicas de mapeamento de pólos e zeros de uma função de tempo contínuo para um sistema de deslocamento invariante discreto. De modo mais simplista, podemos escrever uma fução de um filtro digital H(z) a partir de um sistema invariante no tempo (LTI), um filtro analógico descrito por H(s). Para isso vamos considerar a seguinte informação que pode ser verificada em [1]:

bilinear1

Eis que aqui mapeamos um sinal  (ou componente dele) em uma possível sequência no domínio de tempo, discreto. Vamos agora tentar encontrar a variável em função da variável discreta z:

bilinear2

Utilizando uma aproximação baseada na série de Taylor [2], podemos resolver o logarítmo natural, assim obtendo:

bilinear3

Tendo como mapear s em completamos nossa transformada bilinear sendo definida como:

Transformada Bilinear
Transformada Bilinear

Resumindo, basta tomar a função H(s) e todas as variáveis acompanhadas por s  e devemos substituir pelo termo equivalente em z, e assim simplificar a expressão. Com isso vamos obter a função de transferência em tempo discreto do nosso chamado protótipo analógico.

Exemplo

Como exemplo, nada melhor que tomar o nosso pequeno circuito RC citado lá no começo. O primeiro passo é obter sua função de transferência, sendo trivial: 

bilinear4

Em seguida aplicamos a transformada bilinear como já explicado, obtendo:

bilinear5

Podemos simplificar a equação acima até obter a função de tranferência final na forma geral de um filtro IIR:

bilinear6

Obviamente manipulei bem para chegar nesse resultado, mas o leitor já pode usar a função de transferência de forma imediata se os valores de RC e a taxa de amostragem do sinal foram convenientemente obtidos. Como busquei chegar à forma geral de um filtro digital, os coeficientes são definidos abaixo:

bilinear7

Chegamos à função de transferência, basta agora tomar a transformada Z inversa e vamos chegar na equação de diferenças pronta para ser programada no nosso microcontrolador, e assim temos:

Equação de diferenças IIR
Equação de diferenças IIR

Para quem tem alguma dúvida nessa última passagem, sugiro iniciar uma leitura na série de algoritmos DSP com a placa Discovery da ST [3]. Para os já acostumados, aí está o nosso filtro trazido do mundo analógico e pronto para ser testado num microcontrolador.

Está certo, mas aquele leitor que pensa mais em produtivide ou mesmo não tem paciência de sair fazendo conta na mão deve estar se perguntando se podemos acelerar esse processo usando uma ferramenta de cálculo numérico. A resposta caro amigo, pra você que leu até aqui atentamente, é sim! Vamos mostrar como fazer isso utilizando o MATLAB, mas antes vale lembrar que a melhor saída aqui é já possuir a função de transferência previamente calculada (ou seja, R e C já definidos). Para tal vamos adotar: R = 10KOhm, C = 1uF.

Assim nossa função de transferência H(s) será:

bilinear9

Vamos plotar a resposta desse sistema a fim de escolher uma taxa de amostragem. Para tal vamos ao seguinte script: 

 E vamos obter a seguinte reposta a degrau:

Plot da resposta do filtro exemplo
Plot da resposta do filtro exemplo

Observando o plot, vimos que o sinal tem cerca de 40ms de rise time, logo vamos escolher uma taxa de amostragem possível para qualquer microcontrolador de 8 bits, 1000 Hz. Assim conseguiremos representar com boa fidelidade nosso sistema, e ainda satisfazer o critério de Nyquist. Para isso vamos usar a função interna do MATLAB “c2d”, responsável por fazer toda a conta que fizemos “na mão” e entregar a função de transferência discreta. Vamos adicionar ao nosso script então essa etapa escolhendo o método ‘tustin’ como um dos parâmetros. Portanto, nosso novo script será: 

O que nos dá as respostas a degrau comparadas. Percebam que como escolhemos uma taxa de amostragem suficientemente elevada, a resposta de Hz quase que se sobrepõe a Hs:

Resposta a dregau do sistema discreto e contínuo

Figura 2 – Resposta a dregau do sistema discreto e contínuo

Ainda no editor do MATLAB, ao retirarmos todos os ‘;‘ das instruções ao rodar o script, teremos seus resultados impressos no painel de controle bem como seus valores, vejam só:

Painel de controle com a função de transferência completa
Figura 3 – Painel de controle com a função de transferência completa

Vejam que inicialmente temos a função de domínio de tempo contínuo que já tinhamos derivado manualmente, e abaixo temos a função de transferência discreta, que se assemelha muito ao nosso modelo proposto. Repare que a única diferença é que ela se encontra em uma versão em que todos os termos estão deslocados uma amostra para o futuro, como é mais fácil trabalhar com amostras passadas aplicados a propriedade de deslocamento no tempo, e vamos obter a função de transferência exatamente igual ao nosso modelo. Essa tarefa vou deixar para vocês caros leitores, e que as dúvidas levemos para discutir no fórum.

Conclusão

É comum muitas vezes termos a ideia de levar um bloco de processamento analógico para dentro do nosso microprocessador, querendo aproveitar da capacidade numérica e ainda reduzir custos com circuitos externos e área de PCB. Porém a falta de um método de auxílio para “portar” o circuito eletrônico para um equivalente digital desencoraja muito nós que não queremos perder o tempo gasto no projeto. Métodos como a transformada bilinear que utiliza álgebra simples está aí para colaborar com a produtividade nossa do dia a dia. Espero que esse artigo tenha sido muito útil para você leitor, e que tenha facilitado sua rotina, então é isso, até a próxima!

Para aprender mais

O método da transformada bilinear possui um complemento à sua teoria, no geral muito importante para escolha dos coeficientes do filtro digital, chamado de frequency prewarp, os links [4], [5] e [6] são ideias para leitura desse complemento.

Referências 

[1] – OPPENHEIM, Alan V. – Discrete Time Signal Processing, 2010

[2] – http://en.wikipedia.org/wiki/Taylor_series

[3] – https://www.embarcados.com.br/algoritmos-dsp-com-placa-stm32f4discovery-parte/

[4] – http://en.wikipedia.org/wiki/Bilinear_transform

[5] – http://radio.feld.cvut.cz/matlab/toolbox/control/manipmod/ltiops20.html

[6] – http://www.mathworks.com/help/control/ug/discretize-a-compensator.html

[7] – POLEY, Richard – Introdutcion to Control using Digital Signal Processors, 2006

Website | Veja + conteúdo

Engenheiro de sistemas embarcados apaixonado pelo que faz, tendo experiencia, nos últimos 15 anos, em áreas de alta tecnologia como: Defesa, Automotiva, Agricultura, Robótica e Semicondutores. Possui paixão por compartilhar e desmistificar tópicos de engenharia tidos como complexos ou misteriosos demais. Atualmente trabalha na Espressif Systems levando seus chips para projetos Open-Source. No tempo livre constroi e programa seus próprios robôs e controladores de motor.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Comentários:
Notificações
Notificar
guest
3 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Talya Vasconcelos
Talya Vasconcelos
08/07/2018 17:06

Muito bom! me ajudou bastante a entender, ainda mais a linha de código….. obrigada!

Caio Pereira
Caio Pereira
19/01/2015 07:41

Felipe, muito legal sua série de artigos sobre DSP, extremamente útil e didática , parabéns!

Felipe Neves
Felipe Neves
Reply to  Caio Pereira
19/01/2015 13:14

Olá Caio, obrigado pelo comentário, o objetivo é esse mesmo, didática espero mesmo estar conseguindo atingir essa meta 🙂

Abs

Talvez você goste:

Séries

Menu