⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 generadordeprob.asv

📁 code to compress data usin huffman algorithm
💻 ASV
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----------Nombre de Archivo------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%Generador de probabilidades

%%%%%%%%%%%%%%%%%%%%%%%%%%%%-----------Funcionalidad----------%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Este archivo se encarga de leer un archivo de texto en binario, agrupar en
% n bits que representan 2 a la n mensajes,  y calcular la probabilidad de
% de los mensajes.
%Aqui tambien se genera el de probabilidades "prob", el vector de mensajes validos "MsgValidos", y el vector de orden
%original que tenia el vector de probabilidades antes del ordenamiento "ordenAnterior"

%Creadores:----------------------------------------------------------------
%Alumnos de Telecomunicaciones generacion 2007 CINVESTAV GDL

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc;
J=input('Especifica J= ');%Parmetro de entrada J para agrupar los bits

    switch J % Aqui se selecciona el modo de agrupamiento que matlab realizara, 1,2,4,8,16
        case {1}
            strJ='1';
        case {2}
            strJ='2';
        case {4}
            strJ='4';
        case {8}
            strJ='8';
        case {16}
            strJ='16';
    end;

msg=2^J;%Numero de mensajes a transmitir, 2 bits= a 4, 4 bits= a 16 etc 
file='Metallica.txt';%Espesifica el archivo a leer, puede ser txt o xml
TipoDeBits='ubit';%Modo de lectura, en este caso bits sin signo, ver ayuda
fid = fopen(file);%Comando para abrir el archivo que espesifica "file"
ModoDeLectura=strcat(TipoDeBits,strJ);%Se concatena el modo de lecura con el numero de bits a leer, ejemplo "ubit2" se leeran de dos en dos bits
MsgBits = fread(fid,ModoDeLectura);%Realiza la lectura del archivo
MsgBitsT=MsgBits';%Se transporne el areglo que entrega matlab de n X 1 a 1 X n
MatrixDeMensajes=zeros(1,msg);% Esta variable se utiliza como arreglo de donde se almacena el numero de repeticiones de cada mensaje

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%La siguiente estructura de fors se encarga de buscar cuantas veces se
%repite los mensajes que son determinados por el numero de bits agrupados
%Ejemplo: si J=4 se tendran 16 mensajes, y en el archivo se vera el numero
%de ocurrencias
for k=1:msg%Busqueda del mensaje 1 a N
    for n=1:length(MsgBitsT)%Longuitud total del archivo leido
        if k-1==MsgBitsT(n)%Aqui se checa si coincide el mensajes k-1 con la posicion n de MsgBits
           MatrixDeMensajes(k)=MatrixDeMensajes(k)+1;%Si el mensaje se repite se crea un contador dentro del vector MatrizDeMensajes
        end;
    end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Si alguno de los posibles mensajes tiene una ocurrencia nula se retira del
%vector de mensajes
MsgValidos=find(MatrixDeMensajes~=0);%Regresa los indices en donde las ocurrencia de los mensajes son cero

for k=1:length(MsgValidos)%Este for se encarga de ajustar los valores correctos de los mensajes con ocurrencia diferente de cero
    MsgValidos(k)=MsgValidos(k)-1;%por ejemplo: el find que se encuentra arriba retorna indices de 1 a 16, por lo que
end                               %a los indices que regresa el find hay que restarle 1

%En el siguiente pasan las los contadores de la MatrizDeMensajes que son
%diferente de cero
ProbValidas=[];
for k=1:length(MatrixDeMensajes)
    if MatrixDeMensajes(k)~=0 ;
        ProbValidas=[ProbValidas MatrixDeMensajes(k)];%Concatenacion diferentes de cero
    end
end
prob=ProbValidas./length(MsgBitsT);%Divicion de las probabilidades que son diferentes de cero entre el numero de bits en el archivo fuente
[prob ordenAnterior]=sort(prob,'descend');%En prob se ordenan las probabilidades de mayor a menor en orden decendente
                                          %y en ordenAnterior se almacena
                                          %el orden que tenia el vector de
                                          %probabilidades antes del
                                          %ordenamiento

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -