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

📄 jafarkhani.m

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

    Nt=4;%发射天线数为4
    Nr=1;%接收天线数为1
    min_snr=0;
    max_snr=15;%最大的信噪设定为15
    symbol_per_frame=120;%每一帧的符号数为120个
    tot_frame_tx=zeros(1,max_snr-min_snr+1);
    tot_err_symbol =zeros(1,max_snr-min_snr+1);
    tot_err_bit=zeros(1,max_snr-min_snr+1);
   for snr=min_snr:max_snr
       display(snr);
        for ii=1:100
            D1=zeros(1,16);
            D2=zeros(1,16);
             tot_frame_tx(snr-min_snr+1) = tot_frame_tx(snr-min_snr+1)+1;
             bit_sequence = rand(1,symbol_per_frame * 2)>0.5;        %生成伪随机二进制待发送序列
             qpsk_sequence = QpskMapping(bit_sequence); %二进制信道与QPSK信号的转换
            sig =sqrt(4/(10^(snr/10)));  %归一化的噪声能量       
            addtional_gaussian_noise =sig * (randn(Nr,Nt,symbol_per_frame)/sqrt(2) + j*randn(Nr,Nt,symbol_per_frame)/sqrt(2)); %生成加性高斯噪声
            H=RayleighCH(Nr,Nt); %生成具有瑞利分布特性的信道衰落系数
            for k=1:4:symbol_per_frame-3
                X=[qpsk_sequence(k) -conj(qpsk_sequence(k+1)) -conj(qpsk_sequence(k+2)) qpsk_sequence(k+3); 
                   qpsk_sequence(k+1) conj(qpsk_sequence(k)) -conj(qpsk_sequence(k+3))  -qpsk_sequence(k+2);
                   qpsk_sequence(k+2) -conj(qpsk_sequence(k+3)) conj(qpsk_sequence(k))  -qpsk_sequence(k+1);
                   qpsk_sequence(k+3) conj(qpsk_sequence(k+2))  conj(qpsk_sequence(k+1)) qpsk_sequence(k) ;];
                R=H*X+addtional_gaussian_noise(:,:,k);         %接收信号
                a1=-conj(R(1,1))*H(1,1)-R(1,2)*conj(H(1,2))-R(1,3)*conj(H(1,3))-conj(R(1,4))*H(1,4);   
                b1=-conj(R(1,1))*H(1,4)+R(1,2)*conj(H(1,3))+R(1,3)*conj(H(1,2))-conj(R(1,4))*H(1,1);
                c1=H(1,1)*conj(H(1,4))-conj(H(1,2))*H(1,3)-H(1,2)*conj(H(1,3))+conj(H(1,1))*H(1,4);
                a2=-conj(R(1,1))*H(1,2)+R(1,2)*conj(H(1,1))-R(1,3)*conj(H(1,4))+conj(R(1,4))*H(1,3);   
                b2=-conj(R(1,1))*H(1,3)-R(1,2)*conj(H(1,4))+R(1,3)*conj(H(1,1))+conj(R(1,4))*H(1,2);
                c2=H(1,2)*conj(H(1,3))-conj(H(1,1))*H(1,4)-H(1,1)*conj(H(1,4))+conj(H(1,2))*H(1,3);
                d=abs(H(1,1))^2+abs(H(1,2))^2+abs(H(1,3))^2+abs(H(1,4))^2;
               
                dh = [1+j 1+j;1+j -1+j;1+j -1-j;1+j 1-j;
                     -1+j 1+j;-1+j -1+j;-1+j -1-j;-1+j 1-j;
                      -1-j 1+j;-1-j -1+j;-1-j -1-j;-1-j 1-j;
                      1-j 1+j;1-j -1+j;1-j -1-j;1-j 1-j;]/sqrt(2);
                  for L=1:16
              %  D1(L)=d*(abs(dh(L,1))^2+abs(dh(L,2))^2)+2*real(a1*dh(L,1))+2*real(b1*dh(L,2))+2*real(c1*(dh(L,1)*conj(dh(L,2))));
                D1(L)=d*(abs(dh(L,1))^2+abs(dh(L,2))^2)+2*real(a1*dh(L,1)+b1*dh(L,2)+c1*(dh(L,1)*conj(dh(L,2))+dh(L,2)*conj(dh(L,1))));
              %  D1(L)=real(a1*dh(L,1)+b1*dh(L,2)+c1*(dh(L,1)*conj(dh(L,2))));
                  end
               
                     [minnumber1 position1]=min(D1);%求出最小的距离
                X1=dh(position1,1);  %估计出x1的值
                X4=dh(position1,2);  %估计出x2的值
           
                    for L=1:16
               % D2(L)=d*(abs(dh(L,1))^2+abs(dh(L,2))^2)+2*real(a2*dh(L,1))+2*real(b2*dh(L,2))+2*real(c2*(dh(L,1)*conj(dh(L,2))));
                 D2(L)=d*(abs(dh(L,1))^2+abs(dh(L,2))^2)+2*real(a2*dh(L,1)+b2*dh(L,2)+c2*(dh(L,1)*conj(dh(L,2))+dh(L,2)*conj(dh(L,1))));
                 % D2(L)=real(a2*dh(L,1)+b2*dh(L,2)+c2*(dh(L,1)*conj(dh(L,2))));
                  end
                [minnumber1 position2]=min(D2);%求出最小的距离
                X2=dh(position2,1);  %估计出x1的值
                X3=dh(position2,2);  %估计出x2的值
           
            
                if(X(1,1)~=X1)  %计算Gray  mapping时bit错误的个数
                     tot_err_symbol(snr-min_snr+1)=tot_err_symbol(snr-min_snr+1)+1;
                   if((X(1,1)+X1)==0)
                    tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+2;
                   else
                          tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+1; 
                     end
                  end
                  
                 if(X(2,1)~=X2)  %计算Gray mapping时bit错误的个数
                     tot_err_symbol(snr-min_snr+1)=tot_err_symbol(snr-min_snr+1)+1;
                   if((X(2,1)+X2)==0)
                    tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+2;
                   else
                          tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+1; 
                     end
                  end
                  
                    if(X(3,1)~=X3)  %计算Gray mapping时bit错误的个数
                     tot_err_symbol(snr-min_snr+1)=tot_err_symbol(snr-min_snr+1)+1;
                   if((X(3,1)+X3)==0)
                    tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+2;
                   else
                          tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+1; 
                     end
                  end
                  
                  if(X(4,1)~=X4)
                      tot_err_symbol(snr-min_snr+1)=tot_err_symbol(snr-min_snr+1)+1;
                    if((X(4,1)+X4)==0)
                    tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+2;
                     else
                      tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+1; 
                    end   
                 end
             end
        end
    end        
    %在不同信噪比条件下,求系统SER和BER
    ser_snr=tot_err_symbol./(tot_frame_tx * symbol_per_frame) ;
    ber_snr=tot_err_bit./(tot_frame_tx * symbol_per_frame*2);
    figure(1);
   semilogy(min_snr:max_snr,ser_snr,'-o');
    grid
    hold on
    semilogy(min_snr:max_snr,ber_snr,'-*');
    xlabel('SNR');
    ylabel('Error Ratio');
    legend('SER-SNR','BER-SNR');
    title('Ideal CSI');
    hold off
   

⌨️ 快捷键说明

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