reedsalomon.m

来自「802.16-wimax系统物理层的仿真代码」· M 代码 · 共 64 行

M
64
字号
function [salida] = ReedSalomon(aleatorios,codigoRS,Tx);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%                                                                       %
%%     Archivo: ReedSalomon.m                                            %
%%                                                                       %
%%     Descripci髇: Realizamos la codificaci髇 de Reed-Salomon tal       %
%%       y como se indica en la norma                                    %
%%                                                                       %
%%     Par醡etros:                                                       %
%%       entrada-->Secuencia de bits a codificar con el algoritmo        %
%%                                                                       %
%%     Resultado: Devuelve la cadena de bits codificados seg鷑 se        %
%%       haya necesitado (dependiendo de la modulaci髇)                  %
%%                                                                       %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

 m = 8;                            % N鷐ero de bits por s韒bolo
 n = codigoRS(1);                  % Longitud de la palabra del c骴igo
 k = codigoRS(2);                  % N鷐ero de simbolos de informaci髇

 % Para realizar el algoritmo de Reed-Solomon, necesito la informaci髇
 % codificada en decimal, para ello realizo las siguientes operaciones:

  aleatorios = reshape(aleatorios,8,length(aleatorios)/8)';
  aleatorios = bi2de(aleatorios,'left-msb');
 
if Tx==1  
    % Como necesito una longitud de 36 bytes a la entrada, relleno con un 
    % cero al final del vector de los datos:
     yk=[aleatorios' 0];
     
    % Genero el vector de Galois, el polinomio generador del codigo y, por
    % 鷏timo codifico los s韒bolos con el algoritmo de Reed-Salomon:
    msg = gf([yk],m); 
    if n==k
        codeRS = msg;
    elseif n~=k
        codeRS = rsenc(msg,n,k);
    end
    salida = codeRS.x;
    
elseif Tx==0
    yk = aleatorios;            % En el receptor no tengo que completar nada.
  
    msg = gf([yk],m);           % En este caso, deshago la codificaci髇.
    if n==k
        codeRS = yk;
    elseif n~=k
        codeRS = rsdec(msg',n,k);
        codeRS = codeRS.x;
    end
    salida = codeRS(1:end-1);
end

% Lo paso a binario de nuevo para seguir trabajando en el transmisor:
 salida = double (salida);
 salida = de2bi (salida,8,'left-msb');

% Serializo los datos para la siguiente etapa.
 salida = reshape (salida', 1, length(salida)*8);

 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?