• No se han encontrado resultados

Tabla 8. Modelos de canal disponibles COST 207, extraído de [11].

Modelo de canal Descripción

cost207RAx4 Rural Area (RAx), 4 taps

cost207RAx6 Rural Area (RAx), 6 taps

cost207TUx6 Typical Urban (TUx), 6 taps

cost207TUx6alt Typical Urban (TUx), 6 taps, alternative

cost207TUx12 Typical Urban (TUx), 12 taps

cost207TUx12alt Typical Urban (TUx), 12 taps, alternative

cost207BUx6 Bad Urban (BUx), 6 taps

cost207BUx6alt Bad Urban (BUx), 6 taps, alternative

cost207BUx12 Bad Urban (BUx), 12 taps

cost207BUx12alt Bad Urban (BUx), 12 taps, alternative

cost207HTx6 Hilly Terrain (HTx), 6 taps

cost207HTx6alt Hilly Terrain (HTx), 6 taps, alternative

cost207HTx12 Hilly Terrain (HTx), 12 taps

cost207HTx12alt Hilly Terrain (HTx), 12 taps, alternative

Tabla 9. Modelos de canal disponibles GSM/EDGE, extraído de [11].

Modelo de canal Descripción

gsmRAx6c1 Typical case for rural area (RAx), 6 taps, case 1

Estimación de canal de radio para sistemas

MIMO-OFDM 45

gsmHTx12c1 Typical case for hilly terrain (HTx), 12 taps, case 1

gsmHTx12c2 Typical case for hilly terrain (HTx), 12 taps, case 2

gsmHTx6c1 Typical case for hilly terrain (HTx), 6 taps, case 1

gsmHTx6c2 Typical case for hilly terrain (HTx), 6 taps, case 2

gsmTUx12c1 Typical case for urban area (TUx), 12 taps, case 1

gsmTUx12c1 Typical case for urban area (TUx), 12 taps, case 2

gsmTUx6c1 Typical case for urban area (TUx), 6 taps, case 1

gsmTUx6c2 Typical case for urban area (TUx), 6 taps, case 2

gsmEQx6 Profile for equalization test (EQx), 6 taps

gsmTIx2 Typical case for very small cells (TIx), 2 taps

Tabla 10. Modelos de canal disponibles 3GPP Deployment Evaluation, extraído de [11].

Modelo de canal Descripción

3gppTUx Typical Urban channel model (TUx)

3gppRAx Rural Area channel model (RAx)

3gppHTx Hilly Terrain channel model (HTx)

Tabla 11. Modelos de canal disponibles ITU-R 3G, extraído de [11].

Modelo de canal Descripción

itur3GIAx Indoor office, channel A

itur3GIBx Indoor office, channel B

itur3GPAx Outdoor to indoor and pedestrian, channel A

itur3GPBx Outdoor to indoor and pedestrian, channel B

itur3GVAx Vehicular - high antenna, channel A

itur3GVBx Vehicular - high antenna, channel B

itur3GSAxLOS Satellite, channel A, LOS

itur3GSAxNLOS Satellite, channel A, NLOS

itur3GSBxLOS Satellite, channel B, LOS

itur3GSBxNLOS Satellite, channel B, NLOS

itur3GSCxLOS Satellite, channel C, LOS

itur3GSCxNLOS Satellite, channel C, NLOS

Tabla 12. Modelos de canal disponibles ITU-R HF, extraído de [11].

Modelo de canal Descripción

iturHFLQ Low latitudes, Quiet conditions

iturHFLM Low latitudes, Moderate conditions

iturHFLD Low latitudes, Disturbed conditions

iturHFMQ Medium latitudes, Quiet conditions

iturHFMM Medium latitudes, Moderate conditions

iturHFMD Medium latitudes, Disturbed conditions

iturHFMDV Medium latitudes, Disturbed conditions near vertical incidence

iturHFHQ High latitudes, Quiet conditions

iturHFHM High latitudes, Moderate conditions

Estimación de canal de radio para sistemas

MIMO-OFDM 46

Tabla 13. Modelos de canal disponibles JTC, extraído de [11].

