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

📄 jce_4part.m

📁 信道估计程序,对多用户,多入射角度情况进行仿真.
💻 M
📖 第 1 页 / 共 2 页
字号:
                end
            end
            %下面程序进行b矩阵的矢量化,即把一个用户在各个天线上的W径写出一列
            V=zeros(M*(Q+W-1),K);
            for k=1:K
                for j=1:con1
                    V((j-1)*M+1:j*M,k)=b(:,(k-1)*con1+j);%对每一个用户在每一个天线上的衰减进行矢量化
                end
            end 
            clear j;
           C=M*Q;%C是两个V矩阵之间相隔的行数
            R=M*con1;%R是V矩阵的行数
            T=zeros(M*(N*Q+W-1),N*K);%T矩阵有(N-1)*C+M*o行,有N*K列;将C和R带入后,T矩阵的行数可简化为M*(N*Q+W-1)
            for j=1:N
                T_1((j-1)*C+1:(j-1)*C+R,(j-1)*K+1:j*K)=V;%T矩阵是对角线由N个V矩阵构成,其余元素为0的矩阵;
            end
            clear j V b;
             %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              %下面的程序产生系统矩阵
            %先进行信道估计和扩频码的卷积
            con1=W+Q-1;
            for m=1:M
                for k=1:K
                    u=H_est_22(m,(k-1)*W+1:k*W);
                    v=w4(Q-k+1,:).*scram;
                    b(m,(k-1)*con1+1:k*con1)=conv(u,v);
                end
            end
            %下面程序进行b矩阵的矢量化,即把一个用户在各个天线上的W径写出一列
            V=zeros(M*(Q+W-1),K);
            for k=1:K
                for j=1:con1
                    V((j-1)*M+1:j*M,k)=b(:,(k-1)*con1+j);%对每一个用户在每一个天线上的衰减进行矢量化
                end
            end 
            clear j;
            C=M*Q;%C是两个V矩阵之间相隔的行数
            R=M*con1;%R是V矩阵的行数
            T=zeros(M*(N*Q+W-1),N*K);%T矩阵有(N-1)*C+M*o行,有N*K列;将C和R带入后,T矩阵的行数可简化为M*(N*Q+W-1)
            for j=1:N
                T_2((j-1)*C+1:(j-1)*C+R,(j-1)*K+1:j*K)=V;%T矩阵是对角线由N个V矩阵构成,其余元素为0的矩阵;
            end
            clear j;
            
            %%%%%%%%%%%%%%%%%%%%%%%利用T矩阵对第p个时隙进行联合检测;
              %把M个天线上接收到的用户数据进行矢量化
            D_1=data_1(:);%对第一段数据进行矢量化
            D_2=data_2(:);%对第二段数据进行矢量化
