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

📄 dstbc.m

📁 MIMO-有关差分编码,用matlab书写,
💻 M
字号:

    Nt=4;%发射天线数为4
    Nr=1;%接收天线数为1
    min_snr=0;
    max_snr=0;%最大的信噪设定为15
    symbol_per_frame=120;%每一帧的符号数为120个
    tot_frame_tx=zeros(1,(max_snr-min_snr)/2+1);
    tot_err_symbol =zeros(1,(max_snr-min_snr)/2+1);
    tot_err_bit=zeros(1,(max_snr-min_snr)/2+1);
   for snr=min_snr:2:max_snr
       display(snr);
        for ii=1:10
             tot_frame_tx((snr-min_snr)/2+1) = tot_frame_tx((snr-min_snr)/2+1)+1;
             bit_sequence = rand(1,symbol_per_frame * 2)>0.5;        %生成伪随机二进制待发送序列
             mapping_sequence = Mapping(bit_sequence); %二进制信道与mapping信号的转换
            sig =sqrt(1/(10^(snr/10)));  %归一化的噪声能量       
            addtional_gaussian_noise =sig * (randn(Nr,Nt,symbol_per_frame+1)/sqrt(2) + j*randn(Nr,Nt,symbol_per_frame+1)/sqrt(2)); %生成加性高斯噪声
           H=RayleighCH(Nr,Nt); %生成具有瑞利分布特性的信道衰落系数
            X1=eye(4);
            R1=H*X1;%+addtional_gaussian_noise(:,:,symbol_per_frame+1);      %参考信号  
            for k=1:4:symbol_per_frame-3
               X2=[mapping_sequence(k) -conj(mapping_sequence(k+2)) -conj(mapping_sequence(k+3)) mapping_sequence(k+1); 
                   mapping_sequence(k+2) conj(mapping_sequence(k)) -conj(mapping_sequence(k+1))  -mapping_sequence(k+3);
                   mapping_sequence(k+3) -conj(mapping_sequence(k+1)) conj(mapping_sequence(k))  -mapping_sequence(k+2);
                   mapping_sequence(k+1) conj(mapping_sequence(k+3))  conj(mapping_sequence(k+2)) mapping_sequence(k) ;];
               X=X1*X2;  %酉矩阵调制    
                R=H*X;%+addtional_gaussian_noise(:,:,k);         %接收信号
                r1=-( conj(R(1,1))*R1(1,1)+R(1,2)*conj(R1(1,2))+R(1,3)*conj(R1(1,3))+conj(R(1,4))*R1(1,4) );   
                r2=-( conj(R(1,1))*R1(1,2)-R(1,2)*conj(R1(1,1))+R(1,3)*conj(R1(1,4))-conj(R(1,4))*R1(1,3) );   
                r3=-( conj(R(1,1))*R1(1,3)+R(1,2)*conj(R1(1,4))-R(1,3)*conj(R1(1,1))-conj(R(1,4))*R1(1,2) );  
                r4=-( conj(R(1,1))*R1(1,4)-R(1,2)*conj(R1(1,3))-R(1,3)*conj(R1(1,2))+conj(R(1,4))*R1(1,1) );  
                h=R1(1,1)*conj(R1(1,4))+conj(R1(1,1))*R1(1,4)-conj(R1(1,2))*R1(1,3)-R1(1,2)*conj(R1(1,3));    
                d=abs(R1(1,1))^2+abs(R1(1,2))^2+abs(R1(1,3))^2+abs(R1(1,4))^2;
                dh = [(1+j)/2 0;j/sqrt(2) 0;(-1+j)/2 0;-1/sqrt(2) 0;
                      (-1-j)/2 0;-j/sqrt(2) 0; (-1+j)/2 0;1/sqrt(2) 0;
                       0 exp(3j*pi/8)/sqrt(2);0 exp(5j*pi/8)/sqrt(2);
                       0 exp(7j*pi/8)/sqrt(2);0 exp(9j*pi/8)/sqrt(2);
                      0 exp(11j*pi/8)/sqrt(2);0 exp(13j*pi/8)/sqrt(2);
                      0 exp(15j*pi/8)/sqrt(2);0 exp(j*pi/8)/sqrt(2);];
                  
                 dc=[0 0 0 0;0 0 0 1;0 0 1 0;0 0 1 1;0 1 0 0;0 1 0 1;0 1 1 0;0 1 1 1;
                     1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1;];
                  for L=1:16
                %     A=[dh(L,1) 0 0 dh(L,2);0 conj(dh(L,1))  -conj(dh(L,2)) 0;0  -conj(dh(L,2)) conj(dh(L,1)) 0;dh(L,2) 0 0 dh(L,1)];
                %      D1(L)=real(trace(R'*R1*A));
                    D1(L)=real(-r1*dh(L,1)-r4*dh(L,2));
               %    D1(L)=d*(abs(dh(L,1))^2+abs(dh(L,2))^2)+2*real(r1*dh(L,1)+r4*dh(L,2)+h*(dh(L,1)*conj(dh(L,2))));
              end
              [minnumber position1]=max(D1);%求出最小的距离
                x1=dh(position1,1);  %估计出x1的值
                x4=dh(position1,2);  %估计出x2的值
                x14=dc(position1,:);

                for L=1:16
              %       B=[0 -conj(dh(L,1)) -conj(dh(L,2)) 0;dh(L,1) 0 0 -dh(L,2);dh(L,2) 0 0 -dh(L,1);0 conj(dh(L,2)) conj(dh(L,1)) 0];
              %       D2(L)=real(trace(R'*R1*B));
                    D2(L)=real(-r2*dh(L,1)-r3*dh(L,2));
               %   D2(L)=d*(abs(dh(L,1))^2+abs(dh(L,2))^2)+2*real(r2*dh(L,1)+r3*dh(L,2)+h*(dh(L,1)*conj(dh(L,2))));
                end
               
                     [minnumber position2]=max(D2);%求出最小的距离
                x2=dh(position2,1);  %估计出x1的值
                x3=dh(position2,2);  %估计出x2的值
                x23=dc(position2,:);
                if(X2(1,1)~=x1| X2(4,1)~=x4)  %计算Gray  mapping时bit错误的个数
             tot_err_bit((snr-min_snr)/2+1)=tot_err_bit((snr-min_snr)/2+1)+sum(abs(x14-bit_sequence(2*k-1:2*k+2))); 
                  end
                  
                 if(X2(2,1)~=x2 | X2(3,1)~=x3)  %计算Gray mapping时bit错误的个数
              tot_err_bit((snr-min_snr)/2+1)=tot_err_bit((snr-min_snr)/2+1)+sum(abs(x23-bit_sequence(2*k+3:2*k+6))); 
                 end
                X1=X; %参考酉矩阵
                R1=R; %参考信号    
           end
        end
    end        
    %在不同信噪比条件下,求系统SBER
    ber_snr=tot_err_bit./(tot_frame_tx * symbol_per_frame*2);
    figure(1);
   semilogy(min_snr:2:max_snr,ber_snr,'-o');
    grid
    xlabel('SNR(dB)');
    ylabel('Bit Error Ratio');
    legend('BER-SNR');
   
   

⌨️ 快捷键说明

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