SIMULACIÓN DE CÓDIGOS CONVOLUCIONALES
He aquí una simulación de códigos convolucionales. Uso de las funciones convenc para codificación y vitdec para decodificación. Mensaje generado con la función randint. Ruido añadido usando la función randerr.
%------CODIGOS CONVOLUCIONALES------ clc %Limpiar Command Window. close all %Cerrar figuras. clear all %Limpiar el wokspace. %*-*-*-*-*-*-*-*-*CODIFICACIÓN*-*-*-*-*-*-*-*-*-*-*- %Convertir un polinomio de código covolucional a un arbol de Trellis %[3]-->Longitud de restricción (número de registros + 1). %[5 7]-->Polinomio generador (valores octales) t = poly2trellis([3],[5 4]); %tasa=bits_entrada/bits_salida tasa=rats(t.numInputSymbols/t.numOutputSymbols); disp(['Radio de codificación:', num2str(tasa)]) %Longitud del mensaje long=1000; %Mensaje aleatorio de dos bits de simbolo mensaje=randint(2*long,1); %Codificación del mensaje. codigo=convenc(mensaje,t); %Generar patrones de errores de bits ruido=randerr(4*long,1,[0 1; 0.9 0.1]); %Añadir ruido a la señal. senal_ruido=rem(codigo+ruido,2); %Graficación de las señales. subplot(5,1,1);stem(mensaje);title('Mensaje');xlim([0 length(mensaje)]) subplot(5,1,2);stem(codigo);title('Código') subplot(5,1,3);stem(ruido);title('Ruido') subplot(5,1,4);stem(senal_ruido);title('Mensaje + Ruido')
%*-*-*-*-*-*DE-CODIFICACIÓN*-*-*-*-*-*-*-*-*-*-*-*-* %Uso de la función VITDEC. %Decodificación con hard decision debido a que la %entrada al decodificador es binaria (1 ó 0). tb=10; deco=vitdec(senal_ruido,t,tb,'cont','hard'); subplot(5,1,5);stem(deco(tb+1:end));title('Señal decodificada') xlim([0 length(deco)]) %Correspondecia de datos: %mensaje(1)-->deco(1+tb) %La señal decodificado resulta desplazada por el valor de tb.
%*-*-*-*-*-*-Tasa de bits errados*-*-*-*-*-*-*- %Uso de la función BITERR [numero tasa posicion_bit]=biterr(deco(1+tb:end),mensaje(1:end-tb)); disp(['Número de errores: ',num2str(numero)]) disp(['Tasa de errores: ',num2str(tasa)]) if numero ~= 0 posicion_de_bit_errado=find(posicion_bit)'; disp(['Posición de bits errados: ',num2str(posicion_de_bit_errado)]) end |