Modelo de canal Descripción

jtcInResA Indoor residential A

jtcInResB Indoor residential B

jtcInResC Indoor residential C

jtcInOffA Indoor office A

jtcInOffB Indoor office B

jtcInOffC Indoor office C

jtcInComA Indoor commercial A

jtcInComB Indoor commercial B

jtcInComC Indoor commercial C

jtcOutUrbHRLAA Outdoor urban high-rise areas - Low antenna A

jtcOutUrbHRLAB Outdoor urban high-rise areas - Low antenna B

jtcOutUrbHRLAC Outdoor urban high-rise areas - Low antenna C

jtcOutUrbLRLAA Outdoor urban low-rise areas - Low antenna A

jtcOutUrbLRLAB Outdoor urban low-rise areas - Low antenna B

jtcOutUrbLRLAC Outdoor urban low-rise areas - Low antenna C

jtcOutResLAA Outdoor residential areas - Low antenna A

jtcOutResLAB Outdoor residential areas - Low antenna B

jtcOutResLAC Outdoor residential areas - Low antenna C

jtcOutUrbHRHAA Outdoor urban high-rise areas - High antenna A

jtcOutUrbHRHAB Outdoor urban high-rise areas - High antenna B

jtcOutUrbHRHAC Outdoor urban high-rise areas - High antenna C

jtcOutUrbLRHAA Outdoor urban low-rise areas - High antenna A

jtcOutUrbLRHAB Outdoor urban low-rise areas - High antenna B

jtcOutUrbLRHAC Outdoor urban low-rise areas - High antenna C

jtcOutResHAA Outdoor residential areas - High antenna A

jtcOutResHAB Outdoor residential areas - High antenna B

jtcOutResHAC Outdoor residential areas - High antenna C

Tabla 14. Modelos de canal disponibles HIPERLAN/2, extraído de [11].

Channel model Profile

hiperlan2A Model A

hiperlan2B Model B

hiperlan2C Model C

hiperlan2D Model D

hiperlan2E Model E

Tabla 15. Modelos de canal disponibles 802.11 a/b/g, extraído de [11].

Channel model

802.11a 802.11b 802.11g

Estimación de canal de radio para sistemas

MIMO-OFDM 47

Tabla 16. Perfil EPA 5Hz modelo MIMO-LTE, extraído de [12].

Extended Pedestrian A (EPA)

Trayecto Doppler (Hz) Retardo [ns] Pérdida relativa [dB] 1 5 0 0.0 2 5 30 1.0 3 5 70 2.0 4 5 90 3.0 5 5 110 8.0 6 5 190 17.2 7 5 410 20.8

Tabla 17. Perfil EVA 70Hz modelo MIMO-LTE, extraído de [12].

Extended Vehicular A (EVA)

Trayecto Doppler (Hz) Retardo [ns] Pérdida relativa [dB] 1 70 0 0.0 2 70 30 1.5 3 70 150 1.4 4 70 310 3.6 5 70 370 0.6 6 70 710 9.1 7 70 1090 7.0 8 70 1730 12.0 9 70 2510 16.9

Tabla 18. Perfil ETU 300Hz modelo MIMO-LTE, extraído de [12].

Extended Typical Urban (ETU)

Trayecto Doppler (Hz) Retardo [ns] Pérdida relativa [dB] 1 300 0 1.0 2 300 50 1.0 3 300 120 1.0 4 300 200 0.0 5 300 230 0.0 6 300 500 0.0 7 300 1600 3.0 8 300 2300 5.0 9 300 5000 7.0

Simulación de estimación de canal para MIMO-OFDM

La función se encarga de realizar la simulación transmisor-canal-receptor de un sistema de comunicaciones MIMO-OFDM. Para esto, realiza la estimación de diferentes modelos de canal de radio disponibles en Matlab entre los que se encuentran Rayleigh, COST 207, GSM/EDGE, 3GPP, entre otros. Para más información escriba Help Tesis en la ventana de comandos de Maltab.

La función recibe:

* modelo: un string con el nombre del modelo de canal a utilizar (Rayleigh, Estandarizados o MIMO-LTE). * parametrosModelo: una estructura con diferentes carácteristicas del modelo a utilizar.

* tiempoSimulacion: el tiempo de simulación en slots.

* SNRoEsN0: un string indicando si el eje x de simulación corresponde a SNR o EsN0. * inicio: el valor de inicio en eje x de simulación.

* paso: el valor del paso en eje x de simulación. * fin: el valor de terminación en eje x de simulación. * tamanoConstelacion: el tamaño de la constelación QAM a usar.

* numeroRepeticiones: el número de repeticiones a realizar para el cálculo de la tasa de error de bit y error medio cuadrático de estimación. * metodosInterpolación: un cell con los string de los métodos de interpolación a usar en la estimación.

* cuadrículaEstimación: una matriz multidimensional binaria con cada página representando la distribución de símbolos piloto para cada canal

independiente de comunicaciones (para el caso de MIMO). El valor '1' indica un RE de símbolo piloto, el valor '0' indica un RE para información de usuario. Las salidas de la función son:

* SNR: un vector con el eje x de simulación para BER y error medio cuadrático. * EsN0: un vector con el eje x de simulación para BER y error medio cuadrático.

* error: una matriz con las filas representando cada uno de los valores de eje x de simulación (SNR o Es/N0) y las columnas representando el BER a partir de cada método de interpolación.

* errorTeo: un vector con el BER a partir de la función de transferencia provista por el modelo de canal de Matlab.

* SET: una matriz multidimensional con las filas representando cada uno de los valores del eje x de simulación (SNR o Es/N0), las columnas respresentando el error medio cuadrático en magnitud y fase (primera y segunda columna respectivamente) y las páginas representando cada uno de los diferentes métodos de interpolación.

* f,t: los vectores de frecuencia y tiempo para el graficado de la función de transferencia variante en el tiempo.

* CTFs: un cell de matrices en donde cada matriz corresponde a la función de transferencia estimada variante en el tiempo para una simulación completa. Las filas del cell representan canales independientes (para sistemas MIMO) y las columnas del cell representan diferentes métodos de interpolación para la estimación.

* Gs: una matriz con la función de transferencia provista por matlab variante en el tiempo. * mas: una estructura con datos adicionales acerca de la simulación.

Juan Carlos Bucheli García

Proyecto de grado para optar al título de ingeniero electrónico. Mayo de 2014

Contents

Encabezado de la función

Creado ventana tiempo restante e inicialización temporizador de simulación. Asignación de parámetros según modelo de canal seleccionado Inicialización de variables según parámetros LTE

Inicializacion de otras variables

Generación y modulación de datos de usuario y piloto Inicialización de variables de simulación

Ciclo principal - variación sobre repetición

Actualización del tiempo de iteración y actualización de barra de progreso. Creación de los modelos de canal

Ciclo secundario - variación sobre SNR actualización de barra de progreso.

Reinicialización de variables requeridas por el siguiente ciclo anidado Ciclo tercerario - variación sobre periodo de símbolo

Cálculo de tiempo restante y actualización de la barra de progreso Ciclo cuaternario - modulación para cada canal independiente Cálculo de cantidad de datos usuario y piloto

Generación de la señal para el periodo de símbolo actual Adición del prefijo cíclico

Ciclo cuaternario - el efecto del canal sobre cada canal independiente Adición de ruido AWGN

Ciclo cuaternario - diferentes métodos de interpolación Ciclo quinario - demodulación sobre cada canal independiente Selección del canal con mayor potencia

Demodulación de los símbolos transmitidos Estimación de canal

Ecualización en frecuencia

Ciclo terceario - cálculo de BER para diferentes metodos de interpolación Corrección de variables para exportación

Cálculo de detalles de la transmisión actual

function [ SNR, EsN0, error, errorTeo, SET, f, t, CTFs, Gs, mas ] = simular(modelo, parametrosModelo, tiempoSimulacion, SNRoEsN0, inicio, paso,...

fin, tamanoConstelacion, numeroRepeticiones, metodosInterpolacion, cuadriculaEstimacion )

