【MIMO通信】基于matlab MIMO_OFDM通信系统仿真【含Matlab源码 314期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【MIMO通信】基于matlab MIMO_OFDM通信系统仿真【含Matlab源码 314期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、MIMO_OFDM简介
MIMO-OFDM系统的接收信号是多个发射天线发送信号的衰落与加性噪声的线性叠加,若采用通常SISO-OFDM系统或MIMO系统的估计算法估计信道,将会带来很大的估计误差。出于设计实现的考虑,本文主要研究理论相对比较成熟的慢变环境下基于训练序列的MIMO-OFDM系统的信道估计算法。本章将主要讨论MIMO-OFDM系统特殊训练序列的设计和信道估计算法的选择。
多天线系统的信道估计算法同单天线系统的相比具有更大的复杂性,因为接收信号是多个发射信号的叠加信号,这些发射信号同时从多个发射天线上发射出来,几乎同步到达任一接收天线。因此要从一个叠加信号中正确的识别出多个发射信号,需要信道估计算法能估计出各发射天线到同一接收天线之间多个并行信道的信道特性。而任一发射天线到任一接收天线之间的信道估计可参考单天线系统的算法。
信道估计算法主要可以分为两种:盲估计算法和非盲估计算法。盲信道估计算法不需要在发送信息中插入训练序列,节约了带宽。盲估计算法的实现需要利用发送信息内包含的统计信息。这通常需要在接收端对接收信号进行复杂的数学运算,算法的运算量一般都很大,不适合应用于对时延要求比较高的实时系统。非盲估计算法是在发送信号中插入收发两端都事先己知的信息,接收端在接收到该已知信息之后,由该信息的幅度、载频或相位变化来估计信道对发送信息所造成的衰落影响。算法应用广泛,几乎可以应用于所有的无线通信系统。
输入信号经复用器分解成n个长度相同的数据流,然后进行独立地编码和调制,因此它不是基于发射分集的。这些编码器可以是二进制的卷积编码器,也可以是不经过任何编码直接输出。
三、部分源代码
N_Tx_ant = 2; % 发送天线数
N_Rx_ant = 2; % 接收天线数
N_ant_pair = N_Tx_ant*N_Rx_ant;
N_user = 1; % 用户数
N_sym = 10; % 每帧中OFDM符号数,不包括两个前缀OFDM符号,LTE中一帧长度为6~7个OFDM符号
N_frame = 10; % 仿真的帧个数
Eb_NoStart = 0; % 仿真循环开始的Eb_No,定义为每比特的能量Eb和噪声的单边功率谱密度No的比值, dB值
Eb_NoInterval = 2; % 仿真Eb/No的间隔值(dB)
Eb_NoEnd = 20; % 仿真Eb/No的终止值(dB)
fs = 15.36e6; % 基带抽样频率(Hz) 1024*15KHz=15360000Hz
T_sample = 1/fs; % 基带时域样点间隔(s)
N_subc = 1024; % OFDM子载波总数,即FFT点数
Idx_used = [-300:-1 1:300]; % 使用的子载波编号,一共使用600个子载波
Idx_pilot = [-300:25:-25 25:25:300]; % 导频子载波编号,导频间隔为24
N_used = length(Idx_used); % 使用的子载波数600
N_pilot = length(Idx_pilot); % 导频的子载波数
N_data = N_used-N_pilot; % 一个OFDM符号内所有用户发送的数据的子载波数
Idx_data = zeros(1,N_data); % 得到数据子载波的编号m = 1; n = 1;
for k = 1:length(Idx_used) if Idx_used(k) ~= Idx_pilot(m);Idx_data(n) = Idx_used(k); n = n + 1;elseif m ~= N_pilotm = m + 1;end
end % 为编程使用方便,调整子载波编号为从1开始,到子载波总数Idx_used = Idx_used + N_subc/2 +1; % 使用的子载波坐标
Idx_pilot = Idx_pilot + N_subc/2 +1; % 导频子载波坐标
Idx_data = Idx_data + N_subc/2 +1; % 数据子载波坐标,坐标0+1024/2+1=513子载波为空,既不是数据,也不是导频
PilotValue = ones(N_pilot,1); % 导频值为全1
PrefixRatio = 1/4; % 循环前缀所占比例
T_sym = T_sample*((1+PrefixRatio)*N_subc); % 一个OFDM符号(包含循环前缀)的持续时间
Modulation = 2; % 调制方式选择QPSK调制
Es = 1; % 在QPSK调制方式下,符号能量都被归一化
Eb = Es/Modulation; % 每比特能量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%snr_idx = 1;
for Eb_No_dB = Eb_NoStart:Eb_NoInterval:Eb_NoEnd Eb_No = 10^(Eb_No_dB/10); % 线性信噪比var_noise = Eb/(2*Eb_No); % 噪声样点的功率,No为单边功率:No=2*var_noisefor frame = 1:N_frame % 逐帧循环计算[user_bit, user_bit_cnt] = user_bit_gen(N_user, N_data ,N_sym, Modulation);% 多用户数据生成模块,每个用户一帧的数据coded_user_bit = user_bit; % 无信道编码[user_subc_alloc, mod_subc ,pwr_subc, pad_bit_cnt] = adpt_mod_para...(coded_user_bit, N_sym, Idx_data); % 子载波分配 mod_sym = modulator(coded_user_bit, user_subc_alloc, mod_subc,...pwr_subc, pad_bit_cnt, N_subc, N_sym); % 按照给定的每用户,每子载波的调制方式,进行调制st_coded = st_coding(mod_sym, N_Tx_ant); % 发送分集,使用空时分组码编码pilot_added = pilot_insert(st_coded, Idx_pilot, PilotValue); % 加导频transmit_signal = ofdm_mod(pilot_added, PrefixRatio, N_subc, N_sym, N_Tx_ant); % OFDM调制,加循环前缀.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%transmit_signal_power = var(transmit_signal); % 发送信号功率length_noise = size(transmit_signal, 2);noise = gausnoise(Eb_No_dB, transmit_signal_power, length_noise); % 产生复噪声序列recv_signal = transmit_signal+noise; % 接收到的信号加噪声%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for u = 1:N_user % 多个用户接收机的循环 data_sym = ofdm_demod(recv_signal, PrefixRatio, N_subc, N_sym, N_Rx_ant); % OFDM解调,去循环前缀.channel_ls = channel_est(data_sym, Idx_pilot, N_pilot, N_sym, N_Tx_ant,N_Rx_ant, N_subc); % 信道估计st_decoded = st_decoding(data_sym, channel_ls, N_Tx_ant, N_Rx_ant, Idx_data); % 接收机分集处理和空时解码demod_user_bit = demodulator(st_decoded, user_subc_alloc{u}, mod_subc{u},...pad_bit_cnt(u), N_sym); % 根据发射端的调制方式进行解调decoded_user_bit{u} = demod_user_bit; % 无信道解码bit_err = sum(abs(decoded_user_bit{u}-user_bit{u})); % 误码率计算user_bit_err{u}(frame, snr_idx) = bit_err;end % 多个用户接收机的循环结束
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
【MIMO通信】基于matlab MIMO_OFDM通信系统仿真【含Matlab源码 314期】相关推荐
- 【Matlab通信】DTMF双音多频电话拨号仿真【含GUI源码 805期】
一.代码运行视频(哔哩哔哩) [Matlab通信]DTMF双音多频电话拨号仿真[含GUI源码 805期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...
- 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】
一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...
- 【Matlab语音分析】语音信号分析【含GUI源码 1718期】
一.代码运行视频(哔哩哔哩) [Matlab语音分析]语音信号分析[含GUI源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊,郑铁 ...
- 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】
一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...
- 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...
- 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...
- 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】
一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...
- 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】
一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...
- 【Matlab语音加密】语音信号加密解密(带面板)【含GUI源码 181期】
一.代码运行视频(哔哩哔哩) [Matlab语音加密]语音信号加密解密(带面板)[含GUI源码 181期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆 ...
- 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】
一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...
最新文章
- mysql存储引擎静态表_MySQL存储引擎(表类型)的选择
- OpenGL伽玛校正测试
- 城里城外看SSDT[转]
- P3041-[USACO12JAN]Video Game G【AC自动机,dp】
- C++统计微妙级时间消耗(chrono)
- 计算机二级c语言2021年重点内容,2021年5月计算机二级C语言试题(总)
- sendMessage 与 obtainMessage (sendToTarget)比较
- 设计psd分层素材模板|家居海报设计思路!
- 所需依赖_包揽全球75%进口!中国为何进口天量铁矿石?如何减少对澳依赖
- SQL语言概述、MySQL Workbench安装
- win10此电脑不见了_微软介绍 Win10 “重置此电脑”失败的解决方法 - 微软
- Java 对象布局、大小工具 jar包工具类jol
- Android Q共享音频输入
- 【博弈论-完全信息动态博弈】 扩展式博弈
- 现代检测技术课程实验编程:波特图分析仪原理仿真:一阶检测系统编程仿真
- java开源魂斗罗源代码_C++魂斗罗源代码
- vue v-model 双向绑定表单元素的数据:实质是绑定了value、checked、selected属性
- Handler基本使用(一) new Handler
- 片段中onCreate(),onCreateView()和onActivityCreated()的区别和用法
- 用matlab演奏周杰伦的《七里香》
热门文章
- Android实现局部图片滑动指引效果
- 关于sql server 代理(已禁用代理xp)
- Twisted中有个功能叫代理
- 深度学习caffe:激活函数
- 人工智能:模型与算法2搜索求解之启发式搜索
- 2020-08-22 每日一句
- 检测相机视野中的物体运动并用Mask显示
- 查看程序用运时占用的内存
- Atitit 圣爱提拉克斯工作最紧张的时候 11月,圣爱提拉克斯进入了一年中工作最紧张的时候。 过去,他每个月都要撰写不少文章、与不同的人愉快地交谈,教育他们沿着圣爱提拉克斯创造的世界上最伟大的圣
- Atitit webserver tomcat 7 8.0 8.5 9.0新特性 Tomcat 7 的七大新特性 - 编程语言 - ITeye资讯.html tomcat 8.0特性 - CSD