首页 > 其他分享 >m基于MIMO中继通信和非规则LDPC编译码的matlab仿真,其中波束形成为SVD,MMSE,中继包括AF,DF,CF

m基于MIMO中继通信和非规则LDPC编译码的matlab仿真,其中波束形成为SVD,MMSE,中继包括AF,DF,CF

时间:2022-12-29 12:33:28浏览次数:44  
标签:误码率 10 中继 天线 MMSE AF LDPC 节点

1.算法概述

       即在非规则LDPC下,且源节点1个,中继一个,目标节点一个,天线也是1的情况对比三种中继协作协议的误码率。   

 

       做非规则LDPC码的以编码协作形式中继协议,比较以下三种情况下误码率图和中断概率图:

 

源节点一个(配置一根天线),中继节点4个(每个节点配置一根天线),目的节点一个(节点配置一根天线)(1:4:1)

 

源节点2个,中继节点4个,目的节点1个(2:4:1)

 

源节点1个,中继节点4个,目的节点2个(1:4:2)

 

·141·241·142

 

 

 

 

 

 

2.仿真效果预览

matlab2022a仿真

 

 

 

 

 

 

 

 

·接收天线数量一定,噪比不变时性能随着发射天线数的增多而增大,但是提高的能力愈来愈慢。

 

 

 

 

 中继节点的波束成形算法分别使用SVD,MMSE和SVD-MMSE混合算法,将这三种算法应用到该系统中,比较它们的误码率。

 

 

 

3.MATLAB部分代码预览

 

%LDPC参数
N        = 2*data_Numbers;%设置奇偶校验矩阵大小     
M        = N*R;
max_iter = 100;                 %最大迭代次数
 
load H;%H=getH(M,N)
load G;%G=getG(M,N);
 
