clear all, close all, clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-
%%%%%- PROBANDO
pGENERAL = 1; pFS = 1; pRB = 2;
pENTRE = 2; pFILA = 1; pCOL = 2;
pCRC = 3; pTRAMO = 1; pCODE = 2;
pIQ = 4; pFASE = 1; pFI = 2;
fINFO = 0; fTRAMA = 1; fSIGNAL = 2;
I = 1; Q = 2;
RELOJ = 8; % Fila a leer en la memoria
contMUESTRA = 1; % Contador de Muestras
contFLANCOS = 2; % Contador de Flancos
MUESTRAS_BIT = 3; % N muestras/bit
muestraANT = 4; % Muestra Anterior
ESTADO = 5; % Banera: 0 = recuperacin sincronismo; 1 = recepcin trama
valorUNO = 6; % Voltaje que se le asigna al "1" lgico
valorMUESTRA = 7; % Suma de los voltajes de las muestras en 1 smbolo
contCAB = 8; % N que especificael nmero de bits de la cabecera BOF rx.
posCAB = 9; % Donde comenzamos a guardar la 1 cabecera BOF
trama = [];
CAB_SYNCRO = 100; % Longitud de la cabecera de sincronismo
ruta = 'D:\Estudios\UPM Superior\4Teleco\2Cuatrimestre\Lab. Trat. Dig. Seal\BPSK\Cdigo\Ficheros\';
L = 32;
metodo = 'hamming';
load([ruta 'paramTX']);
%textoTX = 'hola paquita, me llamo Csar';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----- TRANSMISOR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------------------------
% Presentacin
%------------------------------------------------------------
textoTX = 'La leche que le han dado, joder, a ver si funciona ya. Es una lata. Estonces que pasa con todo esto que no funciona parece que se trata del reloj';
TXTtoBinary(textoTX, ruta, 8);
%------------------------------------------------------------
% Enlace
%------------------------------------------------------------
% 1.- Cargamos el fichero de informacin al completo
%----------------------------------------------------
info = cargar(ruta,'info.tx',1, inf, fTRAMA);
lonInfo = length(info);
load([ruta 'paramTX']);
% 2.- Calculamos nBits de Informacin/ paquete (sin CRC)
%--------------------------------------------------------
lonCRC = floor(140*parametros(pCRC,pCODE)/parametros(pCRC,pTRAMO));
% 3.- Simulacin de procedimientos del nivel de aplicacin
%----------------------------------------------------------
cabecera = 1; % Primera Cabecera: SYNCRO BOD INFO
if length(info)<=lonCRC,
cabecera=3; % Solo hay un paquete: SYNCRO BOD INFO EOD
lonCRC = length(info);
end;
primera = 1;
% contador = 0;
% avance = waitbar(contador, 'TRANSMISOR: aplicando procedimientos de nivel de enlace');
while ~isempty(info),
% contador = contador +1;
% >>> 2.1.- Extraemos informacin para rellenar 1 trama
paquete = info(1:lonCRC);
info(1:lonCRC) = [];
% >>> 2.2.- Aplicamos cdigos de redundancia cclica
paquete = generaCRC (paquete, parametros(pCRC,pTRAMO), ...
parametros(pCRC,pCODE), ...
metodo);
% >>> 2.3.- Entrelazamos
[paquete] = entrelaza(paquete, parametros(pENTRE,pFILA), ...
parametros(pENTRE,pCOL));
% >>> 2.4.- Encapsulamos
paquete = encapsula(paquete,cabecera);
if length(info) <= lonCRC, % Informacin restante <= 1 paquete?
cabecera = 2; % Estamos en el ltimo paquete ===> BOD SYNCRO EOD
lonCRC = length(info);
else,
cabecera = 0; % Por defecto: BOD INFO
end;
% >>> 2.5.- Guardamos lo que llevamos hasta el momento
guardar(ruta, 'tramas.tx', paquete, fTRAMA, primera);
primera = 0;
paquete = [];
% waitbar(140*contador/lonInfo)
end;
% close(avance);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%% NIVEL FISICO TX + RX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
datos = cargar(ruta,'decisor.rx',1, inf, 1);
PAM1 = 5.*[ 0 0 0 1 1 1 1 1 0 0 0 generaPAM(datos, 32)];
M = zeros(8,34);
M(RELOJ,contMUESTRA)=0;
M(RELOJ,MUESTRAS_BIT)=32;
M(RELOJ,valorUNO)=5;
out = [];
nBits = 0;
for k = 1:length(PAM1)
% [out(k), M, P] = recuperaPortadora(in(k), M, ...
% fs, k==1, media, H_fi, P);
% bandaBase(k) = out(k)*in(k);
% [Linea(k), aux] = filter(H_bb, 1, bandaBase(k),...
% M(cBB,(1:length(H_bb)-1)));
% M(cBB,1:length(aux)) = aux';
% Linea(k) = ((Linea(k)>0)| (k < retardo))*5;
%[out] = demoduladorBPSK (in, fs);
[aux, M] = recuperaReloj(PAM1(k), M, k==1, 10);
% M(RELOJ, contMUESTRA) = M(RELOJ, contMUESTRA) + 1; % Contador Muestras ++
%[trama, M(RELOJ,:)] = rxTrama(PAM1(k), M(RELOJ,:));
%M(RELOJ,:) = sincroMsj(PAM1(k), M(RELOJ,:));
%M(RELOJ,:) = periodoReloj(PAM1(k), 10, M(RELOJ,:));
% if M(RELOJ,contMUESTRA)==0,
% M(RELOJ,MUESTRAS_BIT)
% cont = round(k/32)
% if cont > 108, break; end;
%end;
out = [out aux];
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%----- RECEPTOR
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%------------------------------------------------------------
% Enlace
%------------------------------------------------------------
% 1.- Cargamos el fichero de informacin al completo
%----------------------------------------------------
tramas = out;
lonInfo = length(tramas);
% 2.- Calculamos nBits de Informacin/ paquete (sin CRC)
%--------------------------------------------------------
lonTrama = 248; % 1 Trama: SYNCRO BOD INFO = 100 + 8 + 140
% 3.- Simulacin de procedimientos del nivel de aplicacin
%----------------------------------------------------------
cabecera = 1; % Primera Cabecera: SYNCRO BOD INFO
if length(tramas)<=256,
cabecera=3; % Solo hay un paquete: SYNCRO BOD INFO EOD
lonTrama = length(tramas);
end;
primera = 1;
% contador = 1;
% avance = waitbar(0,'RECEPTOR: aplicando procedimientos de nivel de enlace');
while ~isempty(tramas),
% >>> 2.1.- Extraemos informacin para rellenar 1 trama
paquete = tramas(1:lonTrama);
tramas(1:lonTrama) = [];
% >>> 2.2.- Encapsulamos
[paquete, errorCab]= desencapsula(paquete,cabecera);
if length(tramas) <= 156, % Informacin restante <= 1 paquete?
cabecera = 2; % Estamos en el ltimo paquete ===> BOD SYNCRO EOD
lonTrama = length(tramas);
else,
cabecera = 0; % Por defecto: BOD INFO
lonTrama = 148;
end;
% >>> 2.3.- Desentrelazamos
[paquete] = desentrelaza(paquete, ...
parametros(pENTRE,pFILA),...
parametros(pENTRE,pCOL));
% >>> 2.4.- Calculamos cdigos de redundancia cclica
[paquete, errorCRC] = recuperaCRC (paquete, parametros(pCRC,pTRAMO), ...
parametros(pCRC,pCODE), ...
metodo);
% >>> 2.5.- Guardamos lo que llevamos hasta el momento
guardar(ruta, 'info.rx', paquete, fTRAMA, primera);
primera = 0; paquete = [];
% waitbar(contador/lonInfo);
% contador = contador +1;
end;
% close(avance)
%------------------------------------------------------------
% Presentacin
%------------------------------------------------------------
bin = cargar(ruta,'info.rx',1,inf,fTRAMA);
textoRX = char(binaryToTXT(bin, ruta, 8));
%tramas = cargar(ruta,'tramas.tx',1, inf, fTRAMA);
%paquete = tramas(1:248);
%[paquete, errores(1)]= desencapsula(paquete,3);