function [trama, errores] = recuperaCRC (CRC, tramo, codigo, metodo)
%------------------------------------------------------------------------
%| function trama = recuperaCRC (CRC, tramo, codigo, metodo)
%------------------------------------------------------------------------
%| Funcin que crea un cdigo de redundancia para
%| la correccin de errores.
%|
%| Entradas:
%| 1.- CRC = vector fila con la trama codificada.
%| Su longitud ser de length(TRAMA+1)*(TRAMO/CODIGO)
%| o nula si algo ha ido mal (length(CRC)=0);
%| Caso de ser matriz, se toma 1 columna traspuesta
%| 2.- TRAMO = la codificacion se aplica en tramos de (2^M)-1 bits
%| Restricciones : TRAMO=(2^M)-1, M = 3,4,5,...
%| TRAMO < length(TRAMA)
%| Valor por defecto: 7
%| 3.- CODIGO = longitud de la palabra empleada para la codificacin
%| Restricciones : CODIGO < TRAMO
%| En Hamming: CODIGO = (2^M) - M
%| Valor por defecto: 4
%| 4.- METODO = tipo de cdigo de errores:
%| 4.1.- 'hamming': por el mtodo hamming => Valor por defecto
%| 4.2.- 'cyclic': cdigos de redundancia cclica
%| 4.3.- 'bch': cdigos de redundacia cclica interpretando
%| mensaje binario
%| 4.4.- 'rs': cdigos de Reed-Solomon
%|
%| Salida:
%| 1.- TRAMA = vector de ceros y unos (fila o columna)
%| 2.- ERRORES = posicin donde se han detectado errores
%|
%| NOTA: requiere Toolbox de Comunicaciones
%-------------------------------------------------------------------------
%| Autor: Cesar Delgado
%| Fecha: 19-Abril-2.004
%-------------------------------------------------------------------------
trama = [];
% 1.- Validacin de Parmetros de Entrada
%----------------------------------------
% 1.1.- Nmero de parmetros de entrada
if nargin < 1
disp('ERROR: faltan parametros en recuperaCRC');
elseif isempty(CRC)
disp('ERROR: trama vaca en recuperaCRC');
else
% 1.2.- Asignacin de valores por defecto en caso de omisin
if nargin < 2
codigo = 4;
tramo = 7;
metodo = 'hamming';
elseif nargin < 3
tramo = 7;
metodo = 'hamming';
validados = 0;
elseif nargin < 4,
metodo = 'hamming';
end;
% 1.3.- Conversin a vector fila
tamano = size(trama);
if tamano(1) > 1
CRC = CRC(:,1); % Nos quedamos con 1 columna
CRC = CRC'; % Convertimos a fila
end
% 1.4.- Se toman valores absolutos
codigo = abs(codigo);
tramo = abs(tramo);
% 2.- Recuperacin de la trama
%-----------------------------
[trama, errores] = decode(CRC,tramo,codigo,metodo);
trama = trama(1:length(trama))';
errores = errores(1:length(errores))';
errores = find(errores);
end