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

📄 mingyangchen.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_bit=zeros(1,max_snr-min_snr+1);
   for snr=min_snr:max_snr
        for ii=1:1000
             tot_frame_tx(snr-min_snr+1) = tot_frame_tx(snr-min_snr+1)+1;
             bit_sequence = rand(1,symbol_per_frame * 3)>0.5;        %生成伪随机二进制待发送序列
             qpsk_sequence = Eightpsk(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) j*(qpsk_sequence(k+1)) -conj(qpsk_sequence(k+2)) -conj(qpsk_sequence(k+3)); 
                   qpsk_sequence(k+1) qpsk_sequence(k) j*conj(qpsk_sequence(k+3))  -conj(qpsk_sequence(k+2));
                   qpsk_sequence(k+2) j*(qpsk_sequence(k+3)) conj(qpsk_sequence(k))  conj(qpsk_sequence(k+1));
                   qpsk_sequence(k+3) qpsk_sequence(k+2)  -j*conj(qpsk_sequence(k+1)) conj(qpsk_sequence(k)) ;];
                R=H*X+addtional_gaussian_noise(:,:,k);         %接收信号
                r1=R(1,1)*conj(H(1,1))+R(1,2)*conj(H(1,2))+conj(R(1,3))*H(1,3)+conj(R(1,4))*H(1,4);   
                r2=R(1,1)*conj(H(1,2))-j*R(1,2)*conj(H(1,1))-j*conj(R(1,3))*H(1,4)+conj(R(1,4))*H(1,3);
                r3=R(1,1)*conj(H(1,3))+R(1,2)*conj(H(1,4))-conj(R(1,3))*H(1,1)-conj(R(1,4))*H(1,2);   
                r4=R(1,1)*conj(H(1,4))-j*R(1,2)*conj(H(1,3))+j*conj(R(1,3))*H(1,2)-conj(R(1,4))*H(1,1);
                h1=conj(H(1,1))*H(1,2)+j*H(1,1)*conj(H(1,2))+j*H(1,3)*conj(H(1,4))+conj(H(1,3))*H(1,4);
                h2=H(1,3)*conj(H(1,4))-j*conj(H(1,3))*H(1,4)-j*conj(H(1,1))*H(1,2)+H(1,1)*conj(H(1,2));
                d=abs(H(1,1))^2+abs(H(1,2))^2+abs(H(1,3))^2+abs(H(1,4))^2;
                  dh = [1 (1+j)/sqrt(2)  j  (-1+j)/sqrt(2)   -1   (-1-j)/sqrt(2)   -j   (1-j)/sqrt(2);];
               m=1;
                  for L=1:8
                      for LL=1:8
                 D1(m,1)=d*(abs(dh(1,L))^2+abs(dh(1,LL))^2)+2*real(conj(-r1)*dh(1,L)+conj(-r2)*dh(1,LL))+real(conj(h1)*dh(1,L)*conj(dh(1,LL))+conj(h2)*conj(dh(1,L))*dh(1,LL));
                 D1(m,2)=L;
                 D1(m,3)=LL;
                 m=m+1;
                  end
              end
              [minnumber1 position1]=min(D1(:,1));%求出最小的距离
                X1=dh(D1(position1,2));  %估计出x1的值
                X2=dh(D1(position1,3));  %估计出x2的值
              
                
                m=1;
                  for L=1:8
                      for LL=1:8
                 D2(m,1)=d*(abs(dh(1,L))^2+abs(dh(1,LL))^2)+2*real(conj(-r3)*dh(1,L)+conj(-r4)*dh(1,LL))+real(conj(h1)*dh(1,L)*conj(dh(1,LL))+conj(h2)*conj(dh(1,L))*dh(1,LL));
               D2(m,2)=L;
                 D2(m,3)=LL;
                 m=m+1;
                  end
              end
               [minnumber2 position2]=min(D2(:,1));%求出最小的距离
                X3=dh(D2(position2,2));  %估计出x1的值
                X4=dh(D2(position2,3));  %估计出x2的值
            
                if(X(1,1)~=X1)  
                    tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)+table(X(1,1),X1);
                  end
                  
                 if(X(2,1)~=X2)
                     tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)++table(X(2,1),X2); 
                  end
                  
                    if(X(3,1)~=X3) 
                     tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)++table(X(3,1),X3); 
                  end
                  
                  if(X(4,1)~=X4)
                      tot_err_bit(snr-min_snr+1)=tot_err_bit(snr-min_snr+1)++table(X(4,1),X4); 
                  end
                  
                  
             end
        end
    end      
    
    
    %在不同信噪比条件下,求系统SER和BER
 
    ber_snr=tot_err_bit./(tot_frame_tx * symbol_per_frame*3);
    figure(1);
  
    semilogy(min_snr:max_snr,ber_snr,'-*');
      grid
    xlabel('SNR(dB)');
    ylabel('Bit Error Ratio');
    legend('SER-SNR','BER-SNR');


   

⌨️ 快捷键说明

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