基于matlab使用波束成形对点对点 MIMO-OFDM 系统进行建模

news2024/11/27 20:59:20

一、前言

此示例展示了如何使用波束成形对点对点 MIMO-OFDM 系统进行建模。最近的无线标准(如 802.11x 系列)采用了多输入多输出 (MIMO) 和正交频分复用 (OFDM) 技术的组合,以提供更高的数据速率。由于MIMO使用天线阵列,因此可以采用波束成形来提高接收信噪比(SNR),从而降低误码率(BER)。

此示例需要通信工具箱。

二、介绍

术语MIMO用于描述存在多个发射器或多个接收器的系统。实际上,该系统可以采用许多不同的形式,例如单输入多输出(SIMO)或多输入单输出(MISO)系统。此示例说明了下行链路 MISO 系统。8 元件 ULA 部署在基站作为发射器,而移动单元是具有单个天线的接收器。

系统的其余部分配置如下。发射器功率为 9 瓦,发射增益为 -8 dB。移动接收器是固定的,位于 2750 米外,距离发射器的视线 3 度。功率为 1 瓦、增益为 -20 dB 的干扰源位于 9000 米处,与发射器的视线成 20 度。

整个场景可以用下图来描绘。

三、信号传输

首先,配置系统的发射器。发射器子系统中有许多组件,例如卷积编码器,扰频器,QAM调制器,OFDM调制器等。消息首先转换为信息比特流,然后通过源编码和调制阶段,为辐射做准备。在OFDM系统中,数据由多个彼此正交的子载波承载。

然后,将数据流复制到发射阵列中的所有辐射元件。在MIMO系统中,还可以分离多个用户的空间分复用(SDMA)。在这些情况下,数据流通常由对应于所需方向的权重调制,以便一旦辐射,信号在该方向上最大化。由于在MIMO信道中,从阵列中不同元件辐射的信号可能会经过不同的传播环境,因此从每个天线辐射的信号应单独传播。这可以通过在相位上将组合辐射信号设置为假来实现。散热器组件。

为了实现预编码,阵列中每个天线辐射的数据流通过与其辐射方向相对应的相移进行调制。此预编码的目标是确保在阵列朝该方向引导时,这些数据流同相相加。预编码可以指定为散热器上使用的权重。

同时,阵列也转向给定的转向角,因此总权重是预编码和转向权重的组合。请注意,传输的信号 txOFDM 是一个矩阵,其列表示从传输阵列中的相应元素辐射的数据流。

四、信号传播

接下来,信号通过MIMO通道传播。通常,对接收信号强度有两种传播效应:一种是由于传播距离引起的传播损耗,通常称为自由空间路径损耗;另一个是由于多路径导致的褪色。此示例对这两种效果进行建模。

为了模拟更逼真的移动环境,下一节还将插入干扰源。请注意,在无线通信系统中,干扰通常是不同的移动用户。

五、信号接收

接收天线收集传播的信号和干扰,并将它们传递给接收器,以恢复嵌入在信号中的原始信息。就像系统的发射端一样,MIMO-OFDM系统中使用的接收器也包含许多级,包括OFDM解调器、QAM解调器、解扰器、均衡器和维特比解码器。

将解码输出与原始消息流进行比较表明,生成的 BER 对于通信系统来说太高了。星座图也如下所示:

高误码率主要是由于移动设备偏离了基站阵列的转向方向。如果手机与转向方向对齐,则误码率大大提高。

因此,系统对转向误差非常敏感。另一方面,正是这种空间灵敏度使SDMA能够区分空间中的多个用户。

六、移相器量化效应

到目前为止的讨论假设光束可以转向确切的所需方向。然而,在现实中,这往往不是真的,特别是当使用模拟移相器时。模拟移相器的精度有限,按相移中使用的位数进行分类。例如,3 位移相器只能在 8 度内表示 360 个不同的角度。因此,如果将这种量化包含在仿真中,系统性能会下降,这可以从星座图中观察到。

七、总结