Creado ventana tiempo restante e inicialización temporizador de simulación.

Se muestra la ventana de tiempo restante e inicializa variable tinicial para poder acceder posteriormente al tiempo de simulación total.

tinicial = tic;

Hw = waitbar(0,'Inicializando variables...','name','Simulación en proceso');

Asignación de parámetros según modelo de canal seleccionado

Se asignan diferentes parámetros requeridos por los modelos de canal de Matlab según el modelo seleccionado y a partir de parametrosModelo

if(strcmp(modelo,'MIMO-LTE')) perfil = parametrosModelo.perfil; configuracionAntenas = parametrosModelo.configuracionAntenas; correlacion = parametrosModelo.correlacion; antenasTransmision = str2double(configuracionAntenas(1)); antenasRecepcion = str2double(configuracionAntenas(3));

elseif(strcmp(modelo,'Rayleigh'))

frecuenciaDoppler = parametrosModelo.frecuenciaDoppler; atenuacionMaxima = parametrosModelo.atenuacionMaxima; tiempoTrayectoMaximo = parametrosModelo.tiempoTrayectoMaximo/100; numeroTrayectos = parametrosModelo.numeroTrayectos; antenasTransmision = 1; antenasRecepcion = 1;

elseif(strcmp(modelo,'Estandarizados'))

frecuenciaDoppler = parametrosModelo.frecuenciaDoppler; perfil = parametrosModelo.perfil; tRMS = parametrosModelo.tRMS; antenasTransmision = 1; antenasRecepcion = 1; end; canalesIndependientes = min(antenasTransmision,antenasRecepcion); numeroSlotsASimular = tiempoSimulacion; pruebas = numeroRepeticiones; if(strcmp(modelo,'Rayleigh')) retardos = longitudCP*(1/frecuenciaMuestreo)*tiempoTrayectoMaximo*rand(1,numeroTrayectos); ganancias = -1*atenuacionMaxima*retardos./(longitudCP*(1/frecuenciaMuestreo)*0.8); end;

Inicialización de variables según parámetros LTE

Se inicializan parámetros del sistema transmisor-receptor estandizados por LTE.

frecuenciaMuestreo = 30.72e6; longitudUtil = round(66.667e-6*frecuenciaMuestreo); longitudCP = round(4.7e-6*frecuenciaMuestreo); periodosDeSimbolosPorSlot = 7; slot = 0.5e-3; BW = 20e6; df = 15e3; numeroSubportadoras = ceil(BW/df); RBs = ceil(numeroSubportadoras/12); BW = RBs*12*df; numeroSubportadoras = BW/df;

Inicializacion de otras variables

Se inicializan otras variables requeridas para la simulación.

numeroPilotosPorPeriodo = sum(cuadriculaEstimacion,1)*RBs; esPeriodoEstimacion = numeroPilotosPorPeriodo>0; numeroPilotosPorRB = sum(numeroPilotosPorPeriodo,2); numeroPilotosPorRB = numeroPilotosPorRB(1); medidas = inicio:paso:fin; if(strcmp(SNRoEsN0,'SNR')) SNR = medidas; EsN0 = SNR + 10*log10(frecuenciaMuestreo/df); else EsN0 = medidas; SNR = EsN0 - 10*log10(frecuenciaMuestreo/df); end;

Generación y modulación de datos de usuario y piloto

datosPorSlot = periodosDeSimbolosPorSlot*numeroSubportadoras-numeroPilotosPorRB; datosEnviados = round(rand(datosPorSlot*numeroSlotsASimular*canalesIndependientes,log2(tamanoConstelacion))); if(~isempty(datosEnviados)) datosUsuario = qammod(bin2dec(num2str(datosEnviados)),tamanoConstelacion); else datosUsuario = []; end;

HG = comm.GoldSequence('SamplesPerFrame',numeroPilotosPorRB*numeroSlotsASimular*log2(tamanoConstelacion)*canalesIndependientes);

