Professional Documents
Culture Documents
UNIDAD CULHUACAN
INGENIERÍA EN COMPUTACIÓN
PRACTICA N.º 4
ALUMNOS:
GRUPO: 7CM21
PROFESOR:
OBJETIVO
Identificar la diferencia entre la longitud de la palabra código y la longitud promedio de la
palabra código y calcular la eficiencia del código, realizando un programa en MATLAB, el
cual deberá mostrar una interfaz gráfica de usuario (GUI).
DESARROLLO
- Versión de MATLAB utilizada 2017b.
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Outputs from this function are returned to the command line.
function varargout = practicaTexto_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function texto_Callback(hObject, eventdata, handles)
val=get(hObject, 'String');
handles.texto=val;
guidata(hObject,handles);
numLetras=0;
for i=1:1:tam;
if texto(i)>=65 && texto(i)<=90
numLetras=numLetras+1;
elseif texto(i)=='Ñ'
numLetras=numLetras+1;
end
end
set(handles.numLetras,'String',numLetras);
simbolos=zeros(1,27);
for i=1:1:tam
if texto(i)>=65 && texto(i)<=90
indice=texto(i)-64;
simbolos(indice)=simbolos(indice)+1;
end
if texto(i)=='Ñ'
simbolos(27)=simbolos(27)+1;
end
end
probabilidades=zeros(1,27);
for i=1:1:27
probabilidades(i)=simbolos(i)/numLetras;
end
bits=0;
informacion=0;
for i=1:1:27
if probabilidades(i)>0
informacion=informacion+probabilidades(i)*log2(1/probabilidades(i));
bits=bits+log2(1/probabilidades(i));
ACS1=bits/1.44; %nats
ACS2=bits/3.32; %hartleys
end
end
informacion=round(informacion+0.4);
bits=round(bits+0.4);
set(handles.informacion,'String',bits);
set(handles.nats,'String',ACS1);
set(handles.hartleys,'String',ACS2);
t = get(handles.codificacion, 'String');
if ischar(t); t = cellstr(t); end
t = [t; texto(i) ' ' binario];
set(handles.codificacion, 'String', t);
end
end
entropia=0;
for i=1:1:27
if probabilidades(i)>0
entropia=entropia-probabilidades(i)*log2(probabilidades(i));
end
end
set(handles.entropia,'String',entropia);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%
%%%%%%%%%%%%% Practica 3
%%%%%%%%%%%%% Histograma
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%
simbolos=zeros(1,27);
for i=1:1:tam
if texto(i)>=65 && texto(i)<=90
indice=texto(i)-64;
simbolos(indice)=simbolos(indice)+1;
end
if texto(i)=='Ñ'
simbolos(27)=simbolos(27)+1;
end
end
axes(handles.histograma);
bar(simbolos);
%PRACTICA 4 LONGITUD
longitud = ceil(entropia);
eficiencia=entropia/longitud;
redundancia=1-eficiencia;
set(handles.longitud,'String',longitud);
set(handles.eficiencia,'String',eficiencia);
set(handles.redundancia,'String',redundancia);
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Practica1B_OpeningFcn, ...
'gui_OutputFcn', @Practica1B_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
varargout{1} = handles.output;
Ibw=im2bw(imread(I));
axes(handles.axes2);
imshow(Ibw);
Ig = rgb2gray(imread(I));
axes(handles.axes3);
imshow(Ig);
[y,x] = size(Ibw);
negro = 0;
blanco = 0;
for i=1:1:y
for j=1:1:x
if Ibw(i,j)==1
negro = negro+1;
else
blanco = blanco+1 ;
end
end
end
axes(handles.axes7)
bar(simbolos);
g = im(:,:,2);
green_hist = imhist(g);
axes(handles.axes13);
plot(green_hist,'green');
b = im(:,:,3);
blue_hist = imhist(b);
axes(handles.axes14);
plot(blue_hist,'blue');
R=(x*y)*24;
set (handles.inf,'string',num2str(R));
n=negro/(x*y);
b=blanco/(x*y);
set (handles.ACSX,'string',num2str(x));
set (handles.ACSY,'string',num2str(y));
H=(-n*log2(n))+(-b*log2(b));
set(handles.H,'String',num2str(H));
L = ceil(H);
set (handles.longitud,'string',num2str(L));
eficiencia=H/L;
set (handles.eficiencia,'string',num2str(eficiencia));
redundancia=1-eficiencia;
set (handles.redundancia,'string',num2str(redundancia));
else
return;
end
PRUEBAS Y RESULTADOS
Las figuras de abajo muestran las longitudes promedio, eficiencias y redundancias para 3
diferentes imágenes:
CONCLUSIONES
Con la realización de esta práctica, pudimos ver que el programa funciono de manera
correcta, y se pudo reforzar el conocimiento visto en las clases, se cumplió el objetivo de
como obtener el histograma con la ayuda del programa desarrollado en MATLAB.