本例显示了采用波束成形的点对点MIMO-OFDM系统的系统级仿真。仿真对许多系统组件进行建模,例如编码、发射波束成形、预编码、多径衰落、信道估计、均衡和解码。

八、参考文献

[1] Houman Zarrinkoub, Understanding LTE with MATLAB, Wiley, 2014

[2] Theodore S. Rappaport et al. Mmmeter Wave Wireless Communications, Prentice Hall, 2014

九、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

打开下面的“Example.m”文件,点击运行,就可以看到上述效果。

程序下载:https://download.csdn.net/download/weixin_45770896/87666499

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

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

相关文章

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 2 (传统机器学习方法如何选择)...

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 1 传统的机器学习 我们现在讨论几种关键的机器学习方法的优势和劣势。表1显示了不同机器学习方法的比较。我们首先讨论不基于神经网络的方法,有时被称为“传统机器学习”。 图3显示了一些传统的机器学习方法…

【算法基础】常见排序算法(持续更新中)

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:【C/C】算法 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有…

【KVM虚拟化】· 图形化KVM安装linux

目录 🍁虚拟化技术 🍂KVM的整体结构 🍂KVM 的功能列表 🍂KVM 工具集合 🍁安装kvm虚拟化功能 🍁创建虚拟机 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:KVM虚拟化…

FreeRTOS 信号量(二) ------ 计数型信号量

文章目录 一、计数型信号量1. 计数型信号量简介2. 创建计数型信号量①函数 xSemaphoreCreateCounting()②函数 xSemaphoreCreateCountingStatic() 3. 计数型信号量创建过程分析4. 释放和获取计数信号量 二、计数型信号量操作实验 一、计数型信号量 1. 计数型信号量简介 有些资…

数据结构与算法(小议递归)

文章目录 前言一、递归是什么?二、在什么时候适用递归1.测试一下 总结 前言 递归是一种常用的算法设计,递归就是一种循环推理。简单来说就是调用原算法本身的算法。 这里主要探讨递归的使用, 一、递归是什么? 用一个简单的例子来…

嵌入式代码查看分析利器---Understand

平时在开发嵌入式程序的时候大多数使用的都是keil软件,一般小的工程使用keil没感觉到有什么问题,但是当工程比较大的时候,比如移植了FreeRTOS系统或者LWIP网络系统时,代码全部编译一次就要花费很长世间,特别是开启了点…

CIKM论文解读 | 淘宝内容化推荐场景下对多场景全域表征的思考与应用

我们结合逛逛推荐场景中的具体问题,从多场景全域表征的视角进行了一系列的探索与内容推荐场景的应用,从全域表征的范围、信息迁移方式以及模型框架的应用等维度展开我们的优化工作,取得了阶段性的优化经验和业务效果。 背景介绍 淘宝逛逛自20…

鸿蒙混合打包。在现有安卓应用的基础上扩展鸿蒙的特性,以最快的速度布局鸿蒙生态!

鸿蒙混合打包 介绍 鸿蒙混合打包。在现有安卓应用的基础上扩展鸿蒙的特性,以最快的速度布局鸿蒙生态! 参考:京东APP鸿蒙版上架实践。本项目只是这篇文章的一个验证,让更多的兄弟们可以少走弯路。 我尽可能把每一步的改动作为一…

【HarmonyOS】【JS】Tabs如何设置区分TabBar和TabContent的分割线不显示

【关键字】 Tabs,分割线 【问题描述】 使用JS开发HarmonyOS应用时,使用Tabs组件,默认自带TabBar和TabContent的蓝色分割线,由于蓝色分割线样式不可设置,若不想要此蓝色分割线,如何去除蓝色分割线&#xf…

搭建外网minecraft服务器方案

很多minecraft服务器主都想自己搭建一个外网可以访问的minecraft服务器,在没有外网IP的情况下,一般都是使用Logmein Hamachi方案。这种方案有它的弊端,需要客户机安装Hamachi,十分不方便。另外,免费版只支持5人&#x…

