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

📄 jce_4part.m

📁 信道估计程序,对多用户,多入射角度情况进行仿真.
💻 M
📖 第 1 页 / 共 2 页
字号:
clc
clear all;

users=[4 2 4 8];
c1=clock
load ('D:\4M4K100slotscase3.mat')
for U_no=1:1
    K=users(U_no)%用户数
    M=4;%天线数
    TS_num=10;%时隙数
    cell_num=2;%小区序号
    Lm=144;
    casething=3;   
    %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@可以改变
    switch casething
        case 1
            paths=2;   
            delay_tapscase=[0 4]; % timedelay of multipath

            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case1
        case 2
            paths=3;
            delay_tapscase=[0 4 15];
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case2
        case 3
            paths=4;
            delay_tapscase=[0 1 2 3];
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%case3
    end 
    W=max(delay_tapscase)+1;
    T_max=W-1;
    [chip_tran,bit_source,w4,scram,Q]=tx3(TS_num,K,cell_num);%chip_tran矩阵是发送端发出的chip序列,bit_source是用户的比特序列,w4是用户的扩频码矩阵,
    %scram是用户的扰码矩阵,Q是扩频因子,tx1的第一个函数是时隙数,第二个函数是用户数,第三个是小区数;
    %以下程序产生瑞利衰减信道对每个用户的每一径的平均衰减,以及进行联合检测的用户数据
    N=352/Q;%N是每段数据的字符数
    N_1=2*N;%N1是两段数据的字符总和
    chip_1=chip_tran(:,1:1000);%
    %%%%%%%%%%%%%%%%%%%%%产生信道估计用的G矩阵%%%%%%%%%%%
    %%%%%%%截取K个用户的中缀码放入G_1中%%%%%%
    for i=1:K
        G_1(i,:)=chip_1(i,353:496);%%%%维数:【K,144】
    end
    clear i;
    %%%%%%%%%%%%%每个用户因为多径效应,中缀码也有W径,共K个用户%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:K
        G_2=G_1(i,:).';%%%取出第k个用户的中缀码转置放入G_2中,以备后用
        for j=1:W   %%%%%%%%%%%%%%%产生第k个用户的W个信道冲击响应的中缀码矩阵
            G_3(:,j)=G_2(W-j+1:Lm-j+1);
        end
        G_4(:,(i-1)*W+1:i*W)=G_3;%%%%%将第k个用户的中缀码多径矩阵,放入G中
        
    end   %%%%%%%结束K个用户循环,维数是:【(L-W+1),KW】
    G=KRON(eye(M),G_4);   %%%%维数是:【M(L-W+1),MKW】   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    H_ZF=inv(G'*G)*G';%%%%    MKW,M(Lm+W-1)
    clear G_1 G_2 G_3 G_4 G;
    
    
    %%%%%%%%%%%%%%%%%%%%%产生2个信道估计用的G矩阵%%%%%%%%%%%
    %%%%%%%截取K个用户的中缀码放入G_1中%%%%%%
    for i=1:K
        G_1(i,:)=chip_1(i,353:424);%%%%维数:【K,144】
    end
    clear i;
    %%%%%%%%%%%%%每个用户因为多径效应,中缀码也有W径,共K个用户%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:K
        G_2=G_1(i,:).';%%%取出第k个用户的中缀码转置放入G_2中,以备后用
        for j=1:W   %%%%%%%%%%%%%%%产生第k个用户的W个信道冲击响应的中缀码矩阵
            G_3(:,j)=G_2(W-j+1:72-j+1);
        end
        G_4(:,(i-1)*W+1:i*W)=G_3;%%%%%将第k个用户的中缀码多径矩阵,放入G中
        
    end   %%%%%%%结束K个用户循环,维数是:【(L-W+1),KW】
    G=KRON(eye(M),G_4);   %%%%维数是:【M(L-W+1),MKW】   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    H_ZF_1=inv(G'*G)*G';%%%%    MKW,M(Lm+W-1)
    clear G_1 G_2 G_3 G_4 G;
    
    %%%%%%%截取K个用户的中缀码放入G_1中%%%%%%
    for i=1:K
        G_1(i,:)=chip_1(i,425:496);%%%%维数:【K,144】
    end
    clear i;
    %%%%%%%%%%%%%每个用户因为多径效应,中缀码也有W径,共K个用户%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for i=1:K
        G_2=G_1(i,:).';%%%取出第k个用户的中缀码转置放入G_2中,以备后用
        for j=1:W   %%%%%%%%%%%%%%%产生第k个用户的W个信道冲击响应的中缀码矩阵
            G_3(:,j)=G_2(W-j+1:72-j+1);
        end
        G_4(:,(i-1)*W+1:i*W)=G_3;%%%%%将第k个用户的中缀码多径矩阵,放入G中
        
    end   %%%%%%%结束K个用户循环,维数是:【(L-W+1),KW】
    G=KRON(eye(M),G_4);   %%%%维数是:【M(L-W+1),MKW】   
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    H_ZF_2=inv(G'*G)*G';%%%%    MKW,M(72+W-1)
    clear G_1 G_2 G_3 G_4 G;
    clear chip_1;
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %%%%%%%%%%%%%%%%%%%%% TS_num个时隙的循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    for p=1:TS_num
        p
        H_user=zeros(K*W,1000,M);
        H_user(:,1:864,:)=H_all(:,(p-1)*864+1:p*864,:);
        sinr=[5];
        chip_1=chip_tran(:,(p-1)*1000+1:p*1000);%%%%%%调用不同时隙的符号序列,维数是[K,1000] 
        bit_source_1=bit_source(:,(p-1)*2*N_1+1:p*2*N_1);%%%%调用不同时隙的数据比特
        H_multi=H_user(1:K*W,:,:);
        H_delay=zeros(W,1000+W-1);
        sum_channel=zeros(K*W,M);
        r_delay=zeros(K*W,1000+W-1,M);
        
        for m=1:M
            H_page=H_multi(:,:,m);%%%【K×W,1000】
            sum_channel(:,m)=sum(H_page,2);%对矩阵的每一行求和,即对每一径进行求和,列向量,K*W,M
            for k=1:K
                H_single=H_multi((k-1)*W+1:k*W,:,m);
                for w=1:W
                    A_delay(w,w:1000+w-1)=chip_1(k,:); % A_delay是每一径经延迟后的K个用户的信号矩阵,对用户各径数据产生延迟,
                    %最大延迟为W-1(已把τ(max)归一化为chip)
                    H_delay(w,w:1000+w-1)=H_single(w,:);
                end
                r_delay((k-1)*W+1:k*W,:,m)=A_delay.*H_delay;
            end
        end
        h=sum_channel/1000;%%%维数是【K*W,M】,用于构造系统矩阵
        h=transpose(h);
        
        %%%%%通过瑞利信道之后,再通过高斯信道
        for n=1:length(sinr)
            for m=1:M
                B(m,:)=sum(r_delay(:,:,m));%%%%一根天线上所有用户的数据
            end
            B_noise=awgn(B,sinr(n),'measured');%对每个天线上接收到的数据加高斯白噪声
            %对第p个时隙进行联合检测,程序知道QPSK解调前才结束;产生D_symbol矩阵
            data_1=B_noise(:,1:352+T_max);%去复用,得到第一段数据
            data_2=B_noise(:,497:848+T_max);%去复用,得到第二段数据
            %%%% 分四段来做  %%%%
%             chip_qian_1=chip_end(:,1:176+W-1);
%             chip_qian_2=chip_end(:,177:352+W-1);
%             chip_qian_3=chip_end(:,497:672+W-1);
%             chip_qian_4=chip_end(:,673:848+W-1);
            %%%%%%%%%%%%%%%%%%%中缀码的截取,前面W-1个不要%%%%%%%%%%%%%%
            midamble=B_noise(:,352+T_max+1:352+Lm).';%  混合多径中缀码数据,维数是[(L-W+1),M]
            x_midamble=midamble(:);
            H_est2=H_ZF*x_midamble;%%%  MK*W,1
            
            %%%%% midi码分2段来做信道估计
            midamble_1=B_noise(:,352+T_max+1:352+72).';% 
            x_midamble_1=midamble_1(:);
            midamble_2=B_noise(:,424+T_max+1:424+72).';% 
            x_midamble_2=midamble_2(:);
            H_est_1=H_ZF_1*x_midamble_1;%%%   { [MKW,M(72+W-1)]  , [M(72+W-1),1] }
            H_est_2=H_ZF_2*x_midamble_2;%%%  MK*W,1  
            %%% 利用估计中缀码得到的2段信道估计得值,线性延升到数据得2段上
%             slope=(H_est_2-H_est_1)/72;
%             slope_r=real(slope);
%             slope_i=imag(slope);
%             location_1=-248;
%             location_2=320;
%             H_1_r=real(H_est_1)+slope_r*location_1;
%             H_1_i=imag(H_est_1)+slope_i*location_1;
%             H_2_r=real(H_est_1)+slope_r*location_2;
%             H_2_i=imag(H_est_1)+slope_i*location_2;
%             H_1=H_1_r+sqrt(-1)*H_1_i;
%             H_2=H_2_r+sqrt(-1)*H_2_i;
            for i=1:M
                H_est1(i,:)=H_est2((i-1)*K*W+1:i*K*W).';   
                H_est_11(i,:)=H_est_1((i-1)*K*W+1:i*K*W).';  
                H_est_22(i,:)=H_est_2((i-1)*K*W+1:i*K*W).';  
            end
            
          
            
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            
            %下面的程序产生系统矩阵
            %先进行信道估计和扩频码的卷积
            con1=W+Q-1;
            for m=1:M
                for k=1:K
                    u=H_est_11(m,(k-1)*W+1:k*W);
                    v=w4(Q-k+1,:).*scram;
                    b(m,(k-1)*con1+1:k*con1)=conv(u,v);

⌨️ 快捷键说明

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