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

📄 threshold_test.m

📁 FFH中传统门限的比较获取
💻 M
字号:
%% Initialization

function [BER Opt_Threshold_Indicate]=Threshold_test(Q,L,N_bit,N_user,SNRindB)


% Q=8; % Number of MFSK levels (Hopping Frequencies)
% L=4; % Number of hops per symbol
% 
% N_bit=3000;
% 
N_sym=N_bit/log2(Q);
BER=[];
% 
% % for SNRindB=1:10;
% SNRindB=10;

    


% for snr=1:length(SNRindB)
    
    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);

t_length=0;

for threshold=0:0.02:1
    
    t_length=t_length+1;

    
clear A;


% optimum address

if Q==8
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];
end;
if Q==16
A=        [0           0           0           0           0           0;
           1           2           4           8           3           6;
           2           4           8           3           6          12;
           3           6          12          11           5          10;
           4           8           3           6          12          11;
           5          10           7          14          15          13;
           6          12          11           5          10           7;
           7          14          15          13           9           1;
           8           3           6          12          11           5;
           9           1           2           4           8           3;
          10           7          14          15          13           9;
          11           5          10           7          14          15;
          12          11           5          10           7          14;
          13           9           1           2           4           8;
          14          15          13           9           1           2;
          15          13           9           1           2           4;];
end;
if Q==32
    A=    [0           0           0           0           0           0;
           1           2           4           8          16           5;
           2           4           8          16           5          10;
           3           6          12          24          21          15;
           4           8          16           5          10          20;
           5          10          20          13          26          17;
           6          12          24          21          15          30;
           7          14          28          29          31          27;
           8          16           5          10          20          13;
           9          18           1           2           4           8;
          10          20          13          26          17           7;
          11          22           9          18           1           2;
          12          24          21          15          30          25;
          13          26          17           7          14          28;
          14          28          29          31          27          19;
          15          30          25          23          11          22;
          16           5          10          20          13          26;
          17           7          14          28          29          31;
          18           1           2           4           8          16;
          19           3           6          12          24          21;
          20          13          26          17           7          14;
          21          15          30          25          23          11;
          22           9          18           1           2           4;
          23          11          22           9          18           1;
          24          21          15          30          25          23;
          25          23          11          22           9          18;
          26          17           7          14          28          29;
          27          19           3           6          12          24;
          28          29          31          27          19           3;
          29          31          27          19           3           6;
          30          25          23          11          22           9;
          31          27          19           3           6          12;];
end
if Q==64
     A=   [0           0           0           0           0           0;
           1           2           4           8          16          32;
           2           4           8          16          32           3;
           3           6          12          24          48          35;
           4           8          16          32           3           6;
           5          10          20          40          19          38;
           6          12          24          48          35           5;
           7          14          28          56          51          37;
           8          16          32           3           6          12;
           9          18          36          11          22          44;
          10          20          40          19          38          15;
          11          22          44          27          54          47;
          12          24          48          35           5          10;
          13          26          52          43          21          42;
          14          28          56          51          37           9;
          15          30          60          59          53          41;
          16          32           3           6          12          24;
          17          34           7          14          28          56;
          18          36          11          22          44          27;
          19          38          15          30          60          59;
          20          40          19          38          15          30;
          21          42          23          46          31          62;
          22          44          27          54          47          29;
          23          46          31          62          63          61;
          24          48          35           5          10          20;
          25          50          39          13          26          52;
          26          52          43          21          42          23;
          27          54          47          29          58          55;
          28          56          51          37           9          18;
          29          58          55          45          25          50;
          30          60          59          53          41          17;
          31          62          63          61          57          49;
          32           3           6          12          24          48;
          33           1           2           4           8          16;
          34           7          14          28          56          51;
          35           5          10          20          40          19;
          36          11          22          44          27          54;
          37           9          18          36          11          22;
          38          15          30          60          59          53;
          39          13          26          52          43          21;
          40          19          38          15          30          60;
          41          17          34           7          14          28;
          42          23          46          31          62          63;
          43          21          42          23          46          31;
          44          27          54          47          29          58;
          45          25          50          39          13          26;
          46          31          62          63          61          57;
          47          29          58          55          45          25;
          48          35           5          10          20          40;
          49          33           1           2           4           8;
          50          39          13          26          52          43;
          51          37           9          18          36          11;
          52          43          21          42          23          46;
          53          41          17          34           7          14;
          54          47          29          58          55          45;
          55          45          25          50          39          13;
          56          51          37           9          18          36;
          57          49          33           1           2           4;
          58          55          45          25          50          39;
          59          53          41          17          34           7;
          60          59          53          41          17          34;
          61          57          49          33           1           2;
          62          63          61          57          49          33;
          63          61          57          49          33           1;];
end
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
%% 
% for snr=1:length(SNRindB)

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

BER=[BER sum(sum(B_rec~=B))/N_user/N_bit]

end
Opt_Threshold_Indicate=find(BER==min(BER));
% end
% figure(1);
% 
% % semilogy(1:N_user,BER,'o');
% semilogy(1:t_length,BER,':');
% hold on;
% end


% hold off;

⌨️ 快捷键说明

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