当前位置: 首页 > news >正文

基于MATLAB计算MIMO信道容量(附完整代码与分析)

目录

一.介绍

二. 代码

三. 运行结果及分析

3.1  MIMO信道容量:固定发射天线数为4

3.2 MIMO信道容量:固定接收天线数为4

3.3 AWGN信道与瑞利信道容量

四. 总结


一.介绍

本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量,瑞利信道容量和Alamouti码(空时块码)信道容量。

AWGN: Additive White Gaussian Noise 加性高斯白噪声

有关MIMO信道容量的具体解释,可参看此文章:

MIMO系统信道容量分析_mimo信道容量_唠嗑!的博客-CSDN博客

二. 代码

本节代码包含一个主运行文件;四个计算信道容量文件;两个函数文件

(1)main.m文件

主运行文件

clear;
clc;
close all;
%--------------Main--------------%
c_3d = zeros(10,10);
%--------------接收天线变化--------------%
N = 4;%发射天线
cap = zeros(1,20);
%SNR为5dB
SNR = 5; %SNR in dB
for i = 1:1:20cap(1,i) = mimo_capacity(N,i,SNR);
end
figure
plot(1:1:20,cap,'b')
title('发射天线数目为4的情况')
xlabel('接收天线数目')
ylabel('信道容量 bits/s/Hz')
hold on%SNR为10dB
SNR = 10;
for i = 1:1:20cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'r')
hold on%SNR为15dB
SNR = 15;
for i = 1:1:20cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'g')
hold onSNR = 20;
for i = 1:1:20cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'m')
legend('5db','10dB','15dB','20db')%--------------发射天线变化--------------%
M = 4;%发射天线
cap = zeros(1,20);
%SNR为5dB
SNR = 5; %SNR in dB
for i = 1:1:20cap(1,i) = mimo_capacity(i,M,SNR);
end
figure
plot(1:1:20,cap,'b')
title('接收天线数目为4的情况')
xlabel('发射天线数目')
ylabel('信道容量 bits/s/Hz')
hold on%SNR为10dB
SNR = 10;
for i = 1:1:20cap(1,i) = mimo_capacity(i,M,SNR);
end
%figure
plot(1:1:20,cap,'r')
hold on%SNR为15dB
SNR = 15;
for i = 1:1:20cap(1,i) = mimo_capacity(i,M,SNR);
end
plot(1:1:20,cap,'g')
hold onSNR = 20;
for i = 1:1:20cap(1,i) = mimo_capacity(i,M,SNR);
end
%figure
plot(1:1:20,cap,'m')
legend('5db','10dB','15dB','20db')%--------------三维图展示MIMO----------------%
SNR = 15;
for i = 1:1:10for j = 1:1:10c_3d(i,j) = mimo_capacity(i,j,SNR);end
end
figure
mesh(1:1:10,1:1:10,c_3d)
title('3-dimension visual')%---------------AWGN SISO信道--------------%
cap_awgn = zeros(1,31);
for SNR = -10:1:20cap_awgn(1,SNR+11) = awgn_capacity(SNR);
end
figure
plot(1:1:31,cap_awgn)
title('awgn信道容量')
xlabel('SNR in dB')
ylabel('信道容量 bits/s/Hz')%---------------Raly SISO信道--------------%
c = zeros(1,31);for SNR = 0:1:30c(1,SNR+1) = ralychannel(SNR);
end
figure
plot(1:1:31,c)
title('瑞利信道容量')
xlabel('SNR in dB')
ylabel('信道容量 bits/s/Hz')%--------------Alamouti---------------%
c = zeros(1,31);for SNR = 0:1:30c(1,SNR+1) = alamouti(SNR);
end
figure
plot(1:1:31,c)
title('Alamouti码 2发1收')
xlabel('SNR in dB')
ylabel('信道容量 bits/s/Hz')

(2)awgn_capacity.m文件

AWGN信道容量

function capacity = awgn_capacity(SNR)SNR_D = 10^(0.1*SNR);
capacity = log2(1+SNR_D);end

(3)ralychannel.m文件

瑞利衰落信道容量

function capacity = ralychannel(SNR)h = raylrnd(1/sqrt(2),[1,1000000]);
c = zeros(1,length(h));
%SNR = 20;for i = 1:1:length(h)c(1,i) = log2(1+h(1,i)*SNR);
endcapacity = mean(c);end

(4)mimo_capacity.m文件

MIMO信道容量

function cap = mimo_capacity(N,M,SNR)SNR_D = 10^(SNR*0.1); %SNR in decimal
C = zeros(1,3000);for i = 1:1:3000H = generate_channel_matrix(N,M);[U,S,V] = svd(H);d = diag(S);C_temp = zeros(1,length(d));for j = 1:1:length(d)C_temp(1,j) = log2(1+d(j,1)^2*SNR_D/N);endC(1,i) = sum(C_temp);
endcap = mean(C);

