预编码ZF,MMSE,THP准则线性预编码误码率仿真

news2024/11/25 4:35:41

目录

1.算法概述

2.仿真效果预览

3.核心MATLAB代码预览

4.完整MATLAB程序


1.算法概述

恒定包络( Constant Enve-lope,CE) 预编码;

       该算法规定,每根天线上的发射功率被限定为一个与信道条件和信号符号均无关的常数,各根天线均发射恒包络信号,符号信息由其相位携带,接收端通过将各根天线发出的恒包络信号进行矢量合成后,即可得到一个与之相应的星座点,同时也就降低了 PAPR。

脏纸编码 ( Dirty Paper Coding,DPC) 算法

       脏纸编码( Dirty - Paper Coding,DPC) 算法的基本思想是:假设一张纸上有许多相互独立的污点,且书写者准确知道它们的分布状况(即完美的CSI),那么,只要书写者采用一种与之相适应的书写方式,就可以使得阅读者在不知道污点分布状况的情形下,仍旧可以获取书写者想要传递的信息,这就可以使信道容量达到最大。 简单说就是在节省资源的条件下,将多用户信息叠加在一起。

         如果基站端掌握了完备的 CSI,那么使用 DPC 预编码是最佳的选择,因为它可以使信道的利用率达到最大。同时,虽然在实际系统中获取完备的 CSI 非常困难,即 DPC 算法几乎不可能得到应用,但其理论性能指标可以作为ZF 和 MMSE 等传统预编码算法的参考基准 。

THP 预编码算法

        它是一种连续的非线性预编码技术,可以对下行链路子信道间产生的相互干扰进行均衡。与 DPC 算法极其类似,是一个串行进行的过程,经过反馈之后,第二个用户可以消除来自第一个用户的干扰,第三个用户可以消除来自第一个和第二个用户的干扰,如此类推下去,就可以达到消除符号间干扰、提高误符号率性能的目的,是一种具有实际意义的预编码算法。

         与 DPC 的不同之处在于 THP 预编码算法中加入了模运算,虽然 THP 预编码算法在性能上不如DPC,但它可以有效降低发射功率。当然,它也需要基站端掌握完备的信道状态信息 。

矢量预编码算法

      相对于 THP 而言,向量扰动预编码是更广义的脏纸编码算法。它的算法原理是:在原本要发射的信号上加上一个扰动矢量,可以使原发射信号的发射功率最小化。向量扰动预编码算法面临的问题就转换成为寻找最优扰动矢量的最优化问题 。

      在多输入多输出(MIMO)应用中,大规模 MIMO 和传统 MIMO 相比,除了可以通过预编码提升误比特性能外,还可以大幅提升系统容量。

       现有的多用户预编码可以分为线性和非线性预编码两类,两类预编码有各自的优点,线性预编码实现简单并且性能可观,非线性预编码实现稍显复杂但是性能要远优于线性预编码。与线性预编码相对应,非线性模代数(THP)预编码可以基于迫零准则设计也可以基于最小均方误差准则设计。

       THP预编码算法是基于DPC编码的,相比之下,THP复杂度更低,并同时延续了DPC的诸多优点,由于采用了取模操作,因而属于一种非线性预编码方式。在MIMO系统中,THP能够近似达到系统容量上限,但是,其实现前提是能有效获取到CSI。在目前的THP算法中,主要基于ZF与MMSE准则设计。

        下面针对THP的原理和实现展开详细描述,图1给出了多用户MIMO系统下的THP框图,较传统线性预编码而言,THP较为复杂。

        发送方的预编码主要有两种类型:线性和非线性.线性预编码的典型例子是匹配滤波预编码(MFP)和迫零滤波预编码(ZFP).MFP受制于残留干扰(remaining interference),ZFP受制于发送功率的增强.

       非线性预编码的例子:(THP)原本是用于单用户系统中均衡以消除ISI,它等效于在接收端的判决反馈均衡器.通过部分信号处理由接收端转移到发送端,降低了MS的计算复杂度,可以避免错误传递(error propagation)和立即判决(immediate decision)。

       多入多出技术(MIMO)以满足快速增长的用户需求,而在采用MIMO系统的点对多点通信中,需要采用预编码以抑制用户间干扰,THP预编码就是一种有效的非线性预编码方式,可以获得很好的系统性能.本文从多用户MIMO-THP系统结构模型出发,介绍了基于ZF准则以及MMSE准则的THP预编码算法,并比较两者性能;同时在此基础上,对加入了功率分配的多用户MIMO-THP系统以多用户及排序MIMO-THP进行深入研究,分析和仿真.

