You are on page 1of 2

%solucion con octave del primer ejemplo invarianza al impulso resp_freq_iir.

m
%jue 22 jun 2017 09:50:44 CDT

close all;
wp=0.2; %banda de paso
ws=0.3; %banda de rechazo
Rp=1; %magnitud en db minima
Rs=15; %magnitud en db de atenuaci�n minima.
T=1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%1) Debemos elegir el prototipo analogico a utilizar, en este caso usaremos
butterworth y obtener n y omegac
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Forma 1 Te�rica

n = ceil((log10((10^(Rp/10)-1)/(10^(Rs/10)-1)))/(2*log10(wp/ws)));
omegac = (wp/((10^(Rp/10)-1)^(1/(2*n))))*pi;

% Forma 2 Usando las funciones de octave, ojo buttord es para filtros digitales por
lo que hay que modificar wc*pi= omegac (continuo)

%[n,wc]=buttord(wp,ws,Rp,Rs,'s');
%omegac=wc*pi;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%2) Debemos obtener el dise�o anal�gico del filtro usando octave
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Nota: en matlab usar buttap, esa funci�n es de frecuencia unitaria por lo que hay
que modificar para que omegac sea de cada ejercicio. En octave no hay que hacer
algo adicional, octave es mas inteligente que matlab

[B,A]=butter(n,omegac,'s'); %filtro anal�gico butterworth

%los coeficientes B y A coinciden hasta este momento con nuestro dise�o " a mano",
ver archivo digitalizado en camvia.

%observemos su respuesta en frecuencia.


figure,
freqs(B,A,linspace(0,10,512));
keyboard;
%podemos observar que omegac=0.7031 cuando se tiene una magnitud en db de -3 dB
(condici�n anal�gica)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%3) Ahora debemos obtener los coeficientes de fracciones parciales para tiempo
continuo, hacer el mapeo z=e^(skT) y obtener H(z)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Lo anterior lo podemos realizar con la funci�n impinvar

[b,a]=impinvar(B,A);

% donde B y A son los coeficientes del filtro anal�gico.


%b =[-4.0030e-16 6.3096e-04 1.0104e-02 1.6143e-02 4.1007e-03 1.0325e-04];
%a=[ 1.000000 -3.363520 5.068420 -4.275864 2.106621 -0.570649 0.066074];

[hejw,w]=freqz(b,a);

figure,
subplot(2,1,1),plot(w, abs(hejw)),title('|H(e^jw)|')
h=gca;
xtick=[0:0.2*pi:pi];
xtick_v=[0:0.2:1];
set(h,'xtick',xtick);
for i=1:size(xtick_v,2)
xticklabel_v{1,i}=char([num2str(xtick_v(1,i)),'pi']);
endfor
set(h,'xticklabel',xticklabel_v);
grid

subplot(2,1,2),grpdelay (b, a);title('Retardo de grupo')


h=gca;
xtick=[0:0.2*pi:pi];
xtick_v=[0:0.2:1];
set(h,'xtick',xtick);
for i=1:size(xtick_v,2)
xticklabel_v{1,i}=char([num2str(xtick_v(1,i)),'pi']);
endfor
set(h,'xticklabel',xticklabel_v);
figure,
freqz(b,a);title('Respuesta en frecuencia: |H(e^jw)|db y <H(e^jw)');

You might also like