Considere a EaD:
y[k+3]-2,2 y[k+2]+1,57 y[k+1]-0,36 y[k]=e[k]
em que:
  • e(k)=l1, para k >= 0, 0, para k<0 ;
  • y[0]=y[1]=y[2]=0.
    a) Escreva um algoritmo computacional que calcule y[k]. Execute o algoritmo para obter: y[3], y[4], cdots, y[25];
    b) Usando a técnica sequencial, confira o resultado y[k], para 0 <= k <= 5;
    c) Use a transformada Z e o método das séries de potências para verificar resultado y[k], para 0 <= k <= 5;
    d) Escreva um código compatível com a plataforma Arduino para realizar a EaD, em loop infinito, sabendo que o sinal e[k] é obtido pela conversão AD do sinal e(t) (utilizar linguagem C ).

Passo 1

O enunciado define a equação de diferenças
y[k+3] - 2,2,y[k+2] + 1,57,y[k+1] - 0,36,y[k] = e[k]
com e[k]=1 para k>=0 e e[k]=0 para k<0, e condições iniciais y[0]=y[1]=y[2]=0.
Conteúdo: métodos numéricos para equações de diferenças, transformada Z e programação em C para Arduino.

Passo 2

Escrevemos um algoritmo recursivo direto (pseudocódigo):
Para k=0,1,2:;y[k]=0
Para k=0 até 22:; y[k+3]=2,2,y[k+2];-1,57,y[k+1];+0,36,y[k];+;e[k] é
onde e[k]=1 se k>=0. Depois imprimimos y[3] até y[25].

Passo 3

Executando o algoritmo para k=3,dots,25 obtemos (aprox. 4 casas decimais):
y[3]&=1,0000, y[4]=3,2000, y[5]=6,4700, y[6]&=10,5690, y[7]=15,2481, y[8]=20,2801, y[9]&=25,4625, y[10]=30,6670, y[11]=35,8059, y[12]&=40,4463, y[13]=44,8548, y[14]=49,0588, y[15]&=53,0502, y[16]=56,8174, y[17]=60,3047, y[18]&=63,5851, y[19]=66,6691, y[20]=69,5213, y[21]&=72,2051, y[22]=74,7303, y[23]=77,0793, y[24]&=79,2285, y[25]=81,1533

Passo 4

Técnica sequencial (manual) para 0<= k<=5:
y[0]=y[1]=y[2]=0.
y[3]=2,2cdot0 -1,57cdot0 +0,36cdot0 +1 =1
y[4]=2,2cdot1 -1,57cdot0 +0,36cdot0 +1 =3,2
y[5]=2,2cdot3,2 -1,57cdot1 +0,36cdot0 +1 =6,47
Confere com os primeiros valores do algoritmo.

Passo 5

Usando transformada Z:
Zy[k+3]-2,2,Zy[k+2]+1,57,Zy[k+1]-0,36,Y(z)=E(z)
Com condições iniciais zero e E(z)=dfraczz-1,
Y(z)=z(z-1)l(z^3-2,2,z^2+1,57,z-0,36r)
Expandindo em série de potências em z^-1 até z^-5 recuperamos
y[0]=0,y[1]=0,y[2]=0,y[3]=1,y[4]=3,2,y[5]=6,47, igual aos métodos anteriores.

Passo 6

Código C para Arduino (loop infinito, lendo e[k] de A0 e calculando y[k]):
#define N 3
float y[N] = {0,0,0};
void setup(){
  Serial.begin(9600);
}
void loop(){
  float e = analogRead(A0) > 512 ? 1.0 : 0.0; // simples limiar para step
  float y3 = 2.2*y[2] - 1.57*y[1] + 0.36*y[0] + e;
  // desloca histórico
  y[0] = y[1];
  y[1] = y[2];
  y[2] = y3;
  Serial.println(y3,4);
  delay(100); // ajusta taxa de amostragem
}

Resposta

a) Algoritmo recursivo apresentado no Passo 2 e valores de y[3] a y[25] no Passo 3.
b) Verificação manual em Passo 4: y[05]=0,0,0,1,3,2,6,47.
c) Transformada Z e série de potências em Passo 5 confirmam os mesmos y[05].
d) Código Arduino em C no Passo 6.

Exercícios relacionados