pilotos = qammod(bin2dec(num2str(reshape(step(HG),numeroPilotosPorRB*numeroSlotsASimular*canalesIndependientes,log2(tamanoConstelacion)))),tamanoConstel acion);

Inicialización de variables de simulación

Se inicializan variables usadas por el algorimo para no requerir modificar la dimensión de éstas a lo largo de la simulación y así mejorar el rendimiento de la misma.

senal = zeros(longitudUtil+longitudCP,antenasTransmision); senalRecibida = zeros(longitudUtil+longitudCP,antenasRecepcion); error = zeros(length(EsN0),size(metodosInterpolacion,1)); errorTeo = zeros(length(EsN0),1); SE = zeros(length(EsN0),2,size(metodosInterpolacion,1)); SET = zeros(length(EsN0),2,size(metodosInterpolacion,1)); ultimo = 0;

Ciclo principal - variación sobre repetición

Corresponde al ciclo que itera sobre el número de repetición actual.

for intento = 1:pruebas;

Actualización del tiempo de iteración y actualización de barra de progreso.

marca = tic;

progreso = (intento-1)/pruebas; waitbar(progreso,Hw);

set(Hw,'Name',['Total transcurrido: ',num2str(progreso*100,'%01.0f'),'%']);

Creación de los modelos de canal

Se crea el objeto H que representa el modelo de canal seleccionado para la simulación.

if(strcmp(modelo,'MIMO-LTE'))

H = comm.LTEMIMOChannel('SampleRate',frecuenciaMuestreo,'Profile',perfil,'AntennaConfiguration',configuracionAntenas,'CorrelationLevel',correlac ion,'NormalizePathGains',true);

if(antenasTransmision ~=1) H.AntennaSelection='Tx'; end;

elseif(strcmp(modelo,'Rayleigh'))

H = rayleighchan(1/frecuenciaMuestreo,frecuenciaDoppler,retardos,ganancias); H.ResetBeforeFiltering=0;

elseif(strcmp(modelo,'Estandarizados'))

try

H = stdchan(1/frecuenciaMuestreo,frecuenciaDoppler,perfil,tRMS); H.ResetBeforeFiltering=0;

catch ME

if(strcmp(ME.message,'STDCHAN requires three input arguments.')) H = stdchan(1/frecuenciaMuestreo,frecuenciaDoppler,perfil); H.ResetBeforeFiltering=0;

else

msgbox(ME.message,'Error','error'); end;

end; end;

Ciclo secundario - variación sobre SNR

Se encarga de iterar sobre el valor actual de relación señal a ruido.

for rel = 1:length(EsN0)

actualización de barra de progreso.

progreso =((intento-1)*length(EsN0)+rel-1)/(length(EsN0)*pruebas); waitbar(progreso,Hw);

set(Hw,'Name',['Total transcurrido: ',num2str(progreso*100,'%01.0f'),'%']);

Reinicialización de variables requeridas por el siguiente ciclo anidado

actualDatos = 0; actualPilotos = 0; limiteDatos = 0; limitePilotos = 0; CTFs = cell(canalesIndependientes,size(metodosInterpolacion,1)); pilotosTemp = cell(canalesIndependientes,1); Gs = []; datosRecibidos = cell(size(metodosInterpolacion,1),1); datosRecibidosTeo = [];

Ciclo tercerario - variación sobre periodo de símbolo

se encarga de iterar sobre cada periodo de símbolo de simulación para la repetición indicada por intento y el SNR indicado por rel

for s = 1:numeroSlotsASimular*periodosDeSimbolosPorSlot

Cálculo de tiempo restante y actualización de la barra de progreso

realizacionesRestantes = (numeroSlotsASimular*periodosDeSimbolosPorSlot-s)+(length(EsN0)-rel)*numeroSlotsASimular*periodosDeSimbolosPorSlot+ (pruebas-intento)*length(EsN0)*numeroSlotsASimular*periodosDeSimbolosPorSlot;

realizaciones = numeroSlotsASimular*periodosDeSimbolosPorSlot*length(EsN0)*pruebas - realizacionesRestantes; ultimo = (ultimo*(realizaciones-1) + toc(marca))/realizaciones;

