
printf("\nEXEMPLO DE FILTRO COM 2 POLOS E 2 ZEROS: f=220Hz, quadrada\n");
printf("ZEROS em -1 e 1\n");
printf("POLOS da forma Ae^(i*phi) com phi variando entre 0 e pi\n");
fflush(stdout);

% Frequencia
f=220;

% Duracao
d=5;

% Taxa de Amostragem
R=8000;

% Cria onda quadrada, toca e mostra na tela.
x=quadrada(f,d,R);

% Magnitude dos POLOS
A=0.8;

% Fase dos POLOS, percorre linearmente o intervalo [0,pi]
phi=(0:pi/(d*R):pi)';

% Aplica a equação do filtro
y=x;
y(2)=(1-A)*x(2)+2*A*cos(phi(2))*y(1);
for i=3:d*R
  y(i)=(1-A)*(x(i)-A*x(i-2))+2*A*cos(phi(i))*y(i-1)-A^2*y(i-2);
end;

% Mostra as respostas de magnitude variando com a posição do zero do filtro
gset yrange [0:6];
w=0:0.01:3.14;
for i=1:(R/10):d*R
  plot(abs((1-exp(-sqrt(-1)*w*2))./((1-A*exp(-sqrt(-1)*(w+phi(i)))).*(1-A*exp(-sqrt(-1)*(w-phi(i)))))));
end;

% Normaliza o resultado e toca
y=100*y/max(y);
playaudio(y);

printf("pressione qualquer tecla\n");pause;

printf("IDEM, com ruido branco\n");
fflush(stdout);

% Cria ruido branco e toca.
x=100*rand(d*R,1);
playaudio(x);

% Aplica a equação do filtro
y=x;
y(2)=(1-A)*x(2)+2*A*cos(phi(2))*y(1);
for i=3:d*R
  y(i)=(1-A)*(x(i)-A*x(i-2))+2*A*cos(phi(i))*y(i-1)-A^2*y(i-2);
end;

% Normaliza o resultado e toca
y=100*y/max(y);
playaudio(y);

