En LTE, un bloque de transporte conecta la capa MAC y PHY. El bloque de transporte
por lo general contiene una gran cantidad de bits de datos, que se transmiten al mismo tiempo. El primer conjunto de operaciones realizadas en un bloque de transporte es la codificacin de canal, que se aplica a cada bloque de cdigo de forma independiente. Si el marco de entrada al codificador turbo supera el tamao mximo, el bloque de transporte se suele dividir en varios bloques ms pequeos conocidos como bloques de cdigo. Desde el intercalador interno del codificador turbo slo se define para 188 tamaos de bloque de entrada, el tamao de estos bloques de cdigo necesario para que coincida con la gama de tamaos de bloque de cdigo que admite el codificador turbo. Una combinacin de bloque de cdigo de fijacin de CRC, codificacin turbo, adaptacin de velocidad y se aplica luego a cada bloque de cdigo de forma independiente. Efecto de la adaptacin de velocidad en la codificacin BER turbo
Ejemplo matlab En la siguiente funcin de la segmentacin buscamos el mejor tamao de sub-bloque de satisfacer dos propiedades: (i) es uno entre 188 tamaos de bloque vlidas; y (ii) es un mltiplo entero exacto del tamao de subbloques. El nmero de sub-bloques contenidos en un bloque de cdigo se conoce como parmetro C y el tamao de cada subbloque se conoce como Kplus. Tambin tenemos que calcular un parmetro E de la palabra de cdigo. La salida de la codificacin de canal se conoce como la palabra de cdigo; el tamao de la palabra de cdigo es el producto de C subbloques y el tamao de salida por subbloque E. El tamao total de la palabra de cdigo se determina por el programador, dependiendo de la cantidad de recursos disponibles. La velocidad de codificacin efectiva es entonces la relacin de tamao de palabra de cdigo para el tamao de subbloque. MATLAB function function [C, Kplus] = CblkSegParams(tbLen) %#codegen %% Code block segmentation blkSize = tbLen + 24; maxCBlkLen = 6144; if (blkSize <= maxCBlkLen) C = 1; % number of code blocks b = blkSize; % total bits else L = 24; C = ceil(blkSize/(maxCBlkLen-L)); b = blkSize + C*L; end % Values of K from table 5.1.3-3 validK = [40:8:512 528:16:1024 1056:32:2048 2112:64:6144].; % First segment size temp = find(validK >= b/C); Kplus = validK(temp(1), 1); % minimum K La siguiente funcin MATLAB calcula los tamaos de subbloques y determina cuntos se procesan en paralelo para reconstituir el canal de salidas de codificacin. Primero se divide el nmero total de bits de palabra de cdigo por el nmero de sub-bloques. Para cada sub-bloque, nos aseguramos de que el nmero de bits de salida es divisible por el nmero de bits de modulacin y el nmero resultante de capas mltiples antenas. Algoritmo
MATLAB function function E = CbBitSelection(C, G, Nl, Qm) %#codegen % Bit selection parameters % G = total number of output bits % Nl Number of layers a TB is mapped to (Rel10) % Qm modulation bits Gprime = G/(Nl*Qm); gamma = mod(Gprime, C); E=zeros(C,1); % Rate matching with bit selection for cbIdx=1:C if ((cbIdx-1) <= (C-1-gamma)) E(cbIdx) = Nl*Qm*floor(Gprime/C); else E(cbIdx) = Nl*Qm*ceil(Gprime/C); end end En el receptor, con el fin de realizar correctamente la inversa de las operaciones de juego, necesitamos los parmetros C y Kplus (el nmero de sub-bloques y el tamao de cada subbloque, respectivamente). LTE Transport-Channel Processing La figura 4.9 muestra un diagrama de bloques de procesamiento de TrCH. Cinco componentes funcionales caracterizan el procesamiento del bloque de transporte: Transporte-bloque de fijacin CRC Segmentacin bloque de cdigo y bloque de cdigo adjunto CRC Turbo de codificacin basado en una tasa de 1/3 Cambio a juego para manejar cualquier velocidades de codificacin solicitados Bloque de cdigo de concatenacin.
En la siguiente funcin de MATLAB, tenemos que distinguir entre el caso en que el transporte slo contiene un nico bloque de cdigo y los casos en los que contiene ms de un bloque de cdigo, ya que en el primer caso no es necesario aplicar el apego CRC al bloque de cdigo como el bloque de transporte ya contiene un archivo adjunto de CRC.
function [out, Kplus, C] = TbChannelCoding(in, prmLTE) % Transport block channel coding %#codegen inLen = size(in, 1); [C , Kplus] = CblkSegParams(inLen-24); intrlvrIndices = lteIntrlvrIndices(Kplus); G=prmLTE.maxG; E_CB=CbBitSelection(C, G, prmLTE.NumLayers, prmLTE.Qm); % Initialize output out = false(G, 1); % Channel coding the TB if (C==1) % single CB, no CB CRC used % Turbo encode tEncCbData = TurboEncoder( in, intrlvrIndices); % Rate matching, with bit selection rmCbData = RateMatcher(tEncCbData, Kplus, G); % unify code paths out = logical(rmCbData); else % multiple CBs in TB La secuencia de las operaciones realizadas en la decodificacin del canal puede considerarse como la inversa de los realizados en la codificacin de canal, de la siguiente manera: La iteracin sobre cada bloque de cdigo Cambio dematching (de tipo objetivo a 1/3 la tasa) compuesto por: - Seleccin e insercin de bits - Desentrelazado Parity bits - Desintercalado Secuencia auxiliar - La recuperacin de los bits sistemticos y de paridad para la decodificacin turbo Bloque de cdigo 1/3-rate turbo decodificacin con la terminacin anticipada basado en CRC. Aqu estamos utilizando CRC de todo el bloque de transporte como otro criterio de parada temprana y como un mecanismo para la actualizacin del estado de HARQ. La siguiente funcin MATLAB resume las operaciones en el decodificador de TrCH. Algoritmo MATLAB function function [decTbData, crcCbFlags, iters] = TbChannelDecoding( in, Kplus, C, prmLTE) % Transport block channel decoding. %#codegen intrlvrIndices = lteIntrlvrIndices(Kplus); % Make fixed size G=prmLTE.maxG; E_CB=CbBitSelection(C, G, prmLTE.NumLayers, prmLTE.Qm); % Channel decoding the TB if (C==1) % single CB, no CB CRC used % Rate dematching, with bit insertion deRMCbData = RateDematcher(-in, Kplus) % Turbo decode the single CB tDecCbData =TurboDecoder(deRMCbData, intrlvrIndices, prmLTE.maxIter) % Unify code paths decTbData = logical(tDecCbData); else % multiple CBs in TB decTbData = false((Kplus-24)*C,1); % Account for CB CRC bits startIdx = 0; for cbIdx = 1:C % Code-block segmentation E=E_CB(cbIdx); rxCbData = in(dtIdx(1:E) + startIdx); startIdx = startIdx + E; % Rate dematching, with bit insertion % Flip input polarity to match decoder output bit mapping deRMCbData = lteCbRateDematching(-rxCbData, Kplus, C, E); % Turbo decode each CB with CRC detection % - uses early decoder termination at the CB level [crcDetCbData, crcCbFlags(cbIdx), iters(cbIdx)] = ... TurboDecoder_crc(deRMCbData, intrlvrIndices); % Check the crcCBFlag per CB. If still in error, abort further TB % processing for remaining CBs in the TB, as the HARQ process will % request retransmission for the whole TB. if (prmLTE.fullDecode) if (crcCbFlags(cbIdx)==1) % error break; end end % Code-block concatention decTbData((1:(Kplus-24)) + (cbIdx-1)*(Kplus-24)) = logical(crcDetCbData); end end Las mediciones de BER Ahora nos medimos las tasas de errores de bits de la TrCH enlace descendente LTE en presencia del ruido del canal AWGN. El chap4_ex06 funcin combina todas las operaciones de tratamiento TrCH con codificacin y modulacin. Algoritmo
MATLAB function function [ber, numBits]=chap4_ex06(EbNo, maxNumErrs, maxNumBits) %% Constants FRM=2432-24; Kplus=FRM+24; Indices = lteIntrlvrIndices(Kplus); ModulationMode=1; k=2*ModulationMode; maxIter=6; CodingRate=1/2; snr = EbNo + 10*log10(k) + 10*log10(CodingRate); noiseVar = 10.^(-snr/10); %% Processing loop modeling transmitter, channel model and receiver numErrs = 0; numBits = 0; nS=0; while ((numErrs < maxNumErrs) && (numBits < maxNumBits)) % Transmitter u = randi([0 1], FRM,1); % Randomly generated input bits data= CbCRCGenerator(u); % Transport block CRC code [t1, Kplus, C] = TbChannelCoding(data,Indices,maxIter); % Transport Channel encoding t2 = Scrambler(t1, nS); % Scrambler t3 = Modulator(t2, ModulationMode); % Modulator % Channel c0 = AWGNChannel(t3, snr); % AWGN channel % Receiver r0 = DemodulatorSoft(c0, ModulationMode, noiseVar); % Demodulator r1 = DescramblerSoft(r0, nS); % Descrambler [r2 ] = TbChannelDecoding(r1, Kplus, C, Indices,maxIter); % Transport Channel decoding y = CbCRCDetector(r2); % Code block CRC detector % Measurements numrrs = numrrs sum(=u); % Update number of bit errors numBits = numBits + FRM; %Update number of bits processed % Manage slot number with each subframe processed nS = nS + 2; nS = mod(nS, 20); end %% Clean up & collect results ber = numErrs/numBits; % Compute Bit Error Rate (BER)
Mediante la ejecucin de esta funcin con un rango de valores de SNR, podemos verificar que la combinacin del mtodo empleado para su DLSCH y PDSCH sin operaciones de OFDM y MIMO se implementa correctamente. Figura 4.10 ilustra el rendimiento del BER del transceptor. En este experimento, se utiliza la adaptacin de velocidad con una velocidad de codificacin de 1/2 y un modulador QPSK y repetir las operaciones para un rango de valores para un nmero mximo de iteraciones de uno a seis. Como era de esperar, al proporcionar ms iteraciones de descodificacin se obtiene progresivamente mejores resultados de rendimiento. Esto demuestra una vez ms el papel fundamental que la terminacin temprana puede desempear para lograr el procesamiento DLSCH especificado en el estndar LTE ms realizable.
Hasta ahora hemos estudiado el esquema de correccin de errores hacia adelante empleado en el estndar LTE basado en un modelo de canal sencillo (AWGN). El estndar LTE usa la propagacin del entorno AWGN para la medicin del rendimiento esttico. No desvanecimiento o multipaths existen para este modelo de propagacin y no toma en cuenta la respuesta de frecuencia de los canales reales. La mayora de los canales reales se suman a las seales diversas formas de transmisin de la decoloracin y otras distorsiones correlacionados. Estos perfiles de desvanecimiento introducen interferencia entre smbolos, que debe ser compensada mediante el uso de ecualizacin. Se observa que el rendimiento de la codificacin de canal iterativo turbo depende del nmero de iteraciones utilizados. Esto motiva la discusin con respecto a la aceleracin de la simulacin en el Captulo 9.