en otra ventana

Anuncio
Simulación de filtros FIR Celda en VHDL y su implementación en un FPGA
Apéndice F
APÉNDICE F.
Listado en Matlab
clear, clc, close all, format short
%-----Progama para cálculos los coeficientes Celda
%-----Nombre del programa:
coef_LatticeFILT.m
num = [1 -2.45 1.3795 -.5335 .1131];
den=[1];
clc, op=1;
while op==1
fprintf('OPCIONES\n');
fprintf(' [1] Mostrar Datos Iniciales\n [2] Mostrar Coeficientes FIR Celda\n');
fprintf(' [3] Modificar Datos\n [4] Recorvertir La Función\n [5] Salir\n');
fil=input('¿Qué elijes?: ');
switch fil
case {1}
clc, disp('Numerador');disp(num)
disp('Denominador');disp(den)
case {2}, FIR_latfil(num);
case {3}, clc
fprintf('\nFormato de los datos: [D1 D2z^-1 D3z^-2... Dnz^-(n-1)]\n');
num=input('\n ¿Cuál es la función?: ');
clc
case {4}, num=reconvertir(num);
case {5}, op=0;o_p=0;
otherwise
fprintf('\tSólo una de estas opciones\n');
pause(2)
end
end
fprintf('\t\t\tA D I O S\n');
Tabla 17. Programa del cálculo de coeficientes.
function FIR_latfil(num)
%-----Programa que regresa el calculo de los coeficientes y enseña el resultado en punto flotante
clc
fprintf('\n\t\t\tF I L T R O F I R\n\n');
disp('COEFICIENTES')
m=size(num); n=m(1,2);
num=tf2latc(num)
for i=1:n-1
fprintf('\t\t\tk(%d)= %1.4f\n',i,num(i,1));
coe2i754(i,:)= mimetodo(num(i,1));
fprintf('Binario\t\t%s \n\n',coe2i754(i,:));
end
Tabla 18. Función latfil.
function NUM = mimetodo(nu)
NUM=0;nu2=nu;lman=6;nn=0;
S=dec2bin(0);MAN=dec2bin(0,10);
%-----Chequeo
if nu<0 || nu==-inf
S=dec2bin(1);
end
if abs(nu)==inf
indx=16;
elseif isnan(nu)==1
indx=16;
MAN=dec2bin(rand(1)*1e3,7);
elseif nu==0
indx=-15;
else
69
Simulación de filtros FIR Celda en VHDL y su implementación en un FPGA
Apéndice F
if abs(nu)>0 && abs(nu)<=1
nu2=nu; con2=0;
while abs(nu2)<1
nu2=nu2*2; con2=con2-1;
end
indx=con2; nu3=abs(nu2)-1;
for i=1:lman
nu3=nu3*2;
if nu3<1
nn(i)=0;
else
nu3=nu3-1;
nn(i)=1;
end
end
MAN=num2str(nn,'%g');
else
%parte entera
nu2=abs(nu); con=1;
while fix(nu2) ~= 1 && fix(abs(nu))>1
if mod(fix(nu2),2)==0
nn(con)=0;
else
nn(con)=1;
end
nu2=fix(nu2)/2; con=con+1;
end
nn=fliplr(nn);
indx=con-1;
%parte flotante
nu3=abs(nu) - fix(abs(nu));
con2=con;
for i=con2:lman
nu3=nu3*2;
if nu3<1
nn(con2)=0;
else
nu3=nu3-1;
nn(con2)=1;
end
con2=con2+1;
end
MAN=num2str(nn,'%g');
end
end
expon=[indx+15];
EX=dec2bin(expon,5);
NUM=[S EX MAN]; ndec=bin2dec(NUM);
NHEX=dec2hex(ndec);
fprintf('Sig\t Exp\t Mantisa\t Hex\t Decimal\n');
fprintf('%1s\t %5s\t %6s\t\t %4s\t %0d\n',S,EX,MAN,NHEX,ndec);
Tabla 19. Función mimetodo.
function num=reconvertir(num)
%-----Programa que regresa de coeficientes Celda a función de transferencia
clc
fprintf('\n\t\t\tP O L I N O M I O\n\n');
num=latc2tf(num);
m=size(num); n=m(1,2);
fprintf('\t');
for i=1:n
fprintf('%1.4f\t',num(i));
end
fprintf('\n\n');
Tabla 20. Función reconvertir.
70
Descargar