C++三大特性—继承 “基类与派生类之间的类型转换与赋值转换”

理解基类与派生类之间的类型转换是理解C语言面向对象编程的关键所在 继承 通过继承联系在一起的类构成一种层次关系,层次关系的根部有一个基类,其他直接或间接从基类继承而来,称为派生类。    继承(inheritance)机制是面向对象程序设计使代…

Spring RabbitMQ 实现消息队列延迟

1.概述 要实现RabbitMQ的消息队列延迟功能,一般采用官方提供的 rabbitmq_delayed_message_exchange插件。但RabbitMQ版本必须是3.5.8以上才支持该插件,否则得用其死信队列功能。 2.安装RabbitMQ延迟插件 检查插件 使用rabbitmq-plugins list命令用于查看…

C++引用进阶篇:让你的程序更加高效、安全、简洁

文章目录 前言1. 引用和临时数据🍑 什么样的临时数据会放到寄存器中🍑 关于常量表达式🍑 引用也不能指代临时数据🍑 引用作为函数参数 2. 为const引用创建临时变量3. const引用与转换类型🍑 引用类型的函数形参请尽可能…

SPFA 算法:实现原理及其应用

文章目录 一、前言二、SPFA 算法1、SPFA算法的基本流程2、代码详解 三、SPFA 算法已死 ? 一、前言 SPFA算法,全称为Shortest Path Faster Algorithm,是求解单源最短路径问题的一种常用算法,它可以处理有向图或者无向图&#xff0…

PySide2 QWebEngine与Web js交互

文章目录 单向交互双向传值案例 单向交互 QWebEngineView加载web页面&#xff0c;web页面中点击按钮&#xff0c;执行js代码&#xff0c;js的返回值传给QWebEnginePage&#xff0c;使用python进行保存结果。 单向&#xff0c;js向python(PySide2)端传输数据。 前端实现 <…

前端web3入门脚本三:一键完成与dex的交互,羊毛党必备

前言 该脚本用途&#xff1a;一键可以完成与dex的所有交互&#xff0c;包括2次swap&#xff0c;添加/移除流动性&#xff0c;以及farm和提取LP。一次运行可以有6条交易记录。 无论是个人单刷还是羊毛党批量地址刷交互都完美适配。当然反女巫方案不在这次文章的讨论范围内。 一、…

javascript中find(), filter(), some(), every(), map()等方法介绍

1、find() find() 用于找出第一个符合条件的数组成员。它的参数是一个回调函数&#xff0c;所有数组成员依次执行该回调函数&#xff0c;直到找出第一个返回值为true的成员&#xff0c;然后返回该成员。如果没有符合条件的成员&#xff0c;则返回undefined。 find()方法的回调…

利用Matab进行覆盖计算----战术计算

在 contour函数中添加如下代码 %------- 计算畅通区面积和占比例 --------% Spi*maxrange*maxrange/1e6; S0 nnz(isInRange)*reslons*reslats/1e6;isnn ~isnan(cdata); cdata0 cdata(isnn); S1numel(cdata0)*reslons*reslats/1e6;AS1/S0; % 畅通区所占比例; fprintf("…

CLion开发工具 | 06 - 使用CLion开发STM32(无需Cmake)

专栏介绍 文章目录 专栏介绍一、准备工作1. 工具准备2. 裸机工程准备二、使用CLion打开工程三、基于CLion写代码1. LED blink代码2. printf重定位代码四、编译工程1. 编译配置2. 选择编译目标3. 编译五、烧录1. OpenOCD基础知识(了解)2. 设置CLion路径3. 新建CLion配置文件4.…

面试总结,4年经验

小伙伴你好&#xff0c;我是田哥。 本文内容是一位星球朋友昨天面试遇到的问题&#xff0c;我把核心的问题整理出来了。 1&#xff1a;Java 层面的锁有用过吗&#xff1f;除了分布式锁以外 是的&#xff0c;Java中提供了多种锁机制来保证并发访问数据的安全性和一致性。常见的J…