双模式索引调制 OFDM 系统的建模、检测与性能分析(Matlab代码实现)
欢迎来到本博客❤️❤️博主优势博客内容尽量做到思维缜密逻辑清晰为了方便读者。完整资源、论文复现、期刊合作、论文辅导及科研仿真定制事宜点击本文完整资源下载⛳️座右铭行百里者半于九十。⛳️赠与读者做科研涉及到一个深在的思想系统需要科研者逻辑缜密踏实认真但是不能只是努力很多时候借力比努力更重要然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览免得骤然跌入幽暗的迷宫找不到来时的路它不足为你揭示全部问题的答案但若能解答你胸中升起的一朵朵疑云也未尝不会酿成晚霞斑斓的别一番景致万一它给你带来了一场精神世界的苦雨那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。或许雨过云收神驰的天地更清朗.......第一部分——内容介绍双模式索引调制正交频分复用系统的建模、检测与性能研究摘要随着无线通信业务对频谱效率和能量效率提出更高要求传统正交频分复用技术在资源利用方式上逐渐显现出局限。索引调制通过在子载波、天线或时隙等资源中引入“选择”这一隐式信息维度为提升系统吞吐量与误码性能提供了新的思路。本文研究一种双模式索引调制正交频分复用系统该系统将每个复用符号划分为若干子块在每个子块内同时使用两类星座符号并借助索引信息决定两类符号在子载波上的排列方式。接收端利用合法符号组合构成的码本进行块级最大似然判决再依次恢复索引信息与星座信息。本文从系统结构、比特分配、星座设计、子载波排列、复用调制、信道建模、检测准则、误码评估和复杂度等方面对该系统进行系统化论述并讨论其在加性高斯白噪声信道与瑞利衰落信道下的性能特征。研究结果表明该类系统能够在不增加额外射频资源的前提下通过双模式星座与索引排列的联合设计获得较高的信息承载能力与良好的误码表现。关键词正交频分复用索引调制双模式星座最大似然检测瑞利衰落误码率频谱效率1. 研究背景与意义现代无线通信系统面临两个长期矛盾一方面用户对高速率、低时延和高可靠传输的需求持续增长另一方面频谱资源日益紧张传统调制方式在提升频谱效率方面逐渐接近瓶颈。正交频分复用技术因其良好的抗多径能力和较高的频谱利用率被广泛应用于各类宽带通信标准。然而传统正交频分复用主要依赖星座点携带信息所有子载波通常都参与数据承载资源选择本身并未被用作信息维度。索引调制的出现改变了这一局面。其核心思想是在传统星座调制之外额外利用“哪些资源被激活”或“资源以何种方式组合”来传递信息。由于资源选择模式本身构成一个离散集合因此可以在不增加发射功率和射频链路的前提下提高系统总比特率。将索引调制与正交频分复用结合便形成了索引调制正交频分复用这一类方案。在众多索引调制方案中双模式索引调制正交频分复用具有较强代表性。与只激活部分子载波的方案不同双模式方案让所有子载波都参与发送只是不同子载波承载不同星座模式的符号。索引信息不再表示“激活哪些子载波”而表示“两类符号如何排列”。这种设计既避免了子载波闲置带来的能量浪费又保留了索引调制带来的额外信息维度。因此对该类系统进行建模、检测和性能分析具有明确的理论意义与工程参考价值。本文围绕一套完整的双模式索引调制正交频分复用仿真系统展开论述。与单纯逐行解释程序不同本文以论文方式重构其系统模型重点说明信息如何被分组、符号如何被映射、子载波如何被排列、接收端如何判决、误码如何被统计以及不同信道下系统行为有何差异。通过这种重构可以更清晰地揭示该类系统的设计逻辑与性能来源。2. 系统总体结构2.1 发射端概览发射端的主要任务是把一串随机信息比特转化为适合在信道上传输的复用符号。整个过程可以概括为以下几个阶段。第一阶段是比特分组。原始比特流首先被切分为若干等长片段每个片段对应一个复用符号。随后每个符号内的比特又被划分为若干子块每个子块对应一组子载波。第二阶段是块内比特拆分。在每个子块中比特被进一步分为三类一类用于确定两类星座符号在子载波上的排列方式另外两类分别用于确定两类星座符号的具体取值。第三阶段是星座映射。两类比特分别按照各自规则映射为两类星座点。两类星座点在复平面上具有不同结构以便接收端区分。第四阶段是子载波排列。根据索引比特所指定的模式将两类星座点放入子块内的各个子载波位置形成完整的频域子块。第五阶段是复用调制。所有子块拼接为完整频域符号经过逆变换、能量调整和循环前缀添加后形成时域发送信号。2.2 接收端概览接收端的任务与发射端相反但并非简单逆过程。其主要阶段如下。首先接收端去除循环前缀并通过正变换把时域接收信号还原到频域。若信道存在多径衰落还需进行信道均衡或把信道信息纳入检测度量。其次接收端把频域信号重新划分为若干子块并对每个子块执行块级最大似然检测。检测的依据是所有合法子块符号构成一个有限码本接收端在码本中寻找与接收向量最接近的码字。再次接收端从判决得到的码字中恢复三类比特索引比特、第一类星座比特和第二类星座比特。恢复方式依赖于两类星座在复平面上的结构差异以及索引排列与比特取值之间的对应关系。最后接收端把所有子块恢复出的比特拼接起来与原始发送比特比较统计误比特数并计算误比特率。2.3 系统特点该系统的显著特点可以归纳为三点。其一所有子载波都参与发送。与传统索引调制中部分子载波保持静默不同双模式方案让每个子载波都承载星座符号从而避免能量浪费。其二信息维度更加丰富。除了星座点本身携带信息外两类星座在子块中的排列方式也携带信息。这意味着相同数量的子载波可以承载更多比特。其三检测可以按块进行。由于每个子块内的符号组合数量有限接收端可以对每个子块独立执行最大似然检测而不必对整个符号进行联合搜索。这在一定程度上控制了检测复杂度。3. 子载波划分与信息承载3.1 子块划分方式系统把全部可用子载波划分为若干个大小相等的子块。设子载波总数为 NFFTNFFT子块数量为 gg每个子块包含 nn 个子载波则三者满足 NFFTg⋅nNFFTg⋅n。在本文所研究的配置中子载波总数为 128128子块数量为 3232因此每个子块包含 44 个子载波。在每个子块内系统选择其中一部分子载波承载第一类星座符号其余子载波承载第二类星座符号。本文所研究的配置中每子块有 22 个子载波承载第一类星座另外 22 个子载波承载第二类星座。两类星座符号数量相等结构对称便于分析与实现。3.2 每子块信息构成每个子块所承载的信息由三部分构成。第一部分是索引信息。它不决定星座点的具体位置而决定两类星座符号在子块内的排列方式。由于子块内有若干种合法排列因此索引信息可以表示若干种模式。第二部分是第一类星座信息。它决定承载第一类星座的子载波上具体发送哪一个星座点。第三部分是第二类星座信息。它决定承载第二类星座的子载波上具体发送哪一个星座点。三部分信息共同决定了子块内所有子载波的复数值。换句话说一个子块的发送内容是“排列模式”与“两类星座取值”的组合。3.3 每符号信息量每个子块携带的比特数等于索引比特数、第一类星座比特数与第二类星座比特数之和。每个复用符号携带的总比特数等于子块数量乘以每子块比特数。在本文配置下每子块携带的比特数为 1010子块数量为 3232因此每个复用符号可携带 320320 个信息比特。这一数值体现了双模式索引调制在信息承载方面的优势。4. 双模式星座设计4.1 第一类星座第一类星座由四个复数点组成它们在复平面上分布在一个不规则四边形区域内。四个点分别位于不同的实部与虚部组合位置彼此之间保持一定距离。每个星座点对应两个比特因此该星座可以携带两比特信息。第一类星座的显著特征是其实部取值集合与第二类星座不同。具体而言第一类星座点的实部只取两个特定值这两个值与第二类星座点的实部取值不重叠。这一特征为接收端区分两类符号提供了简单而有效的依据。4.2 第二类星座第二类星座同样由四个复数点组成也携带两比特信息。其四个点分布在复平面的另一片区域与第一类星座点在整体上形成互补结构。第二类星座点的实部取值集合同样只有两个值且与第一类星座点的实部取值集合互不重叠。两类星座在复平面上的相对位置经过设计使得接收端在存在噪声时仍能以较高概率正确区分符号类别。这种设计不是随意选取而是兼顾了最小距离、判决区域和实现复杂度。4.3 星座映射规则每一类星座都有一套映射规则把两比特组合映射为具体星座点。四个两比特组合分别对应四个星座点形成一一对应关系。映射规则在发射端用于把比特转为符号在接收端用于把判决符号转回比特。映射规则的设计需要考虑两方面一是星座点之间的距离距离越大抗噪能力越强二是映射关系与索引模式的配合使接收端能够利用实部差异快速完成类别判决。4.4 类别判据由于两类星座的实部取值集合互不重叠接收端可以仅根据接收符号的实部落在哪个集合中判断该符号属于第一类还是第二类。这一判据虽然简单但在信噪比较高时非常有效。对于噪声较大的情况块级最大似然检测会进一步纠正类别判决错误。5. 索引排列与子载波分配5.1 索引比特的作用索引比特不改变星座点的具体取值只改变两类星座点在子块内的排列顺序。由于子块内有多个位置而两类星座各占若干个位置因此不同排列方式构成一个离散集合。索引比特的作用就是从该集合中选择一种排列。在本文配置中每子块有四个子载波位置其中两个位置放第一类星座两个位置放第二类星座。索引比特共有两位因此可以表示四种排列模式。四种模式分别对应两类符号在四个位置上的不同交错方式。5.2 排列模式四种排列模式可以理解为第一类符号占据的位置组合不同第二类符号相应占据剩余位置。每种模式都保证第一类符号出现两次、第二类符号出现两次。排列模式的设计使得接收端在检测时可以利用位置信息恢复索引比特。5.3 子块频域向量按照索引比特选定排列模式并把两类星座点放入对应位置后每个子块形成一个包含四个复数的频域向量。所有子块的频域向量按顺序拼接构成整个复用符号的频域表示。该频域表示随后进入复用调制阶段。6. 复用调制与发送信号形成6.1 频域到频域的预处理在进入逆变换之前频域符号需要经过中心化处理使零频分量位于数组中心。这一处理与后续逆变换配合保证时域信号具有正确的频谱结构。6.2 逆变换中心化后的频域符号经过逆变换从频域转换到时域。逆变换输出的时域信号长度等于子载波总数。为了保持变换前后能量关系逆变换过程中会引入与子载波总数相关的尺度因子。6.3 能量归一化逆变换后的时域信号能量可能随星座取值和排列模式变化。为保证不同符号具有相近的平均发射功率系统对时域信号进行归一化。归一化因子由时域信号的平均功率决定。归一化后每个复用符号的平均能量被调整到统一水平。在部分仿真中能量归一化在频域完成即在逆变换之前对频域符号进行缩放。两种做法在效果上等价区别只在于实现位置不同。6.4 循环前缀为抵抗多径信道引起的符号间干扰系统在时域符号前添加循环前缀。循环前缀的内容是时域符号末尾若干样点的复制。添加循环前缀后发送信号长度增加但接收端可以通过去除循环前缀来消除部分多径影响。循环前缀长度是一个重要参数。长度越大抗多径能力越强但频谱效率越低。本文在不同仿真中采用不同循环前缀长度在加性高斯白噪声和瑞利衰落仿真中采用一定长度循环前缀在无噪声验证中则可不加循环前缀。6.5 发送信号经过上述步骤系统最终形成时域发送信号。该信号包含所有子块的信息并已添加循环前缀。发送信号进入信道后会受到噪声或衰落的影响。7. 信道模型7.1 加性高斯白噪声信道加性高斯白噪声信道是最基本的信道模型。在该信道下接收信号等于发送信号乘以一个尺度因子后再叠加复高斯噪声。噪声的实部和虚部相互独立均服从零均值高斯分布方差由目标信噪比决定。加性高斯白噪声信道主要用于评估系统在理想传播条件下的性能。由于不存在多径和衰落接收端无需进行信道估计或均衡检测相对简单。该信道下的误码率曲线可以反映系统本身的抗噪能力。7.2 瑞利衰落信道瑞利衰落信道用于模拟多径传播环境。在该信道下发送信号经过多条路径到达接收端各路径具有不同时延和复增益。各路径增益的实部和虚部均服从高斯分布因此合成信号的包络服从瑞利分布。在频域上瑞利信道表现为每个子载波经历不同的复衰落系数。这意味着接收端不能简单地把所有子载波同等对待而需要知道或估计各子载波的信道响应。若采用最大似然检测则检测度量中需要包含信道系数若采用迫零均衡则先把接收信号除以信道响应再按无衰落情形检测。瑞利信道下的性能通常明显低于加性高斯白噪声信道。这是因为深衰落会显著降低某些子载波的信噪比导致这些子载波上的符号容易判错。索引调制在一定程度上可以缓解这一问题因为索引比特对幅度衰落不如星座比特敏感。7.3 信噪比换算在仿真中横轴通常采用每比特信噪比。然而接收端实际感受到的是每符号信噪比或每子载波信噪比。因此需要在两者之间进行换算。换算关系取决于星座平均能量、子载波数量、循环前缀开销和频谱效率。在瑞利衰落仿真中还需考虑循环前缀带来的频谱效率损失。频谱效率等于每符号信息比特数除以包含循环前缀的总长度。根据频谱效率和循环前缀比例可以把每比特信噪比转换为每符号信噪比从而确定噪声方差。8. 接收端处理8.1 去除循环前缀与频域变换接收端首先去除循环前缀得到有效时域符号。随后对有效时域符号进行正变换得到频域接收信号。若信道为瑞利衰落频域接收信号中每个子载波都乘以对应的信道频域响应。8.2 子块重组频域接收信号按顺序被重新划分为若干子块每个子块长度与发送端子块长度相同。后续检测按子块独立进行。8.3 信道均衡在瑞利衰落信道下若采用迫零均衡则把每个子载波的接收值除以其信道频域响应。这样可以在一定程度上抵消信道影响使接收信号接近无衰落情形。但迫零均衡在深衰落子载波上会放大噪声因此性能未必最优。若不采用迫零均衡则直接把信道频域响应纳入最大似然检测度量。此时检测器在比较码字时会把每个码字符号乘以对应子载波的信道响应再与接收值比较。这种方法性能更优但需要准确的信道信息。8.4 块级最大似然检测块级最大似然检测的核心思想是所有合法子块符号构成一个有限码本接收端在码本中寻找与接收向量最接近的码字。接近程度用欧氏距离衡量。欧氏距离越小说明该码字与接收向量越相似越可能是发送码字。在加性高斯白噪声信道或迫零均衡后检测度量直接比较接收向量与码字向量。在瑞利衰落信道且不采用迫零均衡时检测度量需要把信道响应计入码字即比较接收向量与“信道加权后的码字”。由于码本大小有限块级最大似然检测可以通过遍历码本实现。对于每个子块检测器计算接收向量与所有码字之间的距离选择距离最小的码字作为判决结果。8.5 检测复杂度块级最大似然检测的复杂度与码本大小、子块数量和子块长度有关。码本越大检测越复杂子块越多总计算量越大。在本文配置中码本包含所有合法排列与两类星座取值的组合数量较多但由于子块长度仅为四单次距离计算并不复杂。整体复杂度在仿真中是可以接受的。若要在实际系统中降低复杂度可以采用多种策略。例如利用两类星座实部不重叠的特性先做类别预判决再在缩小的候选集合中搜索。也可以采用球形译码、子集搜索或查表法减少需要比较的码字数量。此外还可以利用子块之间的独立性对子块检测进行并行处理。9. 比特恢复9.1 索引比特恢复索引比特的恢复依赖于两类星座在子块中的排列模式。接收端在完成块级检测后得到判决码字。该码字中每个符号属于第一类或第二类星座。根据每个位置上的符号类别接收端可以确定排列模式再根据排列模式与索引比特的对应关系恢复索引比特。由于两类星座实部集合不重叠类别判决可以仅依据实部完成。在高信噪比下这一判决非常可靠在低信噪比下块级最大似然检测已经在一定程度上纠正了类别错误因此索引比特恢复仍具有较好性能。9.2 第一类星座比特恢复对于判决码字中属于第一类星座的符号接收端按照第一类星座映射规则的逆映射把每个符号转回两比特。由于第一类星座有四个点每个点对应一个两比特组合逆映射是一一对应的。9.3 第二类星座比特恢复对于判决码字中属于第二类星座的符号接收端按照第二类星座映射规则的逆映射把每个符号转回两比特。第二类星座同样有四个点逆映射也是一一对应的。9.4 比特拼接接收端把每个子块恢复出的索引比特、第一类星座比特和第二类星座比特按发送端顺序拼接得到该子块的估计比特。所有子块的估计比特再按顺序拼接得到整个复用符号的估计比特序列。10. 误码性能评估10.1 误比特率定义误比特率是衡量系统可靠性的基本指标。其定义为接收端判决错误的比特数占总发送比特数的比例。在仿真中发送端生成随机比特序列接收端输出估计比特序列两者逐位比较统计不同比特的数量再除以总比特数即得误比特率。误比特率通常随信噪比增加而下降。在低信噪比区域噪声或衰落导致检测错误较多误比特率较高在高信噪比区域检测错误减少误比特率迅速下降。10.2 仿真流程误码性能评估通常按以下流程进行。首先设定一组信噪比取值。对每个信噪比生成若干复用符号的随机比特。然后按照发送端流程生成发送信号经过信道后得到接收信号。接收端按照检测与比特恢复流程得到估计比特。最后统计误比特数并计算误比特率。把所有信噪比下的误比特率连接起来即得误码率曲线。在瑞利衰落仿真中每个符号或每个子载波的信道响应可能不同。因此需要在每个信噪比下生成相应的信道实现并在接收端使用相同信道信息进行检测或均衡。10.3 频谱效率频谱效率表示单位带宽内可传输的信息比特数。在考虑循环前缀开销时频谱效率等于每符号信息比特数除以包含循环前缀的总长度。循环前缀越长频谱效率越低每符号信息比特数越大频谱效率越高。双模式索引调制通过索引排列携带额外信息因此每符号信息比特数高于传统方案。这使其在相同子载波数量和循环前缀长度下具有更高的频谱效率。然而索引调制也带来检测复杂度上升和码本设计问题因此需要在频谱效率与实现复杂度之间进行折中。11. 结果讨论与性能分析11.1 加性高斯白噪声信道下的表现在加性高斯白噪声信道下系统性能主要受噪声影响。由于不存在衰落接收端无需信道估计检测相对简单。误码率曲线随信噪比增加而单调下降。在中高信噪比区域块级最大似然检测能够较好地恢复发送码字误比特率较低。索引比特在该信道下通常比星座比特更稳健。这是因为索引比特只依赖两类符号的排列模式而排列模式的区分主要依赖实部类别受噪声影响相对较小。星座比特则需要区分同一类星座内的不同点这些点之间距离较近因此更容易受噪声影响。11.2 瑞利衰落信道下的表现在瑞利衰落信道下系统性能明显下降。深衰落子载波上的接收信噪比很低容易导致符号判决错误。若采用迫零均衡深衰落子载波上的噪声会被放大进一步恶化性能。若采用把信道信息纳入度量的最大似然检测则可以在一定程度上缓解这一问题但需要准确的信道信息。瑞利信道下索引比特仍表现出一定鲁棒性。这是因为索引比特主要依赖两类符号的类别差异而类别差异由实部集合决定不依赖幅度。即使某些子载波经历深衰落只要类别信息未被完全破坏索引比特仍可能正确恢复。11.3 与单模式方案的比较与传统单模式正交频分复用相比双模式索引调制在相同子载波数量下可以携带更多比特。这是因为索引排列提供了额外信息维度。然而这种增益并非没有代价。双模式方案需要更复杂的检测器因为接收端需要在更大的码本中搜索。此外两类星座的设计需要兼顾类别区分与星座点距离设计难度更高。与只激活部分子载波的索引调制方案相比双模式方案避免了子载波闲置因此能量效率更高。所有子载波都参与发送使得发送功率得到更充分利用。但双模式方案的检测复杂度通常更高因为码本包含两类星座的所有组合。11.4 参数配置的影响系统性能与多个参数有关。子块长度 nn 越大每子块可携带的索引比特越多但码本也越大检测越复杂。每子块承载第一类星座的子载波数 kk 越大第一类星座比特占比越高第二类星座比特占比越低。两类星座的大小 MaMa 和 MbMb 决定每符号携带的星座比特数也影响星座点之间的距离和抗噪能力。循环前缀长度影响频谱效率与抗多径能力。循环前缀越长抗多径能力越强但频谱效率越低。在实际系统中需要根据信道时延扩展选择合适的循环前缀长度。12. 系统优势与局限12.1 主要优势双模式索引调制正交频分复用系统具有以下优势。第一信息承载能力较强。索引排列与两类星座共同承载信息使每符号比特数高于传统方案。第二所有子载波都参与发送。与部分激活方案相比避免了能量浪费提高了功率利用率。第三检测可以按块进行。每个子块独立检测便于并行实现也便于分析单块错误概率。第四索引比特对幅度衰落不敏感。在衰落信道下索引比特通常比星座比特更稳健有助于改善整体误码性能。12.2 主要局限该系统也存在一些局限。第一检测复杂度较高。码本大小随子块长度和星座大小迅速增长块级最大似然检测需要遍历码本计算量较大。第二星座设计难度较高。两类星座需要同时满足类别可区分性和星座点距离要求设计空间复杂。第三对信道信息依赖较强。在瑞利衰落信道下若采用把信道信息纳入度量的检测方法需要准确的信道估计若采用迫零均衡则会放大噪声。第四同步与峰均比问题仍然存在。作为正交频分复用系统该系统同样面临定时同步、频率同步和峰均比等传统问题。13. 可能的改进方向针对上述局限可以从多个方向改进。在检测方面可以引入低复杂度检测算法。例如利用两类星座实部不重叠的特性先做类别预判决缩小候选码字集合再在缩小后的集合中搜索。也可以采用球形译码或列表检测在性能损失较小的情况下降低复杂度。在星座设计方面可以以最小距离最大化为目标优化两类星座点的位置。也可以采用非均匀星座使星座点在复平面上分布更合理从而提升抗噪能力。在信道估计方面可以研究信道估计误差对系统性能的影响并设计对估计误差鲁棒的检测算法。也可以采用迭代检测与信道估计联合处理提高整体性能。在编码方面可以把索引调制与信道编码结合利用编码增益进一步提升误码性能。例如对索引比特和星座比特分别采用不同码率的编码或采用联合编码方案。在资源分配方面可以根据信道状态自适应选择子块长度、两类星座比例和循环前缀长度从而在频谱效率与可靠性之间取得更优折中。14. 结论本文对双模式索引调制正交频分复用系统进行了系统化论述。该系统通过把每个复用符号划分为若干子块在每个子块内同时使用两类星座符号并利用索引信息决定两类符号的排列方式从而在传统星座调制之外引入额外的信息维度。接收端采用块级最大似然检测在合法码本中搜索最优码字再恢复索引比特与两类星座比特。本文从系统结构、比特分配、星座设计、子载波排列、复用调制、信道建模、检测准则、误码评估、复杂度和改进方向等方面进行了详细讨论。分析表明该类系统在信息承载能力、能量效率和索引比特鲁棒性方面具有优势但同时也面临检测复杂度高、星座设计难和对信道信息依赖强等挑战。在加性高斯白噪声信道下系统性能随信噪比增加而稳步改善在瑞利衰落信道下系统性能受深衰落影响明显但索引比特仍表现出一定鲁棒性。通过低复杂度检测、优化星座设计、联合信道估计与编码等方法可以进一步提升该类系统的实用价值。未来工作可以从以下几个方向展开一是推导成对错误概率与误码率上界为系统设计提供理论依据二是比较不同检测算法在复杂度与性能之间的折中三是研究信道估计误差、同步误差和峰均比等因素对系统的影响四是探索将该系统与多天线、多用户和编码调制技术结合的可能性。第二部分——运行结果部分代码clear all; % 清除工作区中的所有变量避免旧数据干扰本次仿真close all; % 关闭所有已打开的图形窗口clc; % 清空命令行窗口使输出更清晰load(DM_OFDM_ML_tablosu.mat); % 载入预先计算好的合法符号码本变量名为 crit% crit 的每一行是一个合法的子块符号向量% 码本由 olasi_semboller_yeni.m 生成olabilir zeros(1,length(crit)); % 预分配“候选度量”数组用于存放接收向量与各码字的距离% 长度等于码本大小即合法子块符号的总数%% 系统参数设置 cyclic_prefix 16; % 循环前缀长度用于对抗多径引起的符号间干扰nFFTSize 128; % OFDM 子载波总数即 FFT 长度g 32; % 每个 OFDM 符号划分的子块数量n nFFTSize/g; % 每个子块包含的子载波数此处 n 128/32 4k n/2; % 每个子块中承载第一类星座 A 的子载波数此处 k 2% 计算每个子块的索引比特数 g1% 索引比特用于表示 n 个子载波中选 k 个承载 A 星座的组合数% 组合数为 C(n,k)取以 2 为底的对数后向下取整g1 floor(log2( faktoriyel(n)/(faktoriyel(n-k)*faktoriyel(k)) ));Ma n; % 第一类星座 A 的大小此处 Ma 4Mb n; % 第二类星座 B 的大小此处 Mb 4% 计算每个子块的星座比特数 g2% 其中 k 个子载波承载 A 星座每个 A 符号携带 log2(Ma) 比特% 其余 n-k 个子载波承载 B 星座每个 B 符号携带 log2(Mb) 比特g2 k*log2(Ma) ((n-k)*log2(Mb));% 每个子块承载的总比特数 索引比特 星座比特nBitPerSymbol g1 g2;% 每个 OFDM 符号承载的总信息比特数 子块数 × 每子块比特数m nBitPerSymbol*g;nSym 10^2; % 每个信噪比下仿真的 OFDM 符号数量nTap 10; % 瑞利信道的多径抽头数量%% 发送端变量预分配 g1_grubu zeros(g,g1); % 存放每个子块的索引比特Ma_grubu zeros(g,(g2/2)); % 存放每个子块中 A 星座对应的比特Mb_grubu zeros(g,(g2/2)); % 存放每个子块中 B 星座对应的比特temp_tx_ilk2 zeros(1,2); % 发送端临时变量A 星座的前两个比特temp_tx_son2 zeros(1,2); % 发送端临时变量A 星座的后两个比特Ma_harita zeros(nSym,2); % 存放 A 星座映射后的符号Mb_harita zeros(nSym,2); % 存放 B 星座映射后的符号xF zeros(nSym,nFFTSize); % 存放每个 OFDM 符号的频域发送信号xT zeros(nSym,nFFTSize); % 存放每个 OFDM 符号的时域发送信号% 存放经过瑞利信道卷积后的时域信号% 长度 FFT 长度 循环前缀长度 信道抽头数 - 1xhT zeros(nSym,(nFFTSizecyclic_prefixnTap-1));yF zeros(nSym,m); % 存放接收端每个符号恢复出的比特yF_1D zeros(1,nSym*m); % 把 yF 展平成一维比特序列demod zeros(nSym,m); % 存放解调后的比特temp_alici zeros(g,n); % 接收端临时变量按子块重组的接收符号g1_alinan zeros(g,k); % 接收端恢复出的索引比特Ma_alinan zeros(g,n); % 接收端恢复出的 A 星座比特Mb_alinan zeros(g,n); % 接收端恢复出的 B 星座比特%% 信噪比与频谱效率 % 频谱效率 每符号信息比特数 / (FFT 长度 循环前缀长度)SE m/(cyclic_prefix nFFTSize);Eb 0:5:30; % 每比特信噪比 Eb/N0 的取值单位 dB% 将 Eb/N0 换算为 Es/N0% 换算包含三部分% 1) 循环前缀带来的频谱效率损失nFFTSize/(nFFTSizecyclic_prefix)% 2) 频谱效率 SE% 3) 每符号与每比特的能量关系EsN0dB Eb 10*log10(nFFTSize/(nFFTSizecyclic_prefix)) 10*log10(SE);nErr zeros(1,length(Eb)); % 每个信噪比下的误比特数simBer zeros(1,length(Eb)); % 每个信噪比下的误比特率%% 主循环遍历每个信噪比 for cc 1:length(Eb)% 生成当前信噪比下的随机信息比特bilgi randi([0 1],1,(nSym*m));% 把比特序列按每符号 m 比特重塑为 nSym 行bilgi_grup reshape(bilgi.,m,nSym).;%% ---------- 发送端逐符号处理 ----------for aa 1:nSym% 把当前符号的比特重塑为 g 个子块每子块 nBitPerSymbol 比特temp_verici1 reshape(bilgi_grup(aa,:),nBitPerSymbol,g).;% 比特拆分把每子块比特分成索引比特、A 星座比特、B 星座比特% 1~2 比特为索引比特3~6 比特为 A 星座比特7~10 比特为 B 星座比特[g1_grubu,Ma_grubu,Mb_grubu] bit_ayirma(temp_verici1,n,g1,g2,nBitPerSymbol,g);% A 星座映射把 A 星座比特映射为 A 星座符号Ma_harita Ma_haritalama(Ma_grubu,temp_tx_ilk2,temp_tx_son2,g);% B 星座映射把 B 星座比特映射为 B 星座符号Mb_harita Mb_haritalama(Mb_grubu,temp_tx_ilk2,temp_tx_son2,g);% 子载波排列根据索引比特把 A、B 符号放入 4 个子载波位置temp_verici_2 yerlestirme(Ma_harita,Mb_harita,g1_grubu,g,n);% 把 32×4 的子块矩阵展平为 1×128 的频域向量temp_verici_2 reshape(temp_verici_2.,1,[]);% 存入频域发送信号矩阵xF(aa,:) temp_verici_2;% OFDM 调制fftshift IFFT得到时域发送信号xT(aa,:) (nFFTSize/sqrt(nFFTSize))*ifft(fftshift(xF(aa,:)),nFFTSize);% 计算时域信号的归一化因子使平均功率为 1olcek(aa,1) sqrt(mean(abs(xT(aa,:)).^2));% 对时域信号做能量归一化xT(aa,:) xT(aa,:)./olcek(aa,1);end% 添加循环前缀把每个符号时域末尾的 16 个样点复制到最前面xT_cyclic [xT(:,(nFFTSize-cyclic_prefix1):(nFFTSize)) xT];%% ---------- 瑞利信道 ----------% 生成瑞利信道时域抽头 ht 和频域响应 hF[ht,hF] Ray_kanal(nFFTSize,nSym,nTap);% 对每个符号做时域卷积模拟多径传播for aa 1:nSymxhT(aa,:) conv(xT_cyclic(aa,:),ht(aa,:));end% 把卷积后的信号展平成一维发送序列xT_1D reshape(xhT.,1,[]);%% ---------- 添加噪声 ----------snr EsN0dB(cc); % 当前信噪比单位 dB% 计算有效信号长度boyut nSym*(cyclic_prefixnFFTSize);% 计算噪声标准差% 这里 sigma 的表达式考虑了每比特能量与总发送能量的关系sigma sqrt((boyut/(nSym*m))/(10^(snr/10)));% 生成复高斯噪声实部和虚部独立均服从零均值高斯分布nt sqrt(1/2)*(sigma).*(randn(1,length(xT_1D)) 1i*randn(1,length(xT_1D)));% 接收信号 尺度调整后的发送信号 噪声outputIFFT sqrt((nFFTSizecyclic_prefix)/nFFTSize)*xT_1D nt;%% ---------- 接收端 ----------% 把一维接收序列重塑为 (FFT 长度 循环前缀 抽头数 - 1) × nSymrx_signal reshape(outputIFFT,(nFFTSizecyclic_prefixnTap-1),nSym).;% 去除循环前缀保留第 cyclic_prefix1 到 nFFTSizecyclic_prefix 个样点rx_signal rx_signal(:,(cyclic_prefix1:nFFTSizecyclic_prefix));% 对每个符号做 FFT恢复频域信号并补偿发送端归一化因子for aa 1:nSymrx_signal(aa,:) (sqrt(nFFTSize)/nFFTSize)*fftshift(fft(rx_signal(aa,:),nFFTSize));rx_signal(aa,:) rx_signal(aa,:).*olcek(aa,1);% 注意此处没有做迫零均衡而是把信道响应放入 ML 检测度量中end%% ---------- 逐符号检测 ----------for aa 1:nSym% 把当前符号的频域接收信号按子块重组为 g×n 矩阵temp_alici reshape(rx_signal(aa,:),n,g).;% 把当前符号的频域信道响应也按子块重组为 g×n 矩阵hF_bloklari reshape(hF(aa,:).,n,g).;% 对每个子块执行块级最大似然检测for a 1:g% 遍历码本中的所有合法码字for j 1:length(crit)% 计算接收子块与“信道加权后的码字”之间的欧氏距离% 这里把信道频域响应逐元素乘到码字上再与接收向量比较olabilir(j) sum(abs(temp_alici(a,:)-hF_bloklari(a,:).*crit(j,:)).^2,2);% 若距离为 0说明完全匹配提前退出循环if olabilir(j)0break;endend% 找到最小距离对应的码字索引[PP,I] min(olabilir);% 取出最小距离对应的码字h I(1,1);temp_alici(a,:) crit(h,:);end% 从判决码字中恢复索引比特g1_alinan g1_demodulation(temp_alici,g,k,n);% 从判决码字中恢复 A 星座比特Ma_alinan Ma_demodulation(temp_alici,g,n);% 从判决码字中恢复 B 星座比特Mb_alinan Mb_demodulation(temp_alici,g,n);% 把三类比特按发送端顺序拼接demod [g1_alinan Ma_alinan Mb_alinan];% 存入接收比特矩阵yF(aa,:) reshape(demod.,1,[]);end% 把接收比特矩阵展平为一维序列yF_1D reshape(yF.,1,[]);% 统计误比特数nErr(cc) size(find(bilgi-yF_1D),2);% 计算误比特率simBer(cc) nErr(cc)/(nSym*m);end%% 绘图与结果对比 % 参考文献中的 DM-OFDM-IM 误码率结果DMOFDM_IM_makale [0.15 0.07 0.025 0.007 2*1e-3 5e-4 0.15*1e-3];% 绘制本仿真得到的误码率曲线figure,semilogy(Eb,simBer,--s),grid,hold on% 绘制参考文献中的误码率曲线semilogy(0:5:30,DMOFDM_IM_makale,--rx),% 设置坐标轴范围axis([0 30 10^-4 1])grid on% 添加图例、坐标轴标签legend(Benzetim,Makale Sonucu [6]);xlabel( Eb/No, dB )ylabel( Bit Error Rate )% title( BER for new constellation DM-OFDM-IM )第三部分——参考文献文章中一些内容引自网络会注明出处或引用为参考文献难免有未尽之处如有不妥请随时联系删除。(文章内容仅供参考具体效果以运行结果为准)第四部分——本文完整资源下载资料获取更多粉丝福利MATLAB|Simulink|Python|数据|文档等完整资源获取本文完整资源下载