(5)generate_channel_matrix.m文件

产生信道矩阵的文件

function H = generate_channel_matrix(N,M)
%N:发射天线个数
%M:接收天线个数
H = raylrnd(1/sqrt(2),M,N);end

(6)demo.m

实验文件

c = zeros(1,31);for SNR = 0:1:30c(1,SNR+1) = alamouti(SNR);
endplot(1:1:31,c)

三. 运行结果及分析

代码运行后一共有六个图,其中一个3D图,没什么好解释的,这里省去。重点分析其他五个跟信道容量相关的图。

3.1  MIMO信道容量:固定发射天线数为4

  • 横向对比:当接收天线数增加时,信道容量整体呈现增加趋势;
  • 拆分对比:固定发射天线数为4,接收天线数从1-4增加,信道容量显著增加。接收天线数继续增加时,信道容量增加的趋势相对降低;
  • 纵向对比:同一组收发天线数时,当信噪比从5dB,10dB,15dB,20dB不断增加时,信道容量也会增加。

3.2 MIMO信道容量:固定接收天线数为4

横向对比:当接收天线数增加时,信道容量整体呈现增加趋势;
拆分对比:固定发射天线数为4,接收天线数从1-4增加,信道容量显著增加。接收天线数继续增加时,信道容量增加的趋势相对降低;
纵向对比:同一组收发天线数时,当信噪比从5dB,10dB,15dB,20dB不断增加时,信道容量也会增加。
区别性:固定接收天线数为4,当发射天线数超过4以后,信道容量增加的幅度相比前一个3.1更加缓慢(图形更加接近一条水平线);
解释:该模拟信道环境下,接收天线相比发射天线变化,对信道容量的影响稍微大一些;

3.3 AWGN信道与瑞利信道容量

普通的AWGN信道模型

单收发天线;
当信噪比SNR1增加到31dB时,信道容量也从0.1375增加到6.658 bits/s/Hz

 

 

普通的瑞利信道模型

单收发天线;
当信噪比SNR1增加到31dB时,信道容量也从0增加到4.57 bits/s/Hz
在该模拟环境下,同一个SNR信噪比下,AWGN信道容量更高,AWGN信道模型优于瑞利信道模型。
3.4 空时编码信道容量

 

空时编码分为空时块码空时格码。哈佛大学教授Tarokh率先提出空时格码,结构复杂度很高。随后Alamouti提出空时块码,结构复杂度很低,但却性能也更好,该文章也被评为近50年最优秀的57篇文章之一,极大影响了MIMO技术。

空时块码(Alamouti 码):

2根发射天线,1根接收天线的MIMO(最简单的空时块码模型);
当信噪比SNR1增加到31dB时,信道容量也从0.9261增加到9.55 bits/s/Hz;
空时块码信道模型优于AWGN和瑞利信道模型。

四. 总结

依据经典信息论,SISO信道的自由度只有时间和频率两个维度,MIMO引入多天线,扩展信道的自由度,包含时间、频率和空间三个维度,从而提升了MIMO的容量。

SISOSingle Input Single Output 单输入单输出系统

相关文章:

基于MATLAB计算MIMO信道容量(附完整代码与分析)

目录 一.介绍 二. 代码 三. 运行结果及分析 3.1 MIMO信道容量:固定发射天线数为4 3.2 MIMO信道容量:固定接收天线数为4 3.3 AWGN信道与瑞利信道容量 四. 总结 一.介绍 本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量&#xf…...

CSDN城市开发者联盟、C友会期待你的加入

文章目录🌟 课前小差🌟 chatGPT🌟 CSDN中的持续学习🌟 23年原力计划🌟 C友会、CDC🌟 如何关联本地的开发者?🌟 写在最后🌟 课前小差 哈喽,大家好&#xff0c…...

【新2023】华为OD机试 - 吃火锅(Python)

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 吃火锅 题目 入职后,导师会请你吃饭,你选择了火锅, 火锅里会在不同时间下很多菜, 不同食材要煮不同时间,才能变得刚好合适, 你希望吃到最多的刚好合适的菜, 但是你的手速不够快用m代替手速, 每次…...

类似LeetCode的登录页面(小程序版)

前言每一个项目都会有用户端的注册和登录页面,对于刚入门的小白来说,在UI设计方面不太擅长,就算大致的UI界面设计出来了,但是落实到代码上来实现的时候就很容易卡住。这篇博客主要介绍的就是仿作一个类似LeetCode登录的简约大方页…...

CUDA的统一内存

CUDA的统一内存 文章目录CUDA的统一内存N.1. Unified Memory IntroductionN.1.1. System RequirementsN.1.2. Simplifying GPU ProgrammingN.1.3. Data Migration and CoherencyN.1.4. GPU Memory OversubscriptionN.1.5. Multi-GPUN.1.6. System AllocatorN.1.7. Hardware Coh…...