marca = tic; tiempoRestante = (realizacionesRestantes)*ultimo; minutosRestantes = floor(tiempoRestante/60); segundosRestantes = floor((tiempoRestante/60-minutosRestantes)*60); progreso = ((intento-1)*length(EsN0)*numeroSlotsASimular*periodosDeSimbolosPorSlot+(rel-1)*numeroSlotsASimular*periodosDeSimbolosPorSlot+(s- 1))/(length(EsN0)*numeroSlotsASimular*periodosDeSimbolosPorSlot*pruebas);

set(Hw,'Name',['Total transcurrido: ',num2str(progreso*100,'%01.0f'),'%']);

waitbar(progreso,Hw,['Tiempo restante: ',num2str(minutosRestantes,'%01.0f'), ' min, ',num2str(segundosRestantes,'%01.0f'), ' seg.']);

Ciclo cuaternario - modulación para cada canal independiente

Se encarga de generar la señal de un periodo de símbolo para todos los canales independientes ( >1 para sistemas MIMO)

for ant = 1:canalesIndependientes

Cálculo de cantidad de datos usuario y piloto

Según la distribución de símbolos piloto y el periodo de símbolo actual, calcula el número de datos de usuario y/o símbolos piloto requeridos.

if(~esPeriodoEstimacion(1,mod(s-1,7)+1,ant)) if(actualDatos+numeroSubportadoras > length(datosUsuario)) limiteDatos = length(datosUsuario); else limiteDatos = actualDatos+numeroSubportadoras; end; datosTemp = datosUsuario(actualDatos+1:limiteDatos); actualDatos = limiteDatos; else if(actualDatos+numeroSubportadoras-numeroPilotosPorPeriodo(1,mod(s-1,7)+1,ant) > length(datosUsuario)) limiteDatos = length(datosUsuario); else limiteDatos = actualDatos+numeroSubportadoras-numeroPilotosPorPeriodo(1,mod(s-1,7)+1,ant); end; if(actualPilotos+numeroPilotosPorPeriodo(1,mod(s-1,7)+1,ant) > length(pilotos)) limitePilotos = length(pilotos); else limitePilotos = actualPilotos+numeroPilotosPorPeriodo(1,mod(s-1,7)+1,ant); end; pilotosTemp{ant} = pilotos(actualPilotos+1:limitePilotos); [datosTemp,~] = agregarRemoverPilotos(true,cuadriculaEstimacion(:,mod(s-1,7)+1,ant),datosUsuario(actualDatos+1:limiteDatos),pilotosT emp{ant}); actualDatos = limiteDatos; actualPilotos = limitePilotos; end;

Generación de la señal para el periodo de símbolo actual

A partir de la transformada discreta inversa de Fourier, se genera la representación temporal de los datos de usuario y/o piloto a transmitir.

senal(longitudCP+1:end,(ant-1)*antenasTransmision/canalesIndependientes+1:ant*antenasTransmision/canalesIndependientes) = ifft(DesCentra rConCeros(longitudUtil,datosTemp,'Centrar'))*ones(1,antenasTransmision/canalesIndependientes);

Adición del prefijo cíclico

senal(1:longitudCP,(ant-1)*antenasTransmision/canalesIndependientes+1:ant*antenasTransmision/canalesIndependientes) = senal(end-longitud CP+1:end,(ant-1)*antenasTransmision/canalesIndependientes+1:ant*antenasTransmision/canalesIndependientes);

end;

Ciclo cuaternario - el efecto del canal sobre cada canal independiente

Se encarga de obtener la respuesta del canal ante la señal anteriormente generada.

abcd = eye(canalesIndependientes); for ant = 1:canalesIndependientes