2.仿真效果预览

matlab2022a仿真结果如下:

 

3.核心MATLAB代码预览

 
 
for index = 1:Len;%不同信噪比的循环
    index
    snr = 10.^(SNR(index)/10);
    ea = 1;% 每个天线发射的功率,也即信号向量中每个元素的功率
    es = ea*Nt; % 总共的发射功率
    sigma_n2 = es/snr;% noise power
    
    for cnt = 1:Iter_num;% 信道的实现次数的循环
        
        H = sqrt(1/2)*(randn(Nr,Nt)+j*randn(Nr,Nt));% H
                
        for sym_index = 1:num; %在一帧数据符号中,信道保持不变
            
            Source = floor(M*rand(Nt,1));% random data generator
            Sym = pskmod(Source,M,pi/4,'gray'); % qpsk modulator
            [d_thp,beta] = THP_encoder(Sym,H,period);% 对符号进行THP预编码
            noise = sqrt(sigma_n2/2)*(randn(Nr,1)+j*randn(Nr,1));%生成噪声功率为sigma_n2
            y_thp = H*d_thp + noise(:,1);% 通过信道并加噪声
 
            r_thp = beta*y_thp;% 进行接收端的缩放
            
            Rec_thp = mod_thp(r_thp,period);
 
            Rec_Data_thp = pskdemod(Rec_thp,M,pi/4,'gray');% 对接收信号进行判决
            
            [err ratio] = biterr(Rec_Data_thp,Source,log2(M));% ber
            ber_thp(1,index) = ber_thp(1,index) + ratio;
 
        end; % loop for num
        
    end; % loop for iteration
    
end % loop for snr
A008

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nacos下载和安装步骤

1. 下载安装包 1.1. Nacos官网 :https://nacos.io/zh-cn/hub 打开官网,点击前往Github 1. Nacos官网 1.2. 打开Nacos Github主页,点击Release,点击tags,可以看到所有的版本,选择自己需要的版本下载 Nacos Github主页 …

线性代数 --- 投影Projection 四(投影有什么用?Why projection)

笔者在本系列的开篇就说过,我在学习投影的过程中,有很长的一段时间都是把重点放在了,如何计算投影本身,也就是背公式。 现在我发现(尤其是明白了投影即分量之后),学习投影的主要目的&#xff0c…

IB数学AA/AI应该如何选择?IB数学AA HL有多难?

IB课程即国际文凭组织IBO,是为全球学生开设从幼儿园到大学预科的课程,为3-19岁的学生提供智力、情感、个人发展、社会技能等方面的教育,使其获得学习,工作以及生存于世的各项能力。 IB课程难在哪? IB课程不像AP、A-lev…

读书笔记-学习GNU Emacs-1

学习本书目的: emacs的学习一直是陆陆续续看博客和上手实践,这次想通过阅读"学习GNU Emacs"这本书好好系统的再复习下emacs。 ps:读技术书应该是带着一定的目的去读的,最简单的目的可能就是为了学好某一项技术或者复习下某一项技术…

基于Java+JSP+MySQL共享单车管理系统的设计与实现-计算机毕业设计

项目介绍 随着时代的发展,我国的国民经济一直在稳步的提升,共享单车的是用来一直在不断的攀升,为了能够更加方便快捷的管理共享单车,需要开发一套利用计算机进行管理的JSP共享单车管理系统。 本项目利用软件工程原理&#xff0c…

最新出炉!开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0

背景 云原生时代下,企业逐渐向云上迁移,越来越多的应用和服务都在进行容器化改造,服务之间的流量也开始爆发性的增长。为了能高效地管理这些规模庞大的 API,API 网关开始在技术领域大展身手。 用户除了需要 API 网关提供请求代理…

springcloud集成Seata AT 模式

注意: 1.seata版本1.4.1 2.使用db配置,mysql 3.nacos版本2.2.3.RELEASE 4.spring-boot-starter-parent版本2.3.1.RELEASE 版本匹配很关键,否则报奇奇怪怪的错!!!! seata库必要的表 -- -------…

微服务拆分技巧

微服务架构整体思路 常见场景实施建议 拆分方式基础设施要求服务拆分落地方式从0开始构建业务系统按业务拆分微服务搭建完善基础设施,按照微服务基础设施优先级逐步落地一步到位单体架构微服务化按业务拆分微服务,先从非核心业务开始拆分搭建完善基础设…

