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

📄 near_far.m

📁 粒子群算法的多用户检测。希望对智能算法感兴趣的人有用。
💻 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; %% 归一化
sgma=1;
snr_exp=6;
snr_exp=10^(snr_exp/10);
Eb_exp=2*sgma^2*snr_exp;
Ec_exp=Eb_exp/N;

R=kasamiseq*kasamiseq';
iR=inv(R);
    
T=8000;   %%观测时间
tic
for T_i=1:T
    identity=randsrc(1,M);
    
   identity_yuan(T_i,:)=identity;
end

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

SNR=0:12;
n1=length(SNR);
a1=SNR(1);
a2=SNR(n1);   
    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_exp);
        for i=2:M
            A(i,i)=sqrt(Ec);
        end
        clear i
        ss=[];
        data_yuan=[];
       for TT_i=1:T
               %%the identity of user
%               identity(ind_iden)=ind_iden;
              num_fact=M;  %%实际用户数
              num_data=1; %%每个离散时间间隔内传输的二进制数
%               T=1;   %%观测时间
              data_number=num_data;
              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 i=1: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(cyc_snr)=ber;
        data_ml(:,:,cyc_snr)=est_b1;
   
        clear i j f ind_f est_b1

  %%%   FRST和ML、FRST和MAL两者结合检测 
  
        for cyc_T=1: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));
                preP=2^(-M+length(ind_Xb))*alfa^(M-length(ind_Xb))*(1-alfa)^(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(cyc_snr)=ber1;
        BER2(cyc_snr)=ber2;
        data_frstml(:,:,cyc_snr)=final_Xfmlb;
        data_frstmal(:,:,cyc_snr)=final_Xfmalb;
        cyc_snr=cyc_snr+1;
    end

toc 



figure(1)
semilogy(SNR-6,BER,'-d',SNR-6,BER1,'-*',SNR-6,BER2,'-s')
% title('ML、FRST-ML和FRST-MAP的比较');
axis([-6 6 10^(-4) 1])
xlabel('interference user minus the reference user of Eb/No(dB)');
ylabel('BER');
legend('ML','RST-ML ','RST-MAP')
 grid on            
    

⌨️ 快捷键说明

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