%             T_1=T'*T;%T矩阵的共轭转置;
%             T_2=inv(T_1);
%             T_3=T_2*T';
            D_num_1=inv(T_1'*T_1)*T_1'*D_1;%K个用户的字符按顺序排成一列,每个用户N个字符;
            
            D_num_2=inv(T_2'*T_2)*T_2'*D_2;
            
            D_num=[D_num_1;D_num_2];
            D_symbol=zeros(K,N_1);
            for q=1:N_1
                D_symbol(:,q)=D_num((q-1)*K+1:q*K,1);
            end 
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
            %%%%%%%%%%%%%%%%%%%%%%没有进行H估计的系列程序%%%%%%%%%%%%%
            %以下程序进行QPSK解调
            D_bit=zeros(K,2*N_1);
            angle_symbol=angle(D_symbol);
            for k=1:K
                for j=1:N_1
                    if angle_symbol(k,j)>=(pi/4) & angle_symbol(k,j)<(3*pi/4)
                        D_bit(k,2*j-1:2*j)=[0 0];
                    elseif angle_symbol(k,j)>=(-3*pi/4) & angle_symbol(k,j)<(-pi/4)
                        D_bit(k,2*j-1:2*j)=[1 1];
                    elseif angle_symbol(k,j)>=(-pi/4) & angle_symbol(k,j)<(pi/4)
                        D_bit(k,2*j-1:2*j)=[0 1];
                    else 
                        D_bit(k,2*j-1:2*j)=[1 0];
                    end
                end
                %                  D_bit_1(k,:) = vitdec(D_bit(k,:), trel, tblen, 'cont', 'hard');
                %                   bit_source_11(k,:) = vitdec(bit_source_1(k,:), trel, tblen, 'cont', 'hard');
            end 
            clear j ;
            %以下程序计算误比特率
            D_same=zeros(K,2*N_1);
            D_same=eq(D_bit,bit_source_1);%输入和输出作比较,找出传输没有出错的信号;
            D_diff=~D_same;
            diff(n,p)=sum(sum(D_diff));%传错的比特数
   
            
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        
            %%%%%%%%%%%%%%%%%%%%%以下程序利用估计的H,JD检测%%%%%%%%%%%%%%%%%%%%%
            %chip_1=chip_tran(:,(p-1)*1000+1:p*1000);
            %   con1=W+Q-1;
            for m=1:M
                for k=1:K
                    u1=H_est1(m,(k-1)*W+1:k*W);
                    v=w4(Q-k+1,:).*scram;
                    b1(m,(k-1)*con1+1:k*con1)=conv(u1,v);
                end
            end
            %下面程序进行b矩阵的矢量化,即把一个用户在各个天线上的W径写出一列
            V1=zeros(M*(Q+W-1),K);
            for k=1:K
                for j=1:con1
                    V1((j-1)*M+1:j*M,k)=b1(:,(k-1)*con1+j);%对每一个用户在每一个天线上的衰减进行矢量化
                end
            end 
            clear j;
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%下面程序构成T矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%
            
            C=M*Q;%C是两个V矩阵之间相隔的行数
            R=M*con1;%R是V矩阵的行数
            T1=zeros(M*(N*Q+W-1),N*K);%T矩阵有(N-1)*C+M*o行,有N*K列;将C和R带入后,T矩阵的行数可简化为M*(N*Q+W-1)
            for j=1:N
                T1((j-1)*C+1:(j-1)*C+R,(j-1)*K+1:j*K)=V1;%T矩阵是对角线由N个V矩阵构成,其余元素为0的矩阵;
            end
            clear j;
            %%%%%%%%%%%%%%%%%%%%%%%利用T矩阵对第p个时隙进行联合检测;
            T_11=T1'*T1;%T矩阵的共轭转置;
            T_22=inv(T_11);
            T_33=T_22*T1';
            D_num_11=T_33*D_1;%K个用户的字符按顺序排成一列,每个用户N个字符;
            D_num_22=T_33*D_2;
            D_num1=[D_num_11;D_num_22];
            D_symbol1=zeros(K,N_1);
            for q=1:N_1
                D_symbol1(:,q)=D_num1((q-1)*K+1:q*K,1);
            end 
            %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            
            
            %以下程序进行QPSK解调
            D_bit1=zeros(K,2*N_1);
            angle_symbol1=angle(D_symbol1);
            for k=1:K
                for j=1:N_1
                    if angle_symbol1(k,j)>=(pi/4) & angle_symbol1(k,j)<(3*pi/4)
                        D_bit1(k,2*j-1:2*j)=[0 0];
                    elseif angle_symbol1(k,j)>=(-3*pi/4) & angle_symbol1(k,j)<(-pi/4)
                        D_bit1(k,2*j-1:2*j)=[1 1];
                    elseif angle_symbol1(k,j)>=(-pi/4) & angle_symbol1(k,j)<(pi/4)
                        D_bit1(k,2*j-1:2*j)=[0 1];
                    else 
                        D_bit1(k,2*j-1:2*j)=[1 0];
                    end
                end
                %                  D_bit_2(k,:) = vitdec(D_bit1(k,:), trel, tblen, 'cont', 'hard');
            end
            clear j ;
            %以下程序计算误比特率
            D_same1=zeros(K,2*N_1);
            D_same1=eq(D_bit1,bit_source_1);%输入和输出作比较,找出传输没有出错的信号;
            D_diff1=~D_same1;
            diff1(n,p)=sum(sum(D_diff1));%传错的比特数
        end%结束n的循环
    end%结束TS_num个时隙的循环
    ber1=sum(diff1,2)/(2*N_1*K*TS_num)
    y1(U_no,:)=transpose(ber1);
    ber=sum(diff,2)/(2*N_1*K*TS_num)
    y(U_no,:)=transpose(ber);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end%结束不同用户的循环
% semilogy(sinr,y(1,:))%,sinr,y(2,:),sinr,y(3,:),sinr,y(4,:),sinr,y(5,:));
% semilogy(sinr,y1(1,:))%,sinr,y1(2,:),sinr,y1(3,:),sinr,y1(4,:),sinr,y1(5,:));
% axis([sinr(1) sinr(end) 1e-5 1]);
% 
% % subplot(2,1,1),
% plot(sinr,y(1,:),'r-*')%,sinr,y(2,:),'r-o',sinr,y(3,:),'r-+',sinr,y(4,:),'r-x')%,sinr,y(5,:),'s'),grid;
% legend('红色 不估计','绿色 估计后');%,'o 4个用户','x 8个用户','s 16个用户');
% xlabel('Eb/No');%x轴注解
% ylabel('误码率');%y轴注解
% % subplot(2,1,2)
% hold on;
% plot(sinr,y1(1,:),'g-*')%,sinr,y1(2,:),'g-o',sinr,y1(3,:),'g-+',sinr,y1(4,:),'g-x')%,sinr,y_ICIN(5,:),'h'),grid;
% % legend('- 1个用户','-. 2个用户','^ 4个用户','p 8个用户','h 16个用户');
% hold off;
% grid on;
% %legend('* 1个用户','+ 2个用户','o 4个用户','x 8个用户','s 16个用户');
% % xlabel('Eb/No');%x轴注解
% % ylabel('误码率');%y轴注解
% title('不同用户情况下的误码率');%图形标题
% c7=clock

⌨️ 快捷键说明

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