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

📄 ber_identity_data.m

📁 动态多用户检测 IEEE论文算法实现 随机集的实现方法
💻 M
字号:
clear all;
clc;       
fbconnection=[1 0 0 0 0 1];
% fbconnection=[0 0 1 0 0 0 0 0 0 1]; %%本原多项式
kasamiseq=kasami_seq(fbconnection); %% 产生kasami序列
% M=2^(length(fbconnection)/2); %%系统的最大用户数
M=6;%%系统的最大用户数
kasamiseq1=kasamiseq(1:M,:);
clear kasamiseq
kasamiseq=kasamiseq1;
ind_ka=find(kasamiseq==0);
kasamiseq(ind_ka)=-1;% 极性变换
N=2^length(fbconnection)-1; % N为kasami序列长度,即为扩频倍数(扩频增益)
% kasamiseq=(1/sqrt(N))*kasamiseq; %% 归一化

SNR=3:9;
n1=length(SNR);
a1=SNR(1);
a2=SNR(n1);
sgma=1;
R=kasamiseq*kasamiseq';
iR=inv(R);
alfa=[0.1 0.3 1];      %%用户活跃概率
total_T=1000;
tic

[X,Xb]=gen_X(M);
[row_Xb,col_Xb]=size(Xb);


% for alfa_i=1:length(alfa)
alfa_i=3;
        for TT=1:total_T
                identity=rand(1,M);
                identity(1)=1; %%% reference user
                for i=2:M
                    if (identity(i)>alfa(alfa_i))
                        identity(i)=0;
                    else
                        identity(i)=1;
                    end
                end
                identity_yuan(TT,:)=identity;
        end
%%%%%%%%%%%%%%%%经过验证是对的%%%%%%%%%%%%%%%%%%%



    
cyc_snr=1;
for snrindb=a1:a2
        snr=10^(snrindb/10);
        Eb=2*sgma^2*snr;
        Ec=Eb/N;
        A=zeros(M,M);
        A(1,1)=sqrt(Ec);
        for i=2:M
            A(i,i)=sqrt(Ec);
        end
        clear i
        ss=[];
        data_yuan=[];
       for TT_i=1:total_T
              ind_iden=find(identity_yuan(TT_i,:)==1);  %%the identity of user
%               identity(ind_iden)=ind_iden;
              num_fact=length(ind_iden);  %%实际用户数
              num_data=1; %%每个离散时间间隔内传输的二进制数
              T=1;   %%观测时间
              data_number=num_data*T;
              data=randsrc(num_fact,data_number);
              data_yuan=[data_yuan data(1)];%%%传送的数据都是随机的,但是用户数已经定下来了%%%%
    
              s=0;
              for i=1:num_fact
                     temp=A(ind_iden(i),ind_iden(i))*kasamiseq(ind_iden(i),:)'*data(i,:);
                     s=s+temp;
              end
             ss=[ss,s];
       end
        [ss_row,ss_col]=size(ss);
        r=ss+sgma*randn(ss_row,ss_col);
        clear temp i
        y=kasamiseq*r;  %%%经匹配滤波
    %%%  ML检测
         for j=1:2^M
             base2=dec2base(j-1,2,M);
            temp=zeros(1,length(base2));
             for jj=1:length(base2)
                 temp(jj)=base2(jj)-48;
             end
            ind_temp=find(temp==0);
            temp(ind_temp)=-1;
            b(:,j)=temp';
        end
        clear base2 j temp ind_temp jj;
        %%%%%这里是认为每个用户都存在的经典ML估计法%%%%%%%%%
        %%%%%可以写成这样的原因是用户存在与否每个可能性都考虑到了,且用户传输的数据是+1还是-1也考虑进去了

         for i=1:total_T
             for j=1:2^M
                 f(j)=(y(:,i)-R*A*b(:,j))'*iR*(y(:,i)-R*A*b(:,j));
             end
             [value_f,ind_f]=min(f);
             est_b1(:,i)=b(:,ind_f);
        end
        [number,ber]=symerr(est_b1(1,:),data_yuan);   
        BER(alfa_i,cyc_snr)=ber;%%%是一个三维的矩阵%%%%%
%         BER(cyc_snr)=ber;
%         data_ml(:,:,cyc_snr,alfa_i)=est_b1;
   
        clear i j f ind_f 

  %%%   FRST和ML、FRST和MAL两者结合检测 
  
        for cyc_T=1:total_T
            for i=1:col_Xb
                ind_Xb=find(Xb(:,i)==0);
                fml(i)=(y(:,cyc_T)-R*A*Xb(:,i))'*iR*(y(:,cyc_T)-R*A*Xb(:,i));%%%y中的列上有些元素是空的%%%%%
                preP=2^(-M+length(ind_Xb))*alfa(alfa_i)^(M-length(ind_Xb))*(1-alfa(alfa_i))^(length(ind_Xb));
                fmal(i)=preP*exp((-1/(2*sgma^2))*((y(:,cyc_T)-R*A*Xb(:,i))'*iR*(y(:,cyc_T)-R*A*Xb(:,i))));
            end
            [value_fml,ind_fml]=min(fml);
            [value_fmal,ind_fmal]=max(fmal);
            final_Xfmlb(:,cyc_T)=Xb(:,ind_fml); 
            final_Xfmalb(:,cyc_T)=Xb(:,ind_fmal);         
            clear i fml fmal  
        end
        [number,ber1]=symerr(final_Xfmlb(1,:),data_yuan); 
        [number,ber2]=symerr(final_Xfmalb(1,:),data_yuan); 
        BER1(alfa_i,cyc_snr)=ber1;
        BER2(alfa_i,cyc_snr)=ber2;
        BER1(cyc_snr)=ber1;
        BER2(cyc_snr)=ber2;
        data_frstml(:,:,cyc_snr,alfa_i)=final_Xfmlb;
        data_frstmal(:,:,cyc_snr,alfa_i)=final_Xfmalb;
        
       cyc_snr=cyc_snr+1
end
% clear identity_yuan
% end
toc 



figure(1)
semilogy(SNR,BER(1,:),'-kd',SNR,BER(2,:),'-k*',SNR,BER(3,:),'-ks',SNR,BER1(1,:),'-rx',SNR,BER1(2,:),'-ro',SNR,BER1(3,:),'-r+',SNR,BER2(1,:),'-g<',SNR,BER2(2,:),'-g>',SNR,BER2(3,:),'-g^')
% title('ML、FRST-ML和FRST-MAP的比较');
% semilogy(SNR,BER,'-kd',SNR,BER1,'-k*',SNR,BER2,'-ks')
xlabel('Eb/No(dB)');
ylabel('BER');
legend('ML alpha=0.1','ML alpha=0.3','ML alpha=1.0','RST-ML alpha=0.1','RST-ML alpha=0.3','RST-ML alpha=1.0','RST-MAP alpha=0.1','RST-MAP alpha=0.3','RST-MAP alpha=1.0')
% legend('ML alfa=0.1','RST-ML alfa=0.1','RST-MAP alfa=0.1')
 grid on            

⌨️ 快捷键说明

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