模拟不同MIMO-OFDM方案的MATLAB代码(Matlab代码实现)

news2025/1/13 15:59:29

       目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

       MIMO技术指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量。它能充分利用空间资源,通过多个天线实现多发多收,在不增加频谱资源和天线发射功率的情况下,可以成倍地提高系统信道容量,显示出明显的优势、被视为下一代移动通信的核心技术。

多输入多输出(MIMO)和正交频分复用(OFDM)是LTE的两大核心技术。多输入多输出(MIMO)技术利用各种分集技术带来的分集增益可以提高系统的信道容量、数据的传输速率以及系统的频谱利用率,这些都是在不增加系统带宽和发射功率的情况下取得的;正交频分复用(OFDM)技术是多载波调制技术的一种,其物理信道是由若干个并行的正交子信道组成,因此可有效地对抗频率选择性衰落,同时通过插入循环前缀(CP)可以有效消除由多径而引起的符号间干扰(ISI)。由于多输入多输出(MIMO)在提高系统容量和正交频分复用(OFDM)在对抗多径衰落方面的优势,基于两者结合的MIMO-OFDM系统已经引起了广泛的关注。 信道估计算法和信号检测算法是MIMO-OFDM系统的关键技术。其中信道估计算法对MIMO-OFDM系统接收端的相干解调和空时检测起着至关重要的作用,信道估计的准确性将影响系统的整体性能。

📚2 运行结果

主函数部分代码:

%% Linear Minimum Mean Square Error
% System Parameters
% FFT N = 128
% M = 2
clear all; clc
​
% Load Function libraries
QPSK = QPSK_lib;
OFDM_lib;
%% Data
% Load text file
fid = fopen('usdeclar.txt');
cAr = fread(fid,inf);   % Read as ASCII decimal characters
fclose(fid);
​
% % % Load 32 char string
% load('Test_Strings.mat','QPSKstr'); % This will allow for a single OFDM char
% cAr = double(QPSKstr);
% 
%% Convert to binary
% 
binDat = Binary_cnvrt(cAr);
​
%binDat = ones(1,69480);
​
%% Map to QPSK symbols
​
symDat = QPSK.bin2symb(binDat,1); 
​
%% LMMSE Encoding
% |s1 s3|
% |s2 s4|
a = reshape(symDat,2,length(symDat)/2);
​
%% Split into Mt channels and perform IDFT
​
N = 128;
ch1 = idft(a(1,:),N);
ch2 = idft(a(2,:),N);
​
%% Parallel to Serial for each channel
​
chDim = size(ch1);
ch1 = reshape(ch1,1,chDim(1)*chDim(2));
ch2 = reshape(ch2,1,chDim(1)*chDim(2));
TX_2 = [ch1;ch2];
​
%% Channel
Mt = 2;
Mr = 2;
Pt = mean(mean(TX_2.'.*conj(TX_2.')));  % Es/Mt
​
%%
SNR_dB = 20;
SNR = 10^(SNR_dB/10);
H = sqrt(1/2).*(randn(Mr,Mt)+1i*randn(Mr,Mt));  % Channel Coeff
%H = eye(Mr,Mt);
Pn = Pt/SNR;
% load('ZF_n.mat');
n = sqrt(Pn/2).*(randn(Mr,length(ch1))+1i.*randn(Mr,length(ch1)));
N0 = mean(mean(n.'.*conj(n.')));
​
%% Receiver
​
RX_2 = H*TX_2+n;
​
%% Serial to Parallel
​
y1 = reshape(RX_2(1,:),chDim(1),chDim(2));
y2 = reshape(RX_2(2,:),chDim(1),chDim(2));
​
%% DFT
​
ySym1 = dft(y1,chDim(1));
ySym2 = dft(y2,chDim(1));
​
ySym1 = ySym1(1:length(symDat)/2);  % Remove extra data added from idft from TX
ySym2 = ySym2(1:length(symDat)/2);
​
%% LMMSE Decoding
​
v2 = Mt/SNR;    % Mt*N0/Es
g = (H*H'+v2*eye(Mt))\H;
z = g'*[ySym1; ySym2];
​
xh = reshape(z,1,length(ySym1)*2);  % Estimation of x
​
%% Demapper
% De-map symbols and convert to binary
​
[bin2, symDat2] = QPSK.sym2bin(xh);
​
% Show Received symbol constellation
close all
figure(2)
QPSK.Constellation(xh, SNR_dB);
%% Calculate SER & BER
​
SER = mean(symDat2 ~= symDat);
BER = mean(binDat ~= bin2);

🎉3 参考文献

[1]申京. MIMO-OFDM系统中信道估计及信号检测算法的研究[D].北京邮电大学,2012.

部分理论引用网络文献,若有侵权联系博主删除。

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

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

相关文章

杭州旭航集团,申请纳斯达克IPO上市,募资9800万美元

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,为中国企业提供数字内容营销服务的杭州旭航网络科技有限公司的控股公司Xuhang Holdings Ltd(以下简称:旭航集团),近期已向美国证券交易委员会(SEC)提…

随想录Day53--动态规划: 1143.最长公共子序列 ,1035.不相交的线 , 53. 最大子序和

1143.最长公共子序列,这题要画一个二维数组,用两层for循环来遍历每个字符,从而比较是否相等。用dp[i][j]来表示当遍历到text2的第i个字符和text1的第j个字符时,最长的公共子序列为多少。比如说两个字符串(“abcde”和“ace”&…

怎么样成为一名Python工程师?到底要会哪些东西?你会了多少?

目录 重点:爬虫部分项目、源码展示python数据分析可视化大屏看板python爬虫爬取淘宝卤鸭货商品数据python游戏开发python自动化办公 重点: 1、做一名程序员,绝对要耐得住寂寞,并且要一直有点兴趣促进你学习。如果你完全没兴趣&am…

electron+vue3全家桶+vite项目搭建【十】vite路径取别名、多环境相关配置

文章目录 引入1.路径取别名配置2.测试别名配置3.环境变量配置4.验证环境变量配置 引入 我们之前写代码的时候用相对路径不是很方便,并且所有环境共用同一套配置也不太好,接下来我们通过vite配置一下路径别名和环境变量 视频讲解 vite官网 demo项目地址…

DIN论文翻译

摘要 在电子商务行业,利用丰富的历史行为数据更好地提取用户兴趣对于构建在线广告系统的点击率(CTR)预测模型至关重要。关于用户行为数据有两个关键观察结果:i) 多样性(diversity)。用户在访问电子商务网站时对不同种类的商品感兴趣。ii) 局部激活(local…

Linux驱动之GPIO函数、IO内存映射、混杂设备驱动

之前学习完了字符设备驱动的大体框架,现在我们就使用这个基本的框架来对硬件进行操作,例如通过指令控制led的状态,编写LED驱动。LED驱动有多种实现方式。 目录 GPIO函数 IO内存映射 混杂设备驱动 GPIO函数 首先加入需要的头文件。 #incl…

欧盟立法者签署公开信,近万人联名“暂停高级AI研发”

来源丨CoinTelegraph 编辑丨liuruiWeb3CN.Pro ChatGPT 曾经的势头有多猛烈如今就被行业大佬抵制的就有多严重。 近日,十几位欧盟 (EU) 政客签署了“暂停高级AI研发”的公开信,呼吁 AI (人工智能)的“安全”发展,特斯拉…

【Android -- 软技能】聊聊高效开发的一些套路与实践

前言 在开发中,编码我们有分层架构、设计模式做为套路来高效开发,但你也知道编码不是开发的全部,一个完全的开发流程用面向对象思想来概括,它分为OOA(面向对象分析)、OOD(面向对象设计&#xf…

Flutter - 动画使用及自定义动画组件(tabbar跳动动画或文字抖动)

demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 Flutter - 动画组件(tabbar跳动动画或文字抖动) 序效果图动画简介动画类型Flutter动画的一些概念 常用动画实现隐式动画Tween动画Curve动画H…

低代码/无代码平台在软件开发中的应用

随着技术的不断发展,软件开发也在不断地进步。低代码/无代码平台已经成为软件开发的一个新的趋势。在这篇文章中,我们将深入探讨低代码/无代码平台在软件开发中的应用,包括它们的优势、如何选择合适的平台以及如何使用这些平台来开发高质量的…

机器学习 CarRentalData数据集分析和预测

介绍数据集 fuelType:燃料类型 rating:评级 renterTripsTaken:租房者出行 reviewCount:审阅计数 location.city:位置.城市 location.country:地点.国家/地区 location.latitude:位置.纬度 loca…

STM32按键实验中连接按键的GPIO管脚是上拉输入还是下拉输入

一、理解 关于STM32按键实验中连接按键的GPIO管脚是配置为上拉输入还是下拉输入的理解&#xff1a; 以江科大自动协教学视频按键输入实验为例&#xff1a; &#xff08;1&#xff09;按键KEY0<——>PE4 按键另一端接GND &#xff08;2&#xff09;按键KEY1<——&…

入门教学 | 快速了解集简云

集简云是一款超级软件连接器,无需开发,无需代码知识就可以轻松打通数百款软件之间的数据连接,构建自动化与智能化的业务流程。通过自动化业务流程,每月可节省企业数百甚至数万小时的人工成本。 集简云是什么? 集简云是一款超级软件连接器,无需开发,无需代码知识,就可以…

在现成的3D打印机上进行实验理论:一种数据孪生的攻击探测框架

在现成的3D打印机上提供了一种DT中攻击探测框架的DT解决方案的实验演示&#xff0c;作为说明性CPMS资源。通过网络安全DT对打印机正常运行、异常运行和攻击三种情况下的实验数据进行收集和分析&#xff0c;得出攻击检测结果。实验装置概述如下图所示。该实验研究是在现实世界设…

刚刚入职Android开发的应届生,该如何走向架构师

相信有不少从事Android开发的朋友&#xff0c;在工作一两年后会陷入一段迷茫期&#xff0c;有的是在工作中遇到了瓶颈&#xff0c;感觉无法突破&#xff1b;有的是想进阶成为架构师&#xff0c;但不知道如何进阶&#xff0c;因此产生了一些烦恼。为此小编在这里分享Android开发…

安卓开发: Compose 中的 Text 文本控件属性详解

Composable fun Text(text: String,modifier: Modifier Modifier,color: Color Color.Unspecified,fontSize: TextUnit TextUnit.Unspecified,fontStyle: FontStyle? null,fontWeight: FontWeight? null,fontFamily: FontFamily? null,letterSpacing: TextUnit TextU…

wps宏编辑器案例1-自定义函数使用

某公司考情和请假系统是2套独立的系统&#xff0c;人资在月底做考勤统计的时候需要把考勤系统导出的考勤信息表和OA请假流程导出的请假信息表进行合并&#xff0c;得出人员真实的考勤情况。比如员工“忠达”在考勤系统全显示缺勤&#xff0c;实际上请假系统里有4天请假&#xf…

16、Web原生组件注入(Servlet、Filter、Listener)

文章目录 1、使用Servlet API2、使用RegistrationBean 【尚硅谷】SpringBoot2零基础入门教程-讲师&#xff1a;雷丰阳 笔记 路还在继续&#xff0c;梦还在期许 1、使用Servlet API ServletComponentScan(basePackages “com.atguigu.admin”) :指定原生Servlet组件都放在那里…

全景天窗式科普数据仓库

数据仓库是一个面向主题的、集成的、随时间变化但信息本身相对稳定的数据集合&#xff0c;用于支持管理决策过程。其本质就是完成从面向业务过程数据的组织管理到面向业务分析数据的组织和管理的转变过程&#xff0c;也是商业智能BI中数据仓库的主要作用。 数据仓库 - 派可数据…

Spring Boot 定时任务

Spring Boot 提供了方便的注解来实现定时任务。下面是定时任务注解的详细教程&#xff1a; 一、添加依赖 要使用 Spring Boot 的定时任务注解&#xff0c;首先需要在项目中确认已添加过spring-boot-starter的依赖。 <dependency><groupId>org.springframework.b…