Você está na página 1de 12

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E

TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

Disciplina: Controle Digital


Professor: Ademar Gonçalves da Costa Júnior, Dr.
Período: 2021.1

Guia de Experimento

Módulo 1 – Introdução ao Matlab/Scilab em Controle


Digital

1. INTRODUÇÃO
Neste módulo, será apresentado um breve guia sobre o Matlab/Scilab e sua
aplicação em sistemas em tempo discreto. Também foram inclusos discussões quanto ao
uso do Scilab, que é gratuito e uma maneira alternativa de estudarmos sobre Sistemas de
Controle. No futuro, implementaremos discussões com o Python, também gratuito e que
vem crescendo nos últimos anos.
Há três elementos básicos no Matlab/Scilab: números, variáveis e operadores.
Números: o Matlab pode trabalhar com números inteiros, reais, complexos e
outros, com relatividade facilidade. O número real 1,23 é representado por 1.23 (usar
ponto e não a vírgula, pois o Matlab foi desenvolvido no sistema britânico), enquanto 4,56
x 107 pode ser escrito como 4.57e7. O número complexo 5+i5 será representado por
5+i*5 ou 5+j*5. No Scilab, para números complexos, você deve escrever −4+7*%i.
Variáveis: a variável básica no Matlab é a matriz, ou um array. O Matlab
suporta matrizes multidimensionais.
Matrizes: São quatro tipos de matrizes:
Escalar: matriz 1x1. Ex: a = a11;
Vetor coluna: matriz Nx1 de um arranjo vertical de números.

Vetor linha: matriz 1xN de um arranjo horizontal de números

Matriz geral: matriz NxN:

