% Filtros.sce
%
% neste script são mostrados os efeitos da truncagem da função sinc
% na resposta espectral de filtros

% Universidade de Brasília
% André Noll Barreto, 07 jun 2010

close all

ts = 0.05;
tmin = -100;
tmax = 100;
t = tmin:ts:tmax;

fmin = -.5 /ts;
fmax = .5 / ts;
fs = 1 / (tmax-tmin);
f = fmin:fs:fmax;


% filtro ideal não causal
h_ideal = 2*sinc(2*pi*t);
H_ideal = fftshift(fft(h_ideal));

% filtro causal (sinc truncado) com atraso 1
h_real_1 = 2*sinc(2*pi*(t-1)).*(t>0);
H_real_1 = fftshift(fft(h_real_1));

% filtro causal (sinc truncado) com atraso 2
h_real_2 = 2*sinc(2*pi*(t-4)).*(t>0);
H_real_2 = fftshift(fft(h_real_2));


% plotar h(t) para os diferentes filtros
figure (1);
plot(t, h_ideal, t, h_real_1, t, h_real_2);
xlabel('t');
ylabel('h(t)');
legend('ideal','T_0 = 1','T_0 = 2');

axis([-10,10,-1,2]);

% plotar espectro de amplitude para os diferentes filtros
figure (2);
plot(f, abs(H_ideal), f, abs(H_real_1), f, abs(H_real_2));
xlabel('f');
ylabel('|H(f)|');
legend('ideal','T_0 = 1','T_0 = 2');

% plotar espectro de fase para os diferentes filtros
figure (3);
plot( f,atan2(imag(H_ideal), real(H_ideal)), ...
      f,atan2(imag(H_real_1),real(H_real_1)), ...
      f, atan2(imag(H_real_2),real(H_real_2)));
xlabel('f');
ylabel('phi(f)');
legend('ideal','T_0 = 1','T_0 = 2');


t_conv = -200:0.05:200;


x = sign(t);
y_ideal = conv(x,h_ideal);
y_real_1 = conv(x,h_real_1);
y_real_2 = conv(x,h_real_2);

nx = length(x);
ny = length(y_ideal);


% plotar resultado filtrado
figure (4)
plot( t, 20*x, t_conv, y_ideal, t_conv, y_real_1, ...
      t_conv, y_real_2 );
xlabel('t');
legend('x', 'y=x*h', 'y1=x*h', 'y2=x*h2');


% filtro com banda mais estreita
% filtro ideal não causal
h_ideal2 = 2*sinc(pi*t/2);
H_ideal2 = fftshift(fft(h_ideal2));



% plotar espectro de amplitude para os diferentes filtros
figure (5);
plot(f, abs(H_ideal), f, abs(H_ideal2));
xlabel('f');
ylabel('|H(f)|');
legend('f_0 = 1','f_0 = 1/2');

y_ideal2 = conv(x,h_ideal2);


% plotar resultado filtrado
figure (6)
plot( t, 20*x, t_conv, y_ideal, t_conv, y_ideal2);
xlabel('t');
legend('x', 'y (f_0 = 1)', 'y (f_0 = 2)');


