lunes, 30 de noviembre de 2015

PRBS en Matlab



function [prbs,new_prbs]=SBPA(n,t_m,ancho)
% clc
% clear all
% close all
%se compara el número de bits(n) para saber cual es la posición del primer
%bit a comparar, de acuerdo a Landau (2006), pag 230
tocho=0;    %tocho será una bandera, si n vale 8 es uno, sino es cero
if n==3
    b1=1;
elseif n==5
    b1=3;
elseif n==7
    b1=4;
elseif n==8
    tocho=1;
elseif n==9
    b1=5;
elseif n==10
    b1=7;
else
    b1=n-1;
end

b2=n;   %b2 indica la posición del segundo bit a comparar
mceros=zeros(1,n); %se crea una matriz de ceros para comparar con la matriz m

%ciclo while para evitar que la matriz m generada aleatoriamente tenga solo
 %valores de 0, lo cual no permite generar una prbs
bceros=0; %bandera para comprobar que la matriz m no tenga solo valores de cero,
            %cambia a 1 cuando mceros y m son diferentes
           
%  while bceros==0    %mientras la matriz m sea de ceros se generará de nuevo la matriz m
%     m=round(rand(1,n)); %se crea una vector fila de tamaño n, con valores de 0 y 1
%     if mceros==m;       %si mceros es igual a m bceros es igual a cero
%         bceros=0;
%     else
%         bceros=1;       %si no son iguales bceros es igual a 1
%     end
% end
 m=ones(1,n); %se crea una vector fila de tamaño n, con valores de 1
prbs=ones(1,(2^n)-1); %se crea un vector fila de tamaño (2^n)-1,relleno con unos
                      %para despues sustituir con los valores de salida y formar la prbs
a=0;    % a guarda el resultado de la operación XOR con los bits indicados por b1 y b2

%ciclo for que realiza la operación XOR hasta llenar la prbs, se cicla
%hasta (2^n)-1
for i=1:1:(2^n)-1
   
    if tocho==1 %si n es igual a 8 se comparan 4 bits, las posiciones son 2, 3, 4 y 8
        a=xor(xor(m(2),m(3)),xor(m(4),m(8)));    %se guarda el resultado en a
    else %si n es diferente de 8 se comparan los bits indicados con b1 y b2
        a=xor(m(b1),m(b2));     %se guarda el resultado en a
    end
   
      prbs(i)=m(n);   %se agrega a la prbs en la posición i el valor de la matriz m en la posición n,
                        %lo cual es el bit de salida de la matriz m
        %for para recorrer los valores de la matriz m desde la posición 2 hasta (2^n)-1
        for j=n:-1:2
            m(j)=m(j-1);
        end
       
        m(1)=a; %a la matriz m en su posición 1, se le guarda el valor de a (resultado de la operación XOR)     
end
% figure
% stairs(prbs)
% figure
% % periodogram(prbs)
for i=1:((2^n)*ancho-ancho-ancho)/t_m
    new_prbs(i+ceil((ancho)/t_m))=prbs(ceil((i/ancho)*t_m));
end

No hay comentarios:

Publicar un comentario