No Matlab (no Scilab, os comentários são escritos com //):


a = [3] %é um escalar;

Prof. Ademar G. Costa Junior – Controle Digital 1


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

x = [1 2 3] %é um vetor linha
y = [1; 2; 3] %é um vetor coluna
A = [1 2 3; 4 5 6; 7 8 9] %é uma matriz.

Operadores: o Matlab/Scilab provê diversos operadores aritméticos e lógicos.


No help do Matlab e do Scilab pode ser encontrada a lista completa.
• = igualdade;
• +, −, *, /, ^ adição, subtração, multiplicação, divisão e potenciação,
respectivamente;
• .* multiplicação de array (multiplicação de um escalar por uma matriz);
• ./ divisão de array;
• & lógica AND;
• | lógica OR;
• ' transposição.

2. OPERAÇÕES DE MATRIZES
Adição e subtração de matrizes. As matrizes tem que ser de mesmo tamanho;
Matriz conjugada: conj(A);
Matriz transposta: cada linha vira uma coluna, e vice-versa. A_ = A';
Multiplicação por um escalar: ab => a*b;
ax, onde x é uma matriz => a*x
Multiplicação de vetores/matrizes: Se as matrizes são compatíveis, y = A*x,
onde o resultado é uma matriz com o número de linhas igual ao número da primeira
matriz, e o número de colunas é igual ao número de colunas da segunda matriz;
Operações elemento com matriz: usa-se o ponto (.) com a operação desejada,
ou seja, .*, ./ .

3. OPERAÇÕES DE INDEXAÇÃO
O Matlab/Scilab provê uma forma de manipulação de matrizes, usando o
operador (:). Por exemplo, x =[a:b:c], gera números de a com incrementos. Se
é negativo, então esta matriz é decrementada no sentido de para .
Outro uso do operador (:) é formar vetores coluna de um vetor linha ou de uma
matriz. O fragmento x =A(:) forma um vetor x coluna de A, pela concatenação de suas
colunas. Similarmente, x=A(:,3) forma um vetor x a partir da terceira coluna de A.

Fluxo de controle: o uso da estrutura if-elseif-else. O formato dessa construção é:


if condição1
comando1
elseif condição2
comando2
else

Prof. Ademar G. Costa Junior – Controle Digital 2


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

comando3
end

ou seja, o comando1 será executado se a condição1 for satisfeita. Se não, será passado
para o comando2, e finalmente, o comando3.

Outro comando de fluxo é a estrutura for...end. O formato dessa construção é:


for indice = valor
programa
end

Um exemplo do uso

1
2 , 0 1
3
!

O código em Matlab, usando a estrutura for...end


t = 0:0.01:1;
xt = zeros(1,length(t));
for k = 1:3;
xt = xt+(1/3)*sin(2*pi*k*t);
end

Obs: o número pi no Scilab deve ser escrito dessa forma: %pi, ou seja, no
exemplo do código acima e abaixo: sin(2*%pi*k*t). Não esqueçam de realizar a
mudança em relação ao pi, caso estejam usando o Scilab nos próximos exemplos.

Usando uma estrutura em Matlab mais compacta:


t = 0:0.01:1;
k = 1:3;
xt1 = (ones(1,3)./3)*sin(2*pi* k'*t);
% foi criada uma matriz de linha unitária de três elementos para
a realização do cálculo de x(t)

4. GRÁFICOS
O Matlab e o Scilab provêm diversas funções para a criação de gráficos, desde
um simples gráfico bidimensional (2D) até gráficos mais complexos, com gráficos
multidimensionais coloridos. Um comando para criar gráfico 2D é o comando
plot(t,x), o qual gera um gráfico de valores em função de valores de . As matrizes
e devem ter o mesmo tamanho. Outras funções podem ser usadas, acrescentado
informações ao gráfico, tais como, xlabel e ylabel que são usados para colocar texto
nos eixos, e o comando title usado para prover um título.

Um exemplo (Figura 1):

Prof. Ademar G. Costa Junior – Controle Digital 3


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

t = 0:0.01:2; %pontos de t de 0 a 2 com incrementos de 0.01;


x = sin(2*pi*t); figure(1)
plot(t,x,'b'); % cria um gráfico com linha azul
xlabel('t em segundos'); ylabel('x(t)') % título dos eixos
title('Gráfico de sin(2\pi t)') % título do gráfico

OBS: Para escrever em Latex no Scilab, como nas funções xlabel, ylabel e title,
deve haver uma modificação, que é a utilização de um vetor de strings. Dessa forma, a
modificação seria para esse exemplo (você deve modificar para os demais exemplos):
title(['Gráfico de' '$sin(2{\pi}t)$'])

Para criar um gráfico de um conjunto de números discretos, usa-se o comando


stem, que mostra o conjunto de valores como uma haste, e um pequeno círculo no final
da linha (Figura 2).
figure(2)
Hs = stem(t,x,'b','filled');
xlabel('nt'); ylabel('x(n)') % título dos eixos
title('Gráfico discreto de sin(2\pi n)')

OBS: No Scilab, a função que pode substituir stem seria plot2d3. Nesse caso:
Hs = plot2d3(t,x); // existem outros parâmetros diferentes do Matlab.
Use o help do Scilab.

Figura 1 – Gráfico de 2*pi*t.

Prof. Ademar G. Costa Junior – Controle Digital 4


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

Figura 2 – Gráfico de 2*pi*n.

Outro comando para criação de gráficos é o comando subplot, o qual mostra


diversos gráficos em uma única figura, com eixos separados (Figura 3). No Scilab, para
substituir a função stairs do Matlab, você pode utilizar a função plot2d2(t,x)

figure(3)
subplot(3,1,1) % três, linhas, uma coluna, primeiro gráfico
plot(t,x,'b'); % cria um gráfico com linha azul
subplot(3,1,2) % três, linhas, uma coluna, segundo gráfico
Hs = stem(t,x,'b','filled');
subplot(3,1,3) % três, linhas, uma coluna, terceiro gráfico
Hx = stairs(t,x,'b');

Prof. Ademar G. Costa Junior – Controle Digital 5


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

Figura 3 – Gráficos de e em três linhas, em uma mesma figura.

5. GRÁFICOS DE SINAIS E SISTEMAS DISCRETOS NO


TEMPO
Seja uma sequência 2, 1, #1, 0, 1, 4, 3, 7 que pode ser representada no
Matlab como:
n = [-3:1:4]; x = [2, 1, -1, 0, 1, 4, 3, 7];
X = stem(n,x,'b','filled');

Obs: lembre-se que no Scilab, não existe a função stem e sim plot2d3. Veja o
comentário anterior.

Para gerar os dez primeiros pontos da função 0,9 ' , 0 10, os


seguintes comandos devem ser digitados:
n1 = [0:10]; x1 = (0.9).^n1;
Também pode ser criada com a estrutura for...end. Tente e compare os
resultados.

6. TRANSFORMADA Z
Propriedade da convolução
Seja ( 2( ) 3( ) 4 e ( 3( ) 4( ) 5( ) 6. Para fazer
( ( ∗ (
x1=[2 3 4];
x2 = [3 4 5 6];

Prof. Ademar G. Costa Junior – Controle Digital 6


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

x3 = conv(x1,x2)

Pode ser realizado a operação inversa, denominado deconvolução, usando


[p,r]=deconv(b,a), que calcula o resultado dividindo b por a em um polinômio - e
um resto ..
x3 = [6 17 34 43 38 24]; x1 = [2 3 4];
[x2,r]=deconv(x3,x1)

No Scilab, não existe a função deconv e sim pdiv, porém sua formação é
diferente. Além da declaração da variável para formar os polinômios (usaremos a
variável z), o polinômio precisa ser declarado da direita para a esquerda (da ordem
menor para a ordem maior). O resultado também é o mesmo, porém sua apresentação
difere do Matlab. Veja o exemplo com os mesmos polinômios anteriores.
z=poly(0,"z")
x3=24+38*z+43*z^2+34*z^3+17*z^4+6*z^5;
x1=4+3*z+2*z^2;
[x2,r]=pdiv(x3,x1)

7. TRANSFORMADA Z INVERSA
A função residue calcula a parte residual e os termos do polinômio de uma
função racional. Deste modo, [R,p,C]=residue(b,a), calcula os resíduos, polos e
termos diretos de / ( no qual dois polinômios 0 ( e ( são dados pelos vetores
e , respectivamente.
Similarmente, [b,a]=residue(R,p,C) com três argumentos de entrada e dois
argumentos de saída, converte a expansão em fração parcial em dois polinômios.
Exemplo: Considere a função de transferência
(
/ (
3( # 4( ) 1
Digite: num = [1 0]; den=[3 -4 1]; [R,p,C]=residue(num,den)

Resposta:
R =
0.5000
-0.1667

p =
1.0000
0.3333

C =
[]

O que fornece:

Prof. Ademar G. Costa Junior – Controle Digital 7


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

1/2 0,1667
/ ( #
(#1 ( # 0,333

Obs: No Matlab, a função residuez difere da função residue, no fato que a


primeira realiza o cálculo dos resíduos, polos e termos diretos em (z-1).
Obs 2: No Scilab, é um pouco diferente do que foi exposto com o Matlab.
den = poly([1 4 3],'z','c') //o polinômio deve ser escrito com
os coeficientes na ordem inversa, declarando que será na variável z e
baseado em seus coeficientes. Maiores informações use help poly
num = poly([0 1],'z','c')
Hz1 = syslin('d',num/den) //criado a função de transferência no
tempo discreto
roots(Hz1.den) //fornece as raízes do denominador
pfss(Hz1) // fornece os resíduos da expansão em frações
parciais

Outra maneira para verificar os resíduos da expansão em frações parciais de uma


função transferência e declarando os polinômios de forma simbólica.
z = poly(0,'z') // cria a variável z para ser usada no polinômio
numerador = z
denominador = 3*z^2-4*z+1
Hz2 = syslin('d',numerador/denominador)
pfss(Hz2) // fornece os resíduos da expansão em frações
parciais

8. GRÁFICOS DE PÓLOS E ZEROS


Para que seja criado um gráfico indicando a localizando dos polos e zeros de um
sistema de tempo discreto por potência negativa na função de transferência, usa-se a
função zplane.
Para potência positivas, utiliza-se a função pzmap.
Um exemplo. Seja
(
/ (
( # 0.9
Digite no Matlab: b = [1 0]; a=[1 -0.9]; sysd=tf(b,a,[]);
pzmap(sysd)
O resultado é ilustrado na Figura 4.

Prof. Ademar G. Costa Junior – Controle Digital 8


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

Figura 4 – Polos e zeros, gerado com a função zplane.

No Scilab, deve-se declarar os polinômios como estabelecido na Obs 2 da seção


7 deste guia e digitar: plzr(Hz1). Adapte para a função de transferência para a função
zplane.

9. SOLUÇÕES DE EQUAÇÕES DIFERENÇA


Seja uma função de transferência
0,2838( ) 0,1485
2 (
( ) 0,3 ( ) 0,4
Escrevendo em termos de potências negativas de z, tem-se:
0,2838( 4 ) 0,1485( 4 5 (
2 (
1 ) 0,7( 4 ) 0,12( 4 6 (
com 5 ( , sendo a saída e 6 ( , a entrada do sistema dinâmico.
Aplicando a transformada inversa e a propriedade do atraso, obtém-se a equação
de diferenças:
7 #0,77 # 1 # 0,127 # 2 ) 0,28388 # 1 ) 0,14858 #2
Sabendo que 7 0 7 1 7 2 0, e que 8 é um impulso

Duas formas de calcular os C primeiros valores de equações diferença (Matlab


ou Scilab. Lembre-se que o comentário em ambos são escritos de forma diferentes):

Prof. Ademar G. Costa Junior – Controle Digital 9


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

N = 20;
for i = 1:N
if i<=2
y(i)=0;
u(i)=0;
else
u(3)=1; %%% resposta ao impulso
u(i) = 0;
y(i)= -0.7*y(i-1)-0.12*y(i-2)+0.2838*u(i-1)+ 0.1485*u(i-2);
end
end

plot(y)

PERGUNTA: Ao aplicar um degrau na entrada 8 , qual seria a diferença na


programação da rotina anterior?

No Matlab e no Scilab, o comando filter, é uma outra forma de resolver uma


equação diferença, implementado dessa forma: y=filter(b,a,x,xic), o qual e
são o numerador e o denominador da função de transferência, respectivamente, é a
uma matriz de entrada, e D é uma matriz de condições iniciais.
Dessa forma, a implementação é desse tipo:
N = 20;
num = [0.2838 0.1485];
den = [1 0.7 0.12];
%%%%% outra forma de implementar
X = zeros(1,N);
X(1)=1;
ximp = X; % [1 zeros(1, 15)];
xstp = ones(1,N);
yimp = filter(num, den, ximp);
ystp = filter(num, den, xstp);

10. ESTUDO DA RESPOSTA TRANSITÓRIA DE UM


SISTEMA DISCRETO
No Matlab, para obter a resposta ao degrau de amplitude A deverá usar a função
dstep. Essa função aceita como parâmetros de entrada, os vetores com os coeficientes
do numerador e denominador da função de transferência do sistema discreto e o número
de pontos (C) a considerar no cálculo.
xstep = dstep(A*numD,denD, N)

Considere a função de transferência em z:


1
2 (
( # 0.3( ) 0.5

Prof. Ademar G. Costa Junior – Controle Digital 10


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

Use a função dstep com C 51 para obter os valores da resposta do sistema a


uma entrada em degrau unitário. Para gerar o gráfico dos pontos obtidos use a função
stairs (Figura 6).
numD=[1];
denD=[1 -0.3 0.5];
xstep = dstep (numD,denD,51);
t = 0:0.05:2.5;
stairs(t,xstep)

Figura 6 – Resposta ao degrau, usando a função dstep.

Da mesma forma, use a função dimpulse para obter a reposta ao impulso


unitário (Figura 7).

Figura 7 – Resposta ao degrau, usando a função dimpulse.

Prof. Ademar G. Costa Junior – Controle Digital 11


INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E
TECNOLOGIA DA PARAÍBA
CAMPUS DE JOÃO PESSOA
Av. Primeiro de Maio, 720 – Jaguaribe
João Pessoa – PB CEP: 58015-430
Tel: (83) 3612-1200 – Fax: (83) 3612-1201

No Scilab, para a realização no domínio discreto no tempo, tem-se que utilizar a


função dsimul. Dessa forma, utilizando o mesmo exemplo do Matlab:
z = poly(0,'z');
h = (1)/(z^2-0.3*z+0.5);
sl = tf2ss(h); // converte uma f.t em espaço de estados
u = zeros(1,20);u(1)=1;
x1 = dsimul(sl,u) //resposta impulsiva
u = ones(1,20);
x2=dsimul(sl,u); //resposta ao degrau
plot2d2(x1)
plot2d2(x2)

Atividades pós-laboratório:
1 – Cada aluno desenvolverá o seguinte roteiro de experimento:
Dada uma função de transferência em z enviada ao grupo, façam os seguintes
procedimentos:
a) Por meio de frações parciais, calcule analiticamente e pelo Matlab, a
transformada z inversa. Também expresse a equação de diferença da função de
transferência;
b) Mostre o diagrama de polos e zeros da função de transferência, indicando o(s)
polo(s) e o(s) zero(s) do sistema;
c) Gere o gráfico dos 70 primeiros pontos da equação de diferença, aplicando à
entrada um degrau de amplitude igual a -1,30 e um impulso de amplitude
igual a +0,9;
d) Gere o gráfico da resposta ao degrau e a resposta ao impulso do sistema, com os
valores do item c, utilizando as funções dstep e dimpulse, comparando-as com
os gráficos do item c, em um mesmo gráfico, para cada.

Todos os resultados devem ser comentados no relatório, incluindo uma


conclusão final dos resultados!!!!

Prof. Ademar G. Costa Junior – Controle Digital 12

Você também pode gostar