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

news2024/11/17 14:35:32

目录

一.介绍

二. 代码

三. 运行结果及分析

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:20
    cap(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:20
    cap(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:20
    cap(1,i) = mimo_capacity(N,i,SNR);
end
%figure
plot(1:1:20,cap,'g')
hold on

SNR = 20;
for i = 1:1:20
    cap(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:20
    cap(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:20
    cap(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:20
    cap(1,i) = mimo_capacity(i,M,SNR);
end
plot(1:1:20,cap,'g')
hold on

SNR = 20;
for i = 1:1:20
    cap(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:10
    for j = 1:1:10
        c_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:20
    cap_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:30
    c(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:30
    c(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);
end

capacity = 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:3000
    H = 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);
    end
    C(1,i) = sum(C_temp);
end

cap = 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:30
    c(1,SNR+1) = alamouti(SNR);
end

plot(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信道模型

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

 

 

普通的瑞利信道模型

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

 

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

空时块码(Alamouti 码):

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

四. 总结

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

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

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

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

相关文章

秒懂SpringBoot之全网最易懂的Spring Security教程

[版权申明] 非商业目的注明出处可自由转载 出自:shusheng007 文章目录概述简介原理默认实现使用Token认证方案JWT认证流程自定义Authentication Provider自定义Provider修改配置认证失败与授权失败处理认证失败处理授权失败处理支持方法级别的授权总结源码概述 现如…

PMP好考吗,有多大的价值?

关于PMP考试题型及考试内容,PMP考试共200道单选题,其中25道题不计分,会被随机抽查,答对106道题以上通过考试,参考比例106/175,60.57%估计答对(10625)道题及上即可通过,参…

全国进入裁员潮,到底是大厂难混?还是我技不如人?

前言 面对裁员,每个人的心态不同。他们有的完全没有料想到自己会被裁,有的却对裁员之事早有准备。大多数人,我想是焦虑失落的吧。 01 “降本增效”,HR怒提裁员刀 小默 | 32岁 芯片行业 人力资源 1月份,身处芯片行业H…

额度系统设计

一、额度生命周期额度生效/失效:授信的时候风控返回用户额度,当额度有效期到期之后额度失效;额度预扣/占用/释放: 当客户来提款的时候,只要提款金额小于授信额度(可用额度)时,先预扣,处理完系统…

如何让APP在Google Play中成为特色

Google Play覆盖了 190 多个地区,数十亿的用户,所以开发者都会希望APP在应用商店中获得推荐位。 Google Play 上的精选热门应用类型:热门游戏或应用,畅销应用,安装量增长的应用,产生最多收入的应用。 那么…

Pdfium.Net SDK 4.78.2704 完美Crack/Ptach

不限制时,/不限PDF体积、、、、、// version: 4.78.2704 | file size: 52.7 Mb Pdfium .Net SDK C# PDF 库 从头开始或从一堆扫描图像创建 PDF 编辑、合并、拆分和操作 PDF,提取文本和图像 嵌入独立的 Winforms 或 WPF PDF 查看器 支持:.Net…

软件性能测试方案怎么编写?权威的性能测试报告如何申请?

软件性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。性能测试在软件的质量保证中起着重要的作用,它包括的测试内容丰富多样。负载测试和压力测试都属于性能测试,两者可以结合进行。 一、软件性能测…

java中调用配置文件中的数据库路径及账号密码

项目场景: 有的时候因为项目的需求,所以需要隐藏数据库的路径,账号密码 解决方案: 话不多说直接上代码 这个分情况而定的: 在jdbc框架中获取方法: 1.获取数据库 Class.forName("oracle.jdbc.OracleDriver"); 2.获取路径,账号,密码 Properti…

pytorch零基础实现语义分割项目(一)——数据概况及预处理

语义分割之数据加载项目列表前言数据集概况数据组织形式数据集划分数据预处理均值与方差结尾项目列表 语义分割项目(一)——数据概况及预处理 语义分割项目(二)——标签转换与数据加载 前言 在本专栏的上一个项目中我们介绍了…

Python 使用pandas处理Excel —— 快递订单处理 数据匹配 邮费计算

问题背景 有表A,其数据如下 关键信息是邮寄地址和单号。 表B: 关键信息是运单号和重量 我们需要做的是,对于表A中的每一条数据,根据其单号,在表B中查找到对应的重量。 在表A中新增一列重量,将刚才查到的…

防水防汗耳机什么品牌好?四款防水效果不错的蓝牙耳机推荐

近年来蓝牙耳机中可谓是火爆全网,非常受到大家追捧,当然,也随着蓝牙耳机的增长,很多人不知道蓝牙耳机该如何选择,其实蓝牙耳机不止要音质表现好,佩戴体验好,还有着防水性能不能差,不…

window字符集与利用向导创建mfc

1.字节对应英语1个字符对应1个字节 多字节中文1个字符对应多个字节 宽字节 Unicode utf-8 3个 GBK2个2.多字节转换 为宽字节TEXT是由自适应编码的转换 TCHER 自适应编码的转换 _T是由自适应编码转换,L("")多字节转宽字节3.统计字符串长度统计字符串长度 c…

Ambari2.7.5集群搭建详细流程

0 说明 本文基于本地虚拟机从零开始搭建ambari集群 1 前置条件 1.1 本地虚拟机环境 节点角色ambari-1ambari-server ambari-agentambari-2ambari-agentambari-3ambari-agent 1.2 安装包 1.3 修改主机名并配置hosts文件 hostnamectl set-hostname ambari-1 hostnamectl se…

2022 年度回顾|The Sandbox 开放元宇宙的发展历程

2023 年又会为大家带来什么呢? 2022 年是很值得庆祝的一年。回顾这一年,The Sandbox 开放游戏元宇宙达成诸多里程碑。我们努力让各方面都更接近我们的愿景:一个开放的、去中心化的元宇宙,通过真正的数位所有权赋予创作者权力。社区…

mysql 通过客户端执行now()函数,时差为8小时

1.场景演示 假设当前北京时间是:2023-02-17 19:31:37。明显执行出来的结果和实际时间晚8小时。 所用Mysql版本为: 解决方式: 需要在my.conf文件中的[mysqld]下添加 default-time-zoneAsia/Shanghai 由于这个mysql8.0是通过 docker 安装的&…

【Python合集】我见过最有趣好玩强大的代码都在这里,涨见识啦~建议收藏起来慢慢学。(墙裂推荐)

前言 大家好,我是栗子同学啦~ 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 Python 凭借语法的易学性,代码的简洁性以及类库的丰富性,赢得了众多开发者的喜爱…

Linux延时队列工作原理与实现

当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核…

【初探人工智能ChatGPT】2、雏形开始长成

【初探人工智能ChatGPT】2、雏形开始长成【初探人工智能ChatGPT】2、雏形开始长成安装Flask封装Web接口雏形设置接收参数功能验证聊天写代码代码补全生成图片写在后面笔者初次接触人工智能领域,文章中错误的地方还望各位大佬指正! 【初探人工智能ChatGPT…

NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015

集群可以使用nifi内嵌的zookeeper来搭建集群,也可以使用外部的自己装的zookeeper来 搭建集群. 因为nifi是依赖zookeeper集群来进行工作的,为了避免运维人员还需要额外的去搭建,维护一个 zookeeper集群,所以nifi,就内嵌了一个zookeeper集群. 可以看到有两个属性需要配置,第一…

OpenGL - 如何理解 VAO 与 VBO 之间的关系

系列文章目录 LearnOpenGL 笔记 - 入门 01 OpenGLLearnOpenGL 笔记 - 入门 02 创建窗口LearnOpenGL 笔记 - 入门 03 你好,窗口LearnOpenGL 笔记 - 入门 04 你好,三角形 文章目录系列文章目录1. 前言2. 渲染管线的入口 - 顶点着色器2.1 顶点着色器处理过…