| representaFiltro(filtro, frec, RollOff, Orden, Bw, paramPLL, color)
|
function retardo = representaFiltro(filtro, frec, RollOff, Orden, Bw, paramPLL, color)
%------------------------------------------------------------------------
%| representaFiltro(filtro, frec, RollOff, Orden, Bw, paramPLL)
%------------------------------------------------------------------------
%| Funcin que realiza lanza una ventana con las caracteristicas
%| de un determinado filtro.
%|
%| NO REALIZA VALIDACIN DE PARMETROS DE ENTRADA
%|
%| Entradas:
%| 1.- FILTRO= entero que especifica el filtro a emplear:
%| 1 = filtro coseno alzado
%| 2 = filtro banda base
%| 3 = filtro de portadora (FI).
%| 4 = filtro de continua (DC)
%| 5 = Ganancial en lao abierto del PLL.
%|
%| 2.- FREC = vector fila de 3 elementos [Rb fi fs];
%| 3.- ROLL_OFF = factor de Roll Off del coseno alzado.
%| 4.- ORDEN = vector fila de dos elemetos [Orden BB,Orden FI]
%| 5.- BW = vector fila de dos elementos [Bw BB, Bw FI]
%| 6.- PARAM_PLL = vector fila de 3 elementos con los parametros
%| del PLL : [Kv wn Psi]
%| 7.- COLOR = caracter con el color a emplear en el plot
%|
%-------------------------------------------------------------------------
% Autor: Cesar Delgado
% Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
fs = frec(3);
Rb = frec(1);
N = 2^14; % N muestras de la respuesta impulsiva
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%% CALCULO DE LAS CTES. DE LOS FILTROS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
switch filtro,
case 1, %%%%%%%%%% FILTRO COSENO ALZADO
num = rcosfir(RollOff,[-3 3],round(fs/Rb),1);
den = 1;
Texto = sprintf('Respuesta en Frecuencia del Coseno Alzado: \\alpha = %3.2f Rb = %3.0f [bps]',RollOff, Rb);
case 2, %%%%%%%%%% FILTRO BANDA BASE
BwBB = Bw(1)/frec(3);
num = fir1(Orden(1),2*BwBB);
den = 1;
Texto = sprintf('Respuesta en Frecuencia del Filtro Banda Base: Orden = %3.0f Bw = %3.2f (kHz)',Orden(1), Bw(1)*1e-3);
case 3, %%%%%%%%%% FILTRO FRECUENCIA INTERMEDIA
BwFI = [(frec(2) - Bw(2)/2), ...
(frec(2) + Bw(2)/2)]*(1/frec(3));
num = fir1(Orden(2),2*BwFI);
den = 1;
Texto = sprintf('Respuesta en Frecuencia del Filtro de Portadora:Orden = %3.0f Bw = %3.0f (Hz)',Orden(2), Bw(2));
case 4, %%%%%%%%%% FILTRO CONTINUA
BwDC = 2*frec(2)/frec(3); % fi/fs
num = fir1(max(Orden),2*BwDC,'high');
den = 1;
Texto = sprintf('Respuesta en Frecuencia del Filtro de Continua: Orden = %3.0f Bw = %3.2f (kHz)',max(Orden), 2*frec(2)*1e-3);
otherwise, %%%%%%%%%% FILTRO LEAD LAG DEL PLL
%>>>>>>> 1.1.- Parametros del PLL
pKv = 1;
pWn = 2;
pPsi = 3;
%>>>>>>> 1.2.- Ctes. del Filtro Analogico
Kd = 5/(2*pi);
K = 2*pi*paramPLL(pKv)*Kd;
TAU(1) = K/paramPLL(pWn)^2;
TAU(2) = 2*paramPLL(pPsi)/paramPLL(pWn);
%>>>>>>> 1.3.- Ctes. del Filtro Digital
cte = 2*fs;
% Numerador [b0 , b1]
num = [1+cte*TAU(2), 1-cte*TAU(2)];
% Denominador [a0 , a1]
den = [1+cte*TAU(1), 1-cte*TAU(1)];
% Normalizacin [b0/a0 , bi/a0 , 1 , a1/a0]
num = num./den(1);
den = den./den(1);
if filtro ==5,
Texto = sprintf('Respuesta en Frecuencia del Lead-Lag: {\\tau}_1=%3.2f msg. {\\tau}_2 =%3.2f msg.',TAU(1)*1e3, TAU(2)*1e3);
else,
Texto = sprintf('Error de Fases del PLL : Kv= %3.2f kHz/V {\\omega}_n=%3.2f krad/sg. {\\xi} =%3.4f ',paramPLL(pKv)*1e-3, paramPLL(pWn)*1e-3, paramPLL(pPsi) );
end;
end;
%if nargin > 1,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%% REPRESENTACION DE LA RESPUESTA DE LOS FILTROS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2.- Calculo de la respuesta Impulsiva
%--------------------------------------
imp = [1 zeros(1,N - 1)];
h = filter(num,den,imp); % Respuesta Impulsive
if filtro>5, h = filter(paramPLL(pKv),[1 -1],h); end;
H = fftshift(fft(h));
mod = 10*log10(abs(H));
fase = (180/pi)*unwrap(angle(H));
H = fftshift(fft(h));
mod = 10*log10(abs(H));
fase = (180/pi)*unwrap(angle(H));
% 3.- Calculo de ejes de representacion
%--------------------------------------
t = 0:1/fs:(length(h)-1)/fs;
f = -fs/2:fs/(N-1):fs/2;
if (fs > 1e7) & (filtro < 5),
eje = f.*1e-6;
tituloX = 'Frecuencia (MHz)';
elseif (fs > 1e4) & (filtro < 5),
eje = f.*1e-3;
tituloX = 'Frecuencia (kHz)';
else,
tituloX = 'Frecuencia (Hz)';
eje = f;
end;
% 4.- Representaciones
%---------------------
% 4.1.- Eliminamos Secuencias de Bits de la pantalla
subplot('position',[0.065, 0.47, 0.6, 0.04]);
plot(0);
axis off;
subplot('position',[0.065, 0.94, 0.6, 0.04]);
plot(0);
axis off;
% 4.2.- Respuesta en Amplitud
enfocaEje([1 1], 1);
if filtro == 5,
minimo = min(mod);
a = find(mod > minimo*0.99);
plot(eje(a), mod(a),color);
else,
plot(eje, mod,color);
end;
ylabel('Ganancia (dB)');
xlabel(tituloX);
title (Texto,'FontWeight','Bold','FontAngle','Italic');
grid on;
axis tight
enfocaEje([1 1], 0);
% 4.3.- Respuesta Impulsiva
enfocaEje([1 1], 3);
a = max(find(h>(max(abs(h))/1000)));
plot(t(1:a),h(1:a),'color',[0 0.5020 0.2510]);
xlabel('Tiempo (sg.)');
ylabel('Amplitud (V)');
Texto = sprintf('Respuesta Impulsiva');
title (Texto,'FontWeight','Bold','FontAngle','Italic');
grid on;
axis tight
% 4.4.- Respuesta de Fase
enfocaEje([1 1], 4);
plot(eje, fase, color);
xlabel(tituloX);
ylabel('Fase ()');
Texto = sprintf('Desfase');
title (Texto,'FontWeight','Bold','FontAngle','Italic');
grid on;
axis tight
zoom on;
% else
%end;
|
|