figure;
imshow(H,[]);title('奇偶校验均值H直观图');
 
 
for i=1:length(EbN0)
 
     N0            = 2*10^(-EbN0(i)/10);
     Bit_err(i)    = 0;
     Num_err       = 0;
     Numbers       = 0; %误码率累加器 
 
     Dsd=5;          %db数
     Dsr=4;
     Drd=1;
     Qsd=sqrt(10^(Dsd/10));
     Qsr=sqrt(10^(Dsr/10));
     Qrd=sqrt(10^(Drd/10)); 
 
     while Num_err <= Times
           Num_err
           fprintf('Eb/N0 = %f\n', EbN0(i));
           %产生需要发送的随机数
           Trans_data  = round(rand(1,N-M));
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           %LDPC编码
           u  = mod(Trans_data*G,2); %LDPC编码
           %LDPC编码
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           %BPSK
           Trans_BPSK  = 2*u-1;
           %---------------------协作MIMO----------------------------------
           %作为发送信源
           MIMO_Tx(1,:) = sqrt(Pt)*Trans_BPSK;
           %将源信号发送其他几个协作天线上,
 
           %MIMO信道,期间考虑到路径损耗问题。
           H_Ray = randn(Ra_num,Ta_num); 
           for r = 1:Ra_num
              for s = 1:Ta_num
                  H_Ray(s,r) = k2(1)*H_Ray(s,r);
              end
           end       
           x     = [];
           HH    = H_Ray; 
           r     = N0; 
           w     = inv(HH'*HH+(1/EbN0(i))*eye(Ta_num))*HH'; 
           y     = w*r; 
           xtemp = (y>=0)-(y<0)+0; 
           x     = [x,xtemp];   
           a     = (x+1)/2;            
           
           %进行AF中继
           %信道增益
           Hsd=Qsd*(randn);
           Hsr=Qsr*(randn);
           Hrd=Qrd*(randn);
           %协作节点的放大增益
           B=sqrt(1/(abs(Qsr)^2*1));
           %===============================
           %最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)
           %计算增益
           A0=conj(Hsd)/(1/EbN0(i));
           A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/EbN0(i)));           
           %接收
           MIMO_Rx =  MIMO_Tx/max(max(MIMO_Tx))+ sqrt(N0/2)*randn(size(MIMO_Tx));
           Ysr      = Hsr*MIMO_Rx;
           Yrd      = Hrd*Ysr*B;
           Ysd      = Hsd*MIMO_Rx;
           Y        = A0*Ysd+A1*Yrd;   
           Y        = k3(1)*Y;       
           Ysum(1,:,:) = Y;
           Y2(:,:) = Ysum(1,:,:);
           
           %接收到的二进制信号
           MIMO_Rxs = a*Y2;
           MIMO_Rx2 = k3(1:Ta_num)*MIMO_Rxs(:,:);    
           Rec_data = sign(MIMO_Rx2); 
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
           %LDPC译码
           z_hat = func_Dec(Rec_data,N0,H,max_iter);
           x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));                     
           %LDPC译码
           %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%           
           if sum(Rec_data) == 0
              nberr = 0;
              disp('not count');
           else
              [nberr,rat]  = biterr(Trans_data,x_hat')
           end         
           Num_err     = Num_err+nberr;
           Numbers     = Numbers+1;    
    end 
      Bit_err(i)=Num_err/(N*Numbers);
end
01_038_m

 

  

 

标签:误码率,10,中继,天线,MMSE,AF,LDPC,节点
From: https://www.cnblogs.com/51matlab/p/17012213.html

相关文章

  • 40-Zabbix在Grafana中展示和Zabbix性能优化以及Zabbix高可用集群搭建
    Zabbix利用Grafana进行图形展示Grafana是一款采用go语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经......
  • Kafka集群升级实施方案
    一、背景我们组内维护的kafka集群承担着公司绝大部分实时数据的收集传输任务。但是,现阶段存在如下问题,已经对集群的稳定性、用户的使用以及管理员的运维造成了很大影响:1......
  • vue3+vite build打包报错:Some chunks are larger than 500 KiB after minification. C
    看官方的解决方案:1、在rollup配置文件中添加output.manualChunks,将模块拆分成多个chunk,减小每个chunk的大小;2、build.chunkSizeWarningLimit,提高报错的阈值;3、使用动......
  • kafka如何处理大量积压消息
    1.consumer导致kafka积压了大量消息方法:1.增大partion数量,2.消费者加了并发,服务,扩大消费线程3.增加消费组服务数量4.kafka单机升级成了集群5.避免消费者消费消息时......
  • grafana-部署对数据可视化
    1.grafana-部署对数据可视化grafana-部署Grafana是一个开源的度量分析和可视化系统。部署文档:https://grafana.com/grafana/download访问地址:http://IP:3000用户名......
  • grafana-连接prometheus添加数据可视化
    1.grafana-连接prometheus添加数据可视化grafana添加prometheus数据可视化Grafana是一个开源的度量分析和可视化系统。部署文档:https://grafana.com/grafana/dow......
  • Kafka设计解析(三)- Kafka High Availability
    摘要本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Brokerfailover,Controllerfailover,Topic创建/删除,Broker启动,Follower从Leaderfe......
  • Kafka核心技术与实战
    Kafka入门消息引擎系统:开源的消息引擎系统,实现松耦合的异步式数据传递常见传输协议:点对点;发布/订阅模型作用:削峰填谷Kafka相关术语消息record:kafka处理的对象主......
  • IntellIJ开发简单Minecraft插件(利用paper API)
    有的时候想实现服务器里的一些简单的功能,但是网上又找不到,这个时候可以尝试写一个出来。例如,在游戏里想要实现这样一个功能,玩家噶了之后在聊天栏处显示死亡坐标,这样可以方......
  • DataFrame整体情况查询
    1.df.info()的使用相关信息概览:行数,列数,列索引,列非空值个数,列类型,列类型,内存占用2.df.describe()方法的使用快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值......