if(antenasTransmision>canalesIndependientes) actual(1:2:2*length(abcd))=abcd(ant,:); actual(2:2:2*length(abcd))=abcd(ant,:); else actual = abcd(ant,:); end; if(strcmp(modelo,'MIMO-LTE')) if(antenasTransmision ~=1) tempo = step(H,senal(:,(ant-1)*antenasTransmision/canalesIndependientes+1:ant*antenasTransmision/canalesIndependientes),actual); else tempo = step(H,senal(:,(ant-1)*antenasTransmision/canalesIndependientes+1:ant*antenasTransmision/canalesIndependientes)); end; senalRecibida(:,(ant-1)*antenasRecepcion/canalesIndependientes+1:ant*antenasRecepcion/canalesIndependientes)=tempo(:,(ant-1)*antenas Recepcion/canalesIndependientes+1:ant*antenasRecepcion/canalesIndependientes); else senalRecibida = filter(H,senal); end; end;

Adición de ruido AWGN

senalRecibida= awgn(senalRecibida,SNR(rel),'measured',1);

Ciclo cuaternario - diferentes métodos de interpolación

Se encarga de iterar sobre los diferentes métodos de interpolación.

for metodo = 1:size(metodosInterpolacion,1)

Ciclo quinario - demodulación sobre cada canal independiente

Se encarga de realizar la estimación de canal, interpolación y demodulación de los datos de usuario para cada canal independiente.

for ant = 1:canalesIndependientes

Selección del canal con mayor potencia

En caso de existir diversidad espacial en el receptor, se selecciona la antena que tenga una señal asociada con una potencia mayor.

datosRecibidosTemp = senalRecibida(longitudCP+1:end,(ant-1)*antenasRecepcion/canalesIndependientes+1:ant*antenasRecepcion/canalesInd ependientes); if(antenasRecepcion>antenasTransmision) [~,imaximo] = max(sum((abs(datosRecibidosTemp)).^2,1)); else imaximo = 1; end;

Demodulación de los símbolos transmitidos

A partir de la transformada discreta de Fourier, se obtiene de nuevo la representación de los símbolos luego de ser transmitidos por el canal seleccionado.

datosRecibidosTemp = fft(datosRecibidosTemp(:,imaximo));

datosRecibidosTemp = DesCentrarConCeros(numeroSubportadoras,datosRecibidosTemp,'Descentrar');

Estimación de canal

En caso de corresponder el periodo de símbolo actual a un periodo de estimación de canal, se estima a partir de los símbolos piloto transmitidos e interpola a partir del método de interpolación actual. También, se estima el error medio cuadrático de estimación.