MySQL-其他函数(补充)

格式化函数FORMAT(x, n) 例:将数字x进行格式化,以四舍五入的方式保留n位小数,结果以字符串的形式返回mysql> select format(12.3456,3),format(2.2,4),format(9.333,0); --------------------------------------------------- | format(12…...

MySQL Study Notes Design in 2023

文章目录1 概述1.1 MySQL相关概述1.2 数据模型1.3 SQL分类2 数据库设计-DDL2.1 约束2.2 字段3 数据库操作-DML3.1 增加(insert)1 概述 1.1 MySQL相关概述 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 数据库管理系统&#xf…...

C++ 修改防火墙firewall设置(Windows)

文章目录1、简介1.1 防火墙概述1.2 入站,还是出站?1.3 防火墙规则优先级2、系统界面方式3、命令行方式3.1 防火墙基本状态设置3.2 入站出站规则设置3.3 其他设置3.4 telnet检测端口4、C方式4.1 注册表4.2 COM(Windows XP)4.3 COM&…...

Spring 入门教程详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

day43【代码随想录】动态规划之一和零、完全背包理论基础

文章目录前言一、一和零(力扣474)二、完全背包前言 1、一和零 2、完全背包理论基础 一、一和零(力扣474) 求装满这个背包最多有多少个物品 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…...

GEE学习笔记 七十八:干涸的洪泽湖

今天看了一篇报道直击60年一遇气象干旱:洪泽湖缩小近一半,鱼蟹受灾严重!_新华报业网(直击60年一遇气象干旱:洪泽湖缩小近一半,鱼蟹受灾严重!),既然玩GEE那就要玩出点花样…...

双指针【灵神基础精讲】

来源0x3f:https://space.bilibili.com/206214 文章目录同向双指针[209. 长度最小的子数组](https://leetcode.cn/problems/minimum-size-subarray-sum/)[713. 乘积小于 K 的子数组](https://leetcode.cn/problems/subarray-product-less-than-k/)[3. 无重复字符的最…...

tushare量化数据库模块怎么分析?

tushare量化数据其实包含的数据库有些是需要收费的,也有些会免费提供,不过tushare量化数据库整个库就很大很大,涉及的范围也广,挖掘这些数据还得从量化股票接口说起,就比如说在股票量化领域,tushare量化数据…...

模型转换 PyTorch转ONNX 入门

前言 本文主要介绍如何将PyTorch模型转换为ONNX模型,为后面的模型部署做准备。转换后的xxx.onnx模型,进行加载和测试。最后介绍使用Netron,可视化ONNX模型,看一下网络结构;查看使用了那些算子,以便开发部署…...

【深度学习】激活函数

上一章——认识神经网络 新课P54介绍了强人工智能概念,P55到P58解读了矩阵乘法在代码中的应用,P59,P60介绍了在Tensflow中实现神经网络的代码及细节,详细的内容可以自行观看2022吴恩达机器学习Deeplearning.ai课程,专…...

【新2023】华为OD机试 - 数字的排列(Python)

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 数字的排列 题目 小华是个很有对数字很敏感的小朋友, 他觉得数字的不同排列方式有特殊的美感。 某天,小华突发奇想,如果数字多行排列, 第一行1个数, 第二行2个, 第三行3个, 即第n行n个数字,并且…...

[oeasy]python0085_ASCII之父_Bemer_COBOL_数据交换网络

编码进化 回忆上次内容 上次 回顾了 字符编码的 进化过程 IBM 在数字化过程中 作用 非常大IBM 的 BCDIC 有 黑历史 😄 6-bit的 BCDIC 直接进化成 8-bit的 EBCDIC补全了 小写字母 和 控制字符 在ibm就是信息产业的年代 ibm的标准 怎么最终 没有成为 行业的标准 呢…...

volatile,内存屏障

volatile的特性可见性: 对于其他线程是可见,假设线程1修改了volatile修饰的变量,那么线程2是可见的,并且是线程安全的重排序: 由于CPU执行的时候,指令在后面的会先执行,在指令层级的时候我们晓得volatile的特性后,我们就要去volatile是如何实现的,这个很重要!&#…...

【ESP 保姆级教程】玩转emqx MQTT篇① —— 系统主题、延迟发布、服务器配置预算、常见问题

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-18 ❤️❤️ 本篇更新记录 2023-02-18 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

第48讲:SQL优化之ORDER BY排序查询的优化

文章目录1.ORDEY BY排序查询优化方面的概念2.ORDER BY排序的优化原则3.ORDER BY排序优化的案例3.1.准备排序优化的表以及索引3.2.同时对nl和lxfs字段使用升序排序3.3.同时对nl和lxfs字段使用降序排序3.4.排序时调整联合索引中字段的位置顺序3.5.排序时一个字段使用升序一个字段…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...