📄 viterbi.m
字号:
function [codificado] = viterbi(msg,plantilla,Tx);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %
%% Archivo: viterbi.m %
%% %
%% Descripci髇: Realizamos una codificaci髇 convolucional de tasa %
%% inicial de 1/2, posteriormente realizamos el proceso del %
%% puntured con la plantilla que se haya definido, dependiendo de %
%% tasa global que se quiera conseguir. %
%% Si estamos recibiendo, la funci髇 se encarga de decodificar la %
%% secuencia recibida a trav閟 del algoritmo de Viterbi. %
%% %
%% Par醡etros: %
%% entrada-->Secuencia de bits a (de)codificar con el algoritmo %
%% %
%% Resultado: Devuelve la cadena de bits (de)codificados seg鷑 se %
%% haya necesitado (dependiendo de la modulaci髇 y de la tasa) %
%% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=poly2trellis(7, [133 171]);
bloque = length (plantilla); % Longitud de la plantilla
codigo_final=[];
if Tx==1 % Si estoy transmitiendo y debo codificar.
codigo = convenc(msg,t);
codigo_punctured = codigo;
bucle = length(codigo)/bloque; % Veces que tengo que aplicar la plantilla.
% DEPENDIENDO DEL MAPEO UTILIZADO, ME DEBO QUEDAR CON M罶 O MENOS BITS
% Realizo el puncturing, extrayendo los bits necesarios en cada caso
for i=0:bucle-1
muestra = codigo_punctured (i*bloque+1:(i+1)*bloque);
for j=1:bloque
if plantilla(j)==1
codigo_final = [codigo_final muestra(j)];
end
end
end
codificado = codigo_final;
elseif Tx==0 % Si estoy recibiendo los datos, debo deshacer el proceso
bucle= length(msg)/sum(plantilla); % Veces que repito ahora el proceso.
longitud = sum(plantilla);
% Transmito 1s y -1s, para que ahora con el puntured se sepa qu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -