m索引OFDM调制解调系统的性能仿真分析

news2025/1/27 12:58:36

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

        随着无线通信技术的不断发展,人们对下一代移动通信系统提出了越来越高的要求。在这样的时代背景下,具有低峰均比,强频偏对抗能力和高能量效率的索引调制OFDM系统(Orthogonal Frequency Division Multiplexing with Index Modulation,OFDM-IM)逐渐引起学者们的关注。正交频分复用(orthogonalfrequencydivisionmultiplexing,ofdm)技术在第四代移动通信系统中扮演着重要的角色。它子载波之间的正交性使各个子信道所经历的衰落相对平坦,再通过引入循环前缀来降低符号间干扰,具有频谱利用率高、抗多径效应好等特点,并且快速傅里叶变换为其提供了一种简单、低成本的实现方式。

        基于索引调制的OFDM(OFDM-IM,OFDM with Index Modulation)技术被提出,在频率选择性衰落信道上提升了系统的分集增益,特别是在较低频谱效率场景下能够有效降低系统的误比特率。在OFDM-IM方法中,特殊的索引信息传输方式以及索引结构的设计对分集增益的提高,引发了广泛的关注。如何通过索引结构的设计,取得比OFDM更低的误比特率以及更高的频谱效率成为了索引调制OFDM研究方向上的热点。

        主要研究工作内容如下:

(1)针对OFDM中索引调制技术存在频谱效率较低的问题,本文提出了OFDM联合子块索引调制技术(OFDM-JS-IM,OFDM with Joint Subblock Index Modulation),将索引映射中被丢弃部分索引组合,在联合子块空间中进行了重复利用。仿真验证及理论分析表明,OFDM-JS-IM方法能够以轻微的误比特率性能损失为代价,有效提高OFDM-IM的频谱效率。

(2)针对索引结构与分集性能的关系进行了分析。由于OFDM-IM的特殊结构,索引比特的分集阶数高于一般的符号比特,使得OFDM-IM性能优于OFDM。然而,OFDM中的索引调制结构也仅仅能将部分比特的分集阶数提高至2。本文提出了OFDM全索引方法(OFDM with All Index Modulation,OFDM-AIM),不再使用低分集阶数的符号比特传输信息,而将所有信息以索引比特的方式传输,并提出了提高子块分集阶数的搜索算法,能够构建具有高分集阶数的合法子块集合。仿真结果表明,该方法能够有效提升系统的分集增益。

(3)基于上述OFDM-AIM技术,本文还提出了可变子块长度的子块设计辅助的OFDM-AIM。由于OFDM-AIM中子块长度决定了系统的最高分集阶数,因此可以适当提高子块长度以寻找更多较高分集阶数的子块,以提高分集增益。根据系统的频谱效率和计算复杂度要求,该方法能通过变化子块长度在实际应用中达到更好的性能权衡。

(4)分集阶数只是评价发射端信号的特性,而系统的误比特率性能不仅与分集阶数有关,还与不同子块符号间的欧式距离以及信道特性有关。针对该问题,本文将启发式算法中的遗传算法用于搜索具有最低误比特率的子块查找表。

        但是,在高速场景下,子信道间的正交性会受到多普勒频移的破坏而引起载波间干扰,并且ofdm多个子信道信号叠加也会导致较高的峰均比,这些缺点时ofdm不适用于高速场景。而基于索引调制的正交频分复用(ofdm-im)技术将空间调制技术与传统的正交频分复用(ofdm)技术相结合,其思想是不仅激活子载波可以传输调制信号,而且可以传输其静默子载波的位置信息,从而弥补静默子载波不发送数据造成的损失。静默子载波的存在使得多普勒频移所带来的子载波间的干扰降低,使得系统对频偏不敏感。同时,大量静默子载波的存在又降低了整个输出符号的峰均比,这些优点使得索引调制技术成为5g研究热点之一。

       OFDM-IM是一种多载波索引调制技术,其在信号的频域加入了子载波块的功能,将多个子载波组合成一个子载波块,一个子载波块作为一个调制单元。每次发送过程中,只选择子载波块中的一个或者部分子载波进行激活并发送信息,其功能类似于基于频域的空间索引调制随机数。OFDM-IM技术的基本结构如下图所示:

       OFDM-IM技术和传统的OFDM技术不同之处在于其在调制阶段,加入了索引调制步骤,根据索引调制比特信息,通过映射关系表,选择子载波进行激活并发送相应的比特数据,而未被选择的子载波则处于静默状态。这些索引调制比特数据同时补偿未被激活的静默子载波产生的频谱利用率低的问题。而在OFDM-IM接收部分,则通过子载波块的检测模块来恢复出索引信息和数据符号信息。

         如上所示,OFDM-IM调制系统主要有两种调制方式,一种是相邻分块的调制方式(如图1所示),一种是交织调制方式(如图2所示)。从图1和图2可知,基于相邻分块的调制方式,其主要通过子载波以相邻的方式进行分块划分,而基于交织分块的调制方式,其通过在频域上加入一个交织深度为G的等间隔交织器来实现分块划分。

       OFDM-IM索引调制系统相对于传统的OFDM系统而言,其最要区别在于被激活的子载波数量被降低,因此其对子载波数量相对于OFDM系统而言较为稀疏,那么其对频偏更加的不敏感。另外一方面,通过OFDM-IM索引调制技术,则可以在传统OFDM调制系统的基础上加入一个调制域,补偿未被激活的子载波带来的频谱利用率方面的损失,从而起到提高频谱利用率,提升系统误码率性能的需求。

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

 

 

3.MATLAB核心程序

 
%子块
G         = 4;  %2个子载波作为一个块
Nlen      = 15000;%数据仿真长度
Ncp       = 8;%插入CP长度
Tdat0     = floor(rand(1,Nlen*Nsub)*2);
%产生索引比特
index     = floor(rand(1,Nlen*Nsub/2)*2);
 
Tdat      = reshape(Tdat0,[1,Nlen*Nsub]); 
%Modulate,下面几行都是调制
Dat_Qam   = reshape(Tdat,2,Nlen*Nsub/2).';
Dat_Qam2  = bi2de(Dat_Qam,2,'left-msb');
Mod_Table = [-1-i -1+i 1-i 1+i];%
SymQAM    = Mod_Table(Dat_Qam2+1);
XSymQAM   = conj([reshape(SymQAM,[G,length(SymQAM)/G])]');
Xindex    = [reshape(index,[G,length(SymQAM)/G])]';
X2        = zeros(size(Xindex,1),2*size(Xindex,2));
for jj=1:size(Xindex,1)
    %选择前面4个作为索引比特
    IMtable  = Xindex(jj,:);
    S        = XSymQAM(jj,:);
    for j = 1:length(S)
        if IMtable(j) == 1
           X2(jj,2*j-1) = S(j);
           X2(jj,2*j)   = 0;
        else
           X2(jj,2*j-1) = 0;
           X2(jj,2*j)   = S(j);
        end
    end
end
X3 = [reshape(conj(X2'),[1,size(X2,1)*size(X2,2)])];
 
%IFFT变换
 
dat_ifft0= ifft(X3); 
% %Add cyclic prefix,加入循环间隔
dat_ifft1_cp3= [dat_ifft0(1:Ncp),dat_ifft0];
%上变频
ff           = 5e7;
dat_ifft1_cp3        = dat_ifft1_cp3.*exp(sqrt(-1)*2*pi*ff*([1:length(dat_ifft1_cp3)]));
 
 
% Add the AWGN,加入高斯白噪声
%channel,定一个多径信道
H_channel2   = dat_ifft1_cp3;
Ch           = [1 1/16];
H_channel3   = filter(Ch,1,H_channel2);
snr           = SNR + 10*log10(log2(2));
dat_ifft1_cp3 = awgn(H_channel2,snr,'measured');
%下变频
dat_ifft1_cp3 = dat_ifft1_cp3.*exp(-sqrt(-1)*2*pi*ff*[1:length(dat_ifft1_cp3)]);
 
%remove,删除循环间隔
dat_ifft1_cp3(1:Ncp)=[];
dat_fft1  = fft(dat_ifft1_cp3); 
dat_fft1b = conj([reshape(dat_fft1,[2*G,length(dat_fft1)/G/2])]');
%提取索引位置和数据
IMdatas=[];
IMindxs=[];
for jj=1:size(Xindex,1)
    tmps   = dat_fft1b(jj,:);
    IMdata = [];
    IMindx = [];
    for j = 1:length(tmps)/2 
        data = tmps(2*j-1:2*j);
        if abs(data(1))>=abs(data(2))%01
           IMdata(j) = [data(1)];
           IMindx(j) = [1]; 
        end
        if abs(data(1))<=abs(data(2))%10
           IMdata(j) = [data(2)];
           IMindx(j) = [0]; 
        end
    end
     
    IMdatas(jj,:)=IMdata;
    IMindxs(jj,:)=IMindx;
end
 
%Tdat0     = floor(rand(1,Nlen*Nsub)*2);
IMdatas_rec = reshape(conj(IMdatas'),[1,size(IMdatas,1)*size(IMdatas,2)]);
datarec     = zeros(size(IMdatas_rec));
for ii = 1:length(IMdatas_rec)
    Real = real(IMdatas_rec(ii));
    Imag = imag(IMdatas_rec(ii));
    if Real>0 & Imag>0
       datarec(ii)=3; 
    end
    if Real>0 & Imag<=0
       datarec(ii)=2; 
    end
    if Real<=0 & Imag>0
       datarec(ii)=1; 
    end
    if Real<=0 & Imag<=0
       datarec(ii)=0; 
    end 
end
datarec=datarec';
%index     = floor(rand(1,Nlen*Nsub/2)*2);
index_rec = reshape(IMindxs',[1,size(IMindxs,1)*size(IMindxs,2)]);%解调出索引位置信息 
01_172m

4.完整MATLAB

V

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

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

相关文章

【跟学C++】C++STL三大主要组件——容器/迭代器/算法(Study19)

文章目录1、前言2、简介2.1、STL是什么&#xff1f;2.2、STL能干什么&#xff1f;2.3、STL组成3、容器3.1、顺序容器3.2、排序容器(关联式容器)3.3、哈希容器3.4、容器适配器3、迭代器3.1、迭代器介绍3.2、迭代器定义方式3.3、迭代器类别3.4、辅助函数4、算法5、总结 【说明】…

【MATLAB教程案例60】使用matlab实现基于GRU网络的数据分类预测功能与仿真分析

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 1.软件版本 2.GRU网络理论概述

【云原生进阶之容器】第一章Docker核心技术1.5.4节——cgroups使用

4 CGroups使用 4.1 挂载cgroup树 开始使用cgroup前需要先挂载cgroup树,下面先看看如何挂载一颗cgroup树,然后再查看其根目录下生成的文件。 #准备需要的目录 #准备需要的目录 dev@ubuntu:~$ mkdir cgroup && cd cgroup dev@ubuntu:~/cgroup$ mkdir demo#由于name=…

[论文解析] Diffusion Guided Domain Adaptation of Image Generators

project link: https://styleganfusion.github.io/ 文章目录OverviewWhat problem is addressed in the paper?What is the key to the solution?What is the main contribution?IntroductionBackgroundLatent diffusion modelClassifier-free guidanceMethodModel Structur…

pytorch深度学习实战lesson36

第三十六课 锚框 因为我们在目标检测里面需要预测边缘框&#xff0c;所以给我们的预测带来了很大的问题。我们在卷积神经网络里面做图片分类的时候&#xff0c;整个代码写起来看上去非常简单&#xff0c;就是一个 soft Max 出去就完事了。但是因为有边框的加入&#xff0c;使得…

第十二期 | 万元的正版课程仅花9.9就可买到?

顶象防御云业务安全情报中心监测发现&#xff0c;某线上教育培训类平台课件遭遇大规模盗取。被盗取的课件&#xff0c;经加工处理后&#xff0c;进行低价转售&#xff0c;严重损害了平台的合法权益。 飞速发展的在线教育和看不见的风险 随着5G、视频编解码等技术融合&#xff…

DevExpress .Net Components 22.2.3 Crack

DevExpress .Net适用于 Windows、Internet 以及您的移动世界的用户界面组件 使用适用于 WinForms、WPF、ASP.NET&#xff08;WebForms、MVC 和 Core&#xff09;、Windows 10、VCL 和 JavaScript 的 DevExpress 组件&#xff0c;打造一流的用户体验并模拟最热门的企业生产力程…

产品负责人 VS 产品经理

概述 Scrum框架创造了对新角色的需求&#xff0c;其中就包括 “产品负责人” 。这不可避免额外地导致对产品负责人和产品经理角色的误解和误用&#xff0c;对团队产生不必要的压力。 角色混淆会带来噪音和摩擦&#xff0c;削弱团队对价值、质量、速度和满意度的关注。这种混乱…

让搜狗快速收录网站的方法,批量查询网站有没有被搜狗收录

让搜狗快速收录只需做到以下8点&#xff1a; 1、网页标题要与内容相关。 2、页面少用flash&#xff0c;图片等 3、将网站链接大量推送给搜狗。 4、网页尽量采用静态网页。 5、首页的外部链接不要过多。 6、搜狗更喜欢受用户欢迎的内容的网站。 7、网站不要欺骗用户。 8、网站不…

四道编程题(涉及最大公约数最小公倍数,子序列等)

tips 1. scanf当是读取整数%d的时候&#xff0c;这时候如果它读取到\n&#xff0c;它就会停止读取。并且碰到空格的时候也会跳过。 2. getchar不需要传入参数&#xff0c;读取失败的时候会返回EOF。那getchar或者scanf到底是怎么从键盘上读取我输入的字符呢&#xff1f;在getc…

VSCode入门

VSCode入门 零、文章目录 文章地址 个人博客-CSDN地址&#xff1a;https://blog.csdn.net/liyou123456789个人博客-GiteePages&#xff1a;https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee&#xff1a;https://gitee.com/bluecusliyou/TechLearnGithub&#…

[附源码]Node.js计算机毕业设计高校创新学分申报管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

微服务实用篇4-消息队列MQ

今天主要来学习异步通讯技术MQ&#xff0c;主要包括初识MQ&#xff0c;RabbitMQ快速入门&#xff0c;SpringAMQP三大部分&#xff0c;下面就来一起学习吧。路漫漫其修远兮&#xff0c;吾将上下而求索&#xff0c;继续加油吧&#xff0c;少年。 目录 一、初识MQ 1.1、同步通讯…

文件历史记录无法识别此驱动器如何修复?

案例&#xff1a; 在电脑中尝试使用内置工具文件历史记录将文件备份到另一个硬盘时&#xff0c;发现如图所示的错误“文件历史记录无法识别此驱动器”&#xff0c;这可怎么办&#xff1f; 文件历史记录驱动器断开连接的原因 文件历史记录无法识别此驱动器的原因可能是启动类型…

四种排序(选择排序、冒泡排序、快速排序和插入排序)

四种排序&#xff08;选择排序、冒泡排序、快速排序和插入排序&#xff09;选择排序&#xff1a;完整代码&#xff1a;运行结果&#xff1a;冒泡排序&#xff1a;完整代码&#xff1a;运行结果&#xff1a;插入排序&#xff1a;完整代码&#xff1a;运行结果&#xff1a;快速排…

linux 环境异常登录的甄别方法

1、关于linux的登录记录 查看最近登录IP和历史命令执行日期 last 显示的最末尾的 使用last -10 看最新的 登录IP地址 时间 still仍在登录 选项&#xff1a; &#xff08;1&#xff09;-x&#xff1a;显示系统开关机以及执行等级信息 &#xff08;2&#xff09;-a&am…

SpringSecurity[3]-自定义登录逻辑,自定义登录页面,以及认证过程的其他配置

前一篇:SpringSecurity[2]-UserDetailsService详解以及PasswordEncoder密码解析器详解 链接:SpringSecurity[2]-UserDetailsService详解以及PasswordEncoder密码解析器详解_豆虫儿的博客-CSDN博客 五、自定义登录逻辑 当进行自定义登录逻辑时需要用到之前讲解的UserDetailsS…

Java泛型的作用以及如何使用(继承、接口、方法、通配符) 附源码

&#x1f34b;1. 泛型的定义 class 类名称<泛型标识, 泛型标识, ....>{private 泛型标识 变量名称;....... } 常用的泛型标识字符 :T, E, K, V E - Element (在集合中使用&#xff0c;由于集合中存放的是元素)&#xff0c;E是对各方法中的泛型类型进行限制&#xff0c;…

【微服务技术06】Nacos注册中心

【微服务技术06】Nacos注册中心 案例代码&#xff1a;https://gitee.com/pikachu2333/spring-cloud-hexuan 安装Nacos 安装nacos&#xff1a;https://github.com/alibaba/nacos/releases 单机启动&#xff1a;sh startup.sh -m standalone 访问&#xff1a;http://127.0.0.1…

操作系统,计算机网络,数据库刷题笔记10

操作系统&#xff0c;计算机网络&#xff0c;数据库刷题笔记10 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xf…