MIMO中SM系统原理与仿真

  1. SM系统

   输入的数据一部分用于天线选择,一部分用于星座调制,每次只有一根天线被激活。假设发射天线数nTx=4,调制进制M=16,则一次传输的比特长度为   

  设发射信号为,则前两位信号1 0用来激活天线索引,即选择第三根天线作为发射天线,后四位信号 1 1 0 0用作星座调制信号。

 

星座调制:PSK调制

发射信号X:PSK调制后的信号

Q:激活天线索引如何携带信息?

A:选择的是第三根天线,发射信号1 1 0 0星座调制以后符号为,则发射信号,最大似然算法检测算法检测出信号后,可以知道发射天线是第三根,译码出天线索引信号为 1 0 , 将天线索引携带信息译出。

  信道H:广义信道即瑞利信道加估计误差

Q:估计误差的原理?

A:设置相关系数,相关系数根据发射接收设备自定义,计算最小均方误差

 matlab仿真代码为:

main函数:

%---------SM系统仿真------------------
nTx=4;
nRx=4;
n_sm=1;
M=4;
SNR_dB=0:3:30;
L=log2(nTx)+log2(M); %一帧的长度
N=10000;%帧数
length_as=log2(nTx);
length_bit=log2(M);
BER=zeros(1,length(SNR_dB));
rho_r=0.4;
K=1;
err=0;
for i=1:length(SNR_dB)
    
    SNR=SNR_dB(i)
     rou=10^(SNR/10);%the average signal to noise ratio (SNR) at each receive antenna
     N0=n_sm/rou;
     err_num=0;
   for k=1:N
      %----------------SM调制---------------%
       x=zeros(1,L);
       x=rand(1,L)>0.5;
       
       output=s_mod(x,length_bit,M,length_as,L);%sm调制函数
      
      %-----------------信道------------------%
%       H=(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx));
%       n=(sqrt(N0/2))*(randn(nRx,n_sm)+ 1i*randn(nRx,n_sm));
    
       H=Generalized_Channel(nRx,nTx,rho_r,K,err);
       
       n=1/sqrt(2)*(randn(nRx,n_sm) + 1i*randn(nRx,n_sm));% AWGN
      %---------------过信道------------------%
%         y= H *output'
        y= H *output'  + (sqrt(N0))*n ;
      %----------------ML检测-----------------%
       y_detect=ml_dectect(y,H,length_as,length_bit,M,L);
     
      %---------------误比特-------------------%
      err_bit=length(find(y_detect~=x));
      err_num=err_num+err_bit;
         
   end
     BER(i)=err_num/L/N;
     
end

 semilogy(SNR_dB,BER,'g-*');%y轴对数形式作图
 hold on
  
 xlabel('SNR_dB');
 ylabel('BER');
 title('SM系统仿真');   
 grid on;

SM调制模块函数:

function output=s_mod(input,length_bits,M,length_as_bits,L)
   %天线索引选择
      as_num=1;
      output_1=zeros(1,2^(length_as_bits));
  for i=1:length_as_bits
     
      as_num=as_num+2^(i-1)*input(length_as_bits-i+1);
  end
     
    output_1(as_num)=1;
   

%星座调制
   sum=0;
   
   for i=1:length_bits
      sum=sum+2^(i-1)*input(L-i+1); 
   end
   output_2=pskmod(sum,M,pi/4);
   
   
   output=output_1*output_2;

end

最大似然检测算法模块:


function y_detect=ml_dectect(y,H,length_as,length_bit,M,L)

frame_length=size(y,2); %接收信号列数
y_detect = zeros(frame_length,L);
% Get all bit combinations for ML receiver
 bits = de2bi(0:2^L-1, 'left-msb')';%天线组合
  Dist=[];
for n = 1:frame_length   %信号列
    
     for ii = 1:length(bits) %行
          x=s_mod(bits(:,ii)',length_bit,M,length_as,L);
%             x=output(:,ii);
%            dist=norm(y-H*x','fro')^2;
          dist = sum(abs(y(:,n) - H*x').^2);
          Dist=[Dist , dist];
     end
      
        [~,i_m] = min(Dist);   %v_m记录每列最小值,i_m记录每列最小值的行号
        
        y_detect((n-1)*L+1 : (n)*L)=bits(:,i_m)';
end
       
end







 广义信道模块:

function H_n=Generalized_Channel(nRx,nTx,rho_r,K,err)

%相关系数rho_r
%Rician K
%估计误差 err
H_r_S=zeros(nRx,nRx);
H_T_S=zeros(nTx,nTx);

for i=1:nRx
    for j=1:nRx
        H_r_S(i,j)=rho_r^(abs(i-j)/2);
    end
end
for i1=1:nTx
    for j1=1:nTx
         H_T_S(i1,j1)=rho_r^(abs(i1-j1)/2);
    end
end

   H_los=ones(nRx,nTx);
   
   H_nlos =(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx));%Rayleigh channel
    
   H1=sqrt(K/(1+K))*H_los;
   H2=sqrt(1/(1+K))*H_r_S*H_nlos*H_T_S;
   H=H1+H2;
   H_n=H+err*(1/sqrt(2))*(randn(nRx,nTx) + 1i*randn(nRx,nTx)); %估计误差

 仿真图像:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小月爱编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值