if(esPeriodoEstimacion(1,mod(s-1,7)+1,ant)) [datosRecibidosTemp,pilotosRecibidos]=agregarRemoverPilotos(false,cuadriculaEstimacion(:,mod(s-1,7)+1,ant),datosRecibidosTemp,[] ); CTF = pilotosRecibidos./(pilotosTemp{ant}); [CTFI,~]=agregarRemoverPilotos(true,cuadriculaEstimacion(:,mod(s-1,7)+1,ant),zeros(length(datosRecibidosTemp)-length(pilotosReci bidos),1),CTF); CTFs{ant,metodo} = [CTFs{ant,metodo},DesCentrarConCeros(longitudUtil,interp1(find(CTFI~=0),CTF,1:length(CTFI),metodosInterpolaci on{metodo})','Centrar')];

CTFs{ant,metodo}(isnan(CTFs{ant,metodo}(:,end)),end)=0; if(strcmp(modelo,'MIMO-LTE')) a = []; AM = []; else a = H.pathGains; AM = H.channelFilter.alphaMatrix; if(metodo==1) g = a*AM; Gs = [Gs,fft(g,longitudUtil)']; end;

SE(rel,1,metodo) = SE(rel,1,metodo)+ sum((abs(DesCentrarConCeros(numeroSubportadoras,CTFs{ant,metodo}(:,end),'Descentrar'))- abs(DesCentrarConCeros(numeroSubportadoras,Gs(:,end),'Descentrar'))).^2)/numeroSubportadoras;

SE(rel,2,metodo) = SE(rel,2,metodo)+ sum((angle(DesCentrarConCeros(numeroSubportadoras,CTFs{ant,metodo}(:,end),'Descentrar') )-angle(DesCentrarConCeros(numeroSubportadoras,Gs(:,end),'Descentrar'))).^2)/numeroSubportadoras;

end; end;

Ecualización en frecuencia

En caso de que el primer periodo de simulación no corresponda a un periodo de estimación, el canal no se ecualiza en frecuencia. De lo contrario, se realiza el proceso de ecualización a partir de la última estimación realizada.

if(numel(CTFs{ant,metodo})==0) temp = datosRecibidosTemp; else

temp = datosRecibidosTemp./conj(DesCentrarConCeros(numeroSubportadoras,CTFs{ant,metodo}(:,end),'Descentrar')); end;

if((~strcmp(modelo,'MIMO-LTE'))&&(metodo == 1))

tempTeo = datosRecibidosTemp./conj(DesCentrarConCeros(numeroSubportadoras,Gs(:,end),'Descentrar')); tempTeo(isnan(tempTeo))=[]; datosRecibidosTeo = [datosRecibidosTeo;tempTeo]; end; temp(isnan(temp))=[]; datosRecibidos{metodo} = [datosRecibidos{metodo};temp]; end; end; end;

Ciclo terceario - cálculo de BER para diferentes metodos de interpolación

A partir de todos los datos reconstruidos por el receptor anteriormente descrito, se realiza el cálculo de la tasa de bit de error.

for metodo = 1:size(metodosInterpolacion,1) if(metodo == 1)

datosEnviados = int8(reshape(datosEnviados,numel(datosEnviados),1)); end;

datosRecibidos{metodo} = int8(reshape(dec2bin(qamdemod(datosRecibidos{metodo},tamanoConstelacion)),numel(datosRecibidos{metodo})*log2(tamano Constelacion),1))-48;

error(rel,metodo) = error(rel,metodo)+(1 - sum(datosEnviados==datosRecibidos{metodo})/length(datosEnviados)); if((~strcmp(modelo,'MIMO-LTE'))&&(metodo == 1))

datosRecibidosTeo = int8(reshape(dec2bin(qamdemod(datosRecibidosTeo,tamanoConstelacion)),numel(datosRecibidosTeo)*log2(tamanoConstelacio n),1))-48;

errorTeo(rel) = errorTeo(rel)+(1-sum(datosEnviados==datosRecibidosTeo)/length(datosEnviados));

SE(rel,:,:) =SE(rel,:,:)/(numeroSlotsASimular*sum(esPeriodoEstimacion(1,:,ant))*canalesIndependientes); %Dos estimaciones por slot

end; end;

end;

SET = SET + SE;

end;

Corrección de variables para exportación

Se corrige el tipo de dato de algunas variables para facilitar su tratamiento por otras partes del algoritmo.

CTFs = {};

for metodo = 1:size(metodosInterpolacion,1) CTFs{metodo} = cat(3,tempo{:,metodo});

end;

Cálculo de detalles de la transmisión actual

clear('tempo'); error = error/pruebas; errorTeo = errorTeo/pruebas; SET = SET/pruebas; close(Hw); f = (0:longitudUtil-1)*frecuenciaMuestreo*1e-6/longitudUtil; t = (0:(length(esPeriodoEstimacion(1,:,1))*numeroSlotsASimular)-1)*slot/(length(esPeriodoEstimacion(1,:,1)))*1e3; n = cell(numeroSlotsASimular,1); [n{:}] = deal(esPeriodoEstimacion(1,:,1)); t = t(cat(2,n{:})); mas.tasaTransmision = length(datosEnviados)/(numeroSlotsASimular*slot); mas.cantidadBitsUsuario = length(datosEnviados); mas.cantidadBitsEstimacion = numeroPilotosPorRB*numeroSlotsASimular*log2(tamanoConstelacion)*canalesIndependientes; mas.tiempoSimulado = numeroSlotsASimular*slot; mas.tiempoSimulacion = toc(tinicial); mas.numeroSubportadoras = numeroSubportadoras; mas.longitudFFT = longitudUtil; mas.anchoDeBanda = BW; mas.logitudPrefijoCiclico = longitudCP; mas.frecuenciaMuestreo = frecuenciaMuestreo; mas.eficienciaEspectral = mas.tasaTransmision/BW;

Documento similar