⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ber_awgn_ran_old.m

📁 高斯信道下
💻 M
字号:
%% Initialization

function BER=BER_AWGN_ran(Q,L,N_bit,N_user,SNRto)
flag=0;
% clear all;

N_sym=N_bit/log2(Q);

% for N_user=1:3;    
% BER=zeros(N_user,SNRto);
BER=zeros(1,SNRto+1);
t_begin=1;
for SNRindB=0:SNRto
    
    
    
    EbNo=10.^(SNRindB./10);
    EsNo=log2(Q).*EbNo;
    sigma=sqrt(L./(2*EsNo));
%     nI=randn(N_user,N_sym*L);
%     nQ=randn(N_user,N_sym*L);



    
clear A;


% % optimum address
% 
% A(1,:) = [0 0 0 0 0 0 0];
% A(2,:) = [1 2 4 3 6 7 5];
% A(3,:) = [2 4 3 6 7 5 1];
% A(4,:) = [3 6 7 5 1 2 4];
% A(5,:) = [4 3 6 7 5 1 2];
% A(6,:) = [5 1 2 4 3 6 7];
% A(7,:) = [6 7 5 1 2 4 3];
% A(8,:) = [7 5 1 2 4 3 6];

% A = A(1:N_user,1:L);




%% Address Matrix Generating  

X_rec=[];

% Random address & Bits Generation
for m=1:N_user
    A(m,:) = round(rand(1,L)*(Q-1));
    B(m,:) = BitStreamGen(N_bit);
    X(m,:) = BitStreamToSymbol(B(m,:),Q); % Mapping 
end
%% 

BER_TEMP=[];
for threshold=t_begin:-0.02:0

for n=1:N_sym
    
    % Address Assigning Y=X+A
    Y=FFH(X(:,n),Q,A);
    
%     M=zeros(Q,L);
    M=[];
    for i=1:N_user
        M(:,:,i)=zeros(Q,L);
    end
    

    % Generate R Matrix
    for i=1:L
        for j=1:N_user
            M(Y(j,i)+1,i,j)=1;
        end

    end
    Chip=sum(M,3);
%     R=M1+M2+M3+M4+M5+M6+M7+M8;
%% Signal Pass Though AWGN Channel
r=[];
for i=1:Q
    for j=1:L
        nI=randn(1);
        nQ=randn(1);
        if Chip(i,j)==0
            r(i,j)=(nI*sigma).^2+(nQ*sigma).^2;
        else
            phi=2*pi*rand(1,Chip(i,j));
            r(i,j)=(sum(cos(phi))+nI*sigma).^2+(sum(sin(phi))+nQ*sigma).^2;
        end
    end
end
            
        
R=r; 
% R((n-1)*L+1:n*L,snr)=r;


% end
    
%% Detection 


    for i=1:N_user
        Z(:,:,i)=zeros(Q,L);
    end
    
    for j=1:L
        F=find(R(:,j)>threshold)-1;
        c=[];
        if length(F)>0
           for i=1:N_user
               c(i,:)=deFFH(F,A(i,j),Q)+1;
           end
        else
            c=[];
        end
            

        for i=1:N_user
            if length(c)>0
                Z(c(i,:),j,i)=1;
            else
                Z(:,j,i)=zeros(1,Q);
            end
        end

    end
    sumz=[];
    for i=1:N_user
        sumz(i,:)=sum(Z(:,:,i),2);
    end
    

      D=[];
      for i=1:N_user
%           D(i,:)=find(sumz(i,:)==max(sumz(i,:)));
          D_temp=find(sumz(i,:)==max(sumz(i,:)));
          D_temp_length=length(D_temp);
          if D_temp_length<Q
              ZERO=zeros(1,Q-D_temp_length);
              D_temp=[D_temp ZERO];
          end
          D(i,:)=D_temp; 
      end
      D_length=[];
      for i=1:N_user
          D_length(i)=length(find(D(i,:)>0));
      end
      

      
      for i=1:N_user
          X_rec(i,n)=D(i,ceil(rand(1)*D_length(i)))-1;
      end

    
end

%% Received BitStream
B_rec=SymbolToBitStream(X_rec,Q);


%% BER Calculation

if SNRindB==0
    BER(1)=sum(sum(B_rec~=B))/N_user/N_bit;
    t_begin=threshold-0.02;
    break;
end


BER_TEMP=[BER_TEMP sum(sum(B_rec~=B))/N_user/N_bit];
if length(BER_TEMP)~=1
    if BER_TEMP(length(BER_TEMP))>=BER_TEMP(length(BER_TEMP)-1)
        BER(SNRindB+1)=BER_TEMP(length(BER_TEMP)-1);
        t_begin=threshold;
        flag=flag+1
        break;
    end
end

if threshold<=0.02
    BER(SNRindB+1)=BER_TEMP(length(BER_TEMP));
    flag=flag+1
end
    
   
end
BER(SNRindB+1)
threshold
end

% figure(1);
% 
% semilogy(0:SNRto,BER,'o');
% hold on;


% end

% figure(1);
% clf;
% semilogy(1:N_user,BER,'o');
% % semilogy(1:length(threshold),BER,'o');
% % hold on;
% % end
% % hold off;

⌨️ 快捷键说明

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