【python初学者日记】用PIL批量给HEIC格式的照片,添加拍摄日期、拍摄地点的水印戳

【python初学者日记】用PIL批量给HEIC格式的照片,添加拍摄日期、拍摄地点的水印戳问题合集1、读取 HEIC 格式照片的拍摄信息2、将已知坐标转码成具体省市地址的文字信息3、将文字添加到HEIC格式的照片上问题解决一、问题分析二、代码实现最近在整理手机相册&#xf…

网站SEO优化有哪些要点?

1、网站关键词优化 对于网站关键词,每一个站长朋友应该很熟悉了,所谓的关键词就是对网站的一种简单而又综合性的描述,网站关键词分析也叫做关键词定位。seo教程认为网站关键词分析是进行SEO优化的最重要的一环。关键词分析首先要做的就是根据…

Go语言入门【6】切片

切片 在go语言中,切片是对数组的抽象,数组在声明时指定了长度之后就不可再进行改变,在特定场景下数组就不适用,所以就有了切片类型,切片就是“动态数组”,和数组相比,切片的长度是不固定的&…

mybatis逆向工程的实现

在本地创建一个test数据库,并在test数据库中创建一个student表;表中的数据如下: 创建表: DROP TABLE IF EXISTS student; CREATE TABLE student ( studentID int NOT NULL AUTO_INCREMENT, StudnetName varchar(20) CHARACTER SET…

Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理

Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理 目录 Linux 之 Ubuntu 下安装配置ARM交叉编译器(工具链)的简单整理 一、简单介绍 二、下载 arm 交叉编译安装工具包,并安装到虚拟机中 一、简单介绍 Linux/Ubuntu 开发的一些知识整理,方…

微服务基础设施选型

微服务基础设施架构 全貌 优先级 微服务框架模式 核心 服务注册、服务发现、服务路由 模式1-嵌入SDK 优点 架构简单,天然支持高性能、高可用维护简答,无需维护独立的Proxy节点 缺点 应用侵入,需要集成SDK,并联动升级多语言重…

强化学习 Lesson2 学习笔记

Lesson2-1 MDP、Q表格 一、强化学习MDP四元组<S,A,P,R> S:state 状态A:action 动作R:reward 奖励 r[st,at]P:probability 状态转移概率 p[st1,rt|st,at] 强化学习是一系列决策的过程,通过当前的环境状态和收到的奖励来决定下一次执行的动作 ​ Model-based: P函数和R函…

零售业迎来全新发展,这个技术少不了

零售业在创新方面比较频繁&#xff0c;创新是推动零售业发展的动力&#xff0c;这可以让零售业具有了外在的生命力和内在的动力。创新要求零售商从内部建立机制&#xff0c;以创新的心态经营管理。 现在&#xff0c;零售商陷入泥潭。其中一个原因是&#xff0c;他们失去了创新能…

Docker详解(一)

文章目录参考资料一、Docker基本概念二、Docker安装1. 卸载旧版本2. 使用 Docker 仓库进行安装设置仓库安装 Docker Engine-Community卸载 Docker安装Docker CE 环境三、Docker命令1. Docker容器运行流程2. 镜像命令docker images 查看所有本地主机上的镜像docker search 搜索镜…

后端自学两个小时前端,究竟能做出什么东西?

又来给大家更文了&#xff0c;今天是微服务网关实战的第六篇。 今天的内容比较偏前端一点&#xff0c;主要是给大家换换口味&#xff0c;毕竟学一个东西学久了就想学点新东西休息一点&#xff0c;俗称换换脑子。 其实早就想学学前端看了&#xff0c;不过碍于工作繁忙&#xf…

冒泡排序和数据结构和算法可视化网站(及其一点小优化)

目录 一、冒泡排序的原理 二、动图演示原理 三、代码实现&#xff1a; 四、优化后的冒泡排序 五、算法演示网站 一、冒泡排序的原理 冒泡排序就是两两交换&#xff0c;第一趟排序可以得到最大值&#xff0c;那么第二趟排序就不用再比较最大值了&#xff0c;同样是两两交换…

电商后台管理系统(基于SSM + Vue + Restful + jquery + axios)

1.项目架构 2.config配置 JdbcConfig public class JdbcConfig {Value("${jdbc.driver}")private String driver;Value("${jdbc.url}")private String url;Value("${jdbc.username}")private String username;Value("${jdbc.password}&qu…