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

第【10】期---基于恒模算法(CMA)降低MIMO-OFDM/A系统的峰均比-Maltab完整代码+参考文章

文章目录

    • 摘要
    • 1 研究背景
    • 2. 系统模型
    • 1. 整体结构
    • 2. 资源块的内部构成
    • 3. 从数据到发射信号的处理步骤
    • 3 求解算法
      • 3.1 问题重构
      • 3.2 迭代算法
    • 4 仿真分析
  • 仿真参数表
    • 4 总结
    • 仿真图所见即所得,完整代码见vx公众号

摘要

本项目针对MIMO-OFDM系统高峰均比问题,提出了一种基于恒模算法(CMA)的预编码方案。通过将PAPR最小化转化为输出信号模平方与平均功率偏差最小化问题,并利用Khatri-Rao积构造数据矩阵,采用最速下降CMA迭代优化每个资源块的预编码权重,使时域信号逼近恒模。为进一步避免误码率恶化,引入单位圆约束,每次迭代后将权重视一化到单位圆上,仿真证明了该算法的有效性。

1 研究背景

  • 正交频分复用(OFDM)是现代宽带无线通信系统的核心波形技术,被广泛应用于第四代(4G)和第五代(5G)移动通信系统、无线局域网(WLAN,如802.11a/g/n/ac/ax标准)、WiMAX宽带无线接入系统以及数字广播等领域。OFDM之所以获得如此广泛的应用,根本原因在于其独特的技术优势:它将高速数据流分解为多个并行的低速子数据流,分别调制到相互正交的子载波上传输,从而能够有效对抗频率选择性衰落信道带来的多径效应和符号间干扰(ISI)。

  • 然而,OFDM技术的一个公认且长期存在的关键缺陷是:其发射信号具有很高的峰均比(PAPR)。PAPR问题的根源在于OFDM信号在时域的叠加效应——当多个子载波的调制信号在某个时刻相位一致时,它们的幅值会叠加形成一个幅度远高于平均水平的峰值。这种高峰值使得OFDM信号特别容易受到发射端功率放大器(PA)非线性的影响。为维持线性放大以避免信号失真,高PAPR信号迫使功率放大器工作在远低于其饱和功率的"功率回退"区域,导致放大器的效率显著降低、功耗增加

  • 现有PAPR降低技术(如部分传输序列PTS、选择映射SLM):

  • PTS的基本原理是将输入数据块分割为多个互不重叠的子块,每个子块独立进行IFFT变换后乘以一个相位旋转因子,再通过加权求和得到最终的时域信号,从中选择PAPR最小的一组相位因子进行传输。然而,PTS技术面临的根本困境在于:寻找最优相位因子的过程需要对所有可能的组合进行穷尽搜索,其计算复杂度随子块数M呈指数增长。

  • SLM技术通过使用多组不同的相位序列对同一数据块进行加扰,生成多个表征序列,从中选取PAPR最低的一个进行传输。该方法需要执行与相位序列数量相同次数的IFFT运算,并且必须将所选用的相位序列作为边信息发送给接收端以便解调,这就带来了额外的频谱开销。

  • 本文将PAPR最小化这一非凸优化问题重新表述为最终时域信号的模尽可能恒定的问题。

2. 系统模型


图1展示了在基站侧,一个OFDM符号块从频域数据到时域发射信号的完整构造过程,其主要内容可以概括为:

1. 整体结构

  • 一个OFDM符号块在频域上由多个资源块(RB)组成。
  • 每个资源块包含若干连续的子载波,资源块之间相互独立。

2. 资源块的内部构成

  • 每个资源块中同时包含:
    • 数据子载波– 用于传输用户信息。
    • 导频子载波– 用于接收端进行信道估计。

3. 从数据到发射信号的处理步骤

  • ① 每个资源块的数据先经过波束赋形处理(乘以波束赋形矩阵),形成空间预编码后的频域信号。
  • ② 所有资源块连同两侧的保护频带(零能量子载波)一起组合成一个完整的OFDM频域符号。
  • ③ 对该频域符号进行逆傅里叶变换(IFFT),将其变换到时域。
  • ④ 最终得到各根发射天线上实际发送的OFDM时域波形。

图2展示了经过波束成形处理后,MIMO‑OFDM系统在频域上的数据组织方式

  • 数据矩阵是一个块对角矩阵,即矩阵中只有沿着主对角线的若干小块内有非零数据,其余位置全部为零。
  • 每个对角小块对应一个资源块(RB)的频域数据,包含该资源块内所有子载波上所有发射天线的符号
  • 保护频带的存在使得矩阵中存在大块的零区域,这是OFDM系统的典型特征。

MIMO‑OFDM系统中一个OFDM符号块的PAPR的计算方式如下


显然当当信号为恒模信号时,PAPR达到最低,因为此时信号的即峰值幅度等于序列的平均功率。

然后,降低PAPR的问题可以转换为

该问题是非凸的。

3 求解算法

3.1 问题重构

利用 Kronecker 积和矩阵计算,原始问题可以转换为

将问题变成找一个 ω,使得 Aω 的各个元素尽可能接近恒模。

然后用整个信号序列与理想恒模信号的平均偏离程度来代替峰值功率,定义了一个代价函数:计算每个采样点的模平方与 α 的差的平方,再对所有采样点求和。这个和越小,说明信号越接近恒模:

通过这种重构,原本难以直接求解的PAPR优化问题变成了一个可以用标准梯度下降法迭代求解的问题。

3.2 迭代算法


  • 每次迭代都利用全部数据矩阵A(而不是逐个样点更新),逐步调整权重 ω,使输出信号s = Aω越来越接近恒模
  • 在每一次迭代中,算法依次执行以下操作:
  • 计算当前输出:用当前的权重 ω 与数据矩阵A相乘,得到当前步的输出信号向量s
  • 计算误差:将s每个元素的模平方与目标平均功率 α 相减,得到误差向量e。误差越大,说明该采样点偏离恒模越远。
  • 更新权重:根据误差的大小和方向,沿着使代价函数下降最快的方向(即负梯度方向)调整 ω。调整的步长由参数 μ 控制。
  • 单位圆约束: 通过对权重的单位模约束,消除了预编码权重 ω过低对 BER 的负面影响。

4 仿真分析

仿真参数表

参数类别参数名称默认值说明
系统基础发射天线数2MIMO 天线数量
FFT 大小1024OFDM 子载波总数(含保护带)
有用子载波数840实际传输数据的子载波数
左保护子载波数93低频侧保护带宽度
右保护子载波数91高频侧保护带宽度
总簇数(资源块数)60每个 OFDM 符号中的资源块数量
每簇子载波数14每个资源块包含的子载波数
调制方式QPSK星座映射方式
时域/OFDMOFDM 符号数(每个簇)1
每簇导频数2每个资源块内的导频子载波数
总导频数120所有资源块的导频总数
PAPR相关PAPR 阈值4 dB超过此值才执行优化
仿真实现次数10随机生成的 OFDM 块数量
CMA算法最大迭代次数50UC‑CMA 迭代次数
步长(UC‑CMA)0.02UC‑CMA 的原始步长
初始权重向量(UC‑CMA)随机 ±1每个元素随机取 +1 或 -1
波束成形波束成形矩阵类型随机正交矩阵每个资源块独立生成Mt×Mt正交矩阵

  • 目标函数值 = 当前输出信号瞬时功率偏离目标平均功率的总偏差,它直接反映了信号接近恒模的程度,进而对应 PAPR 的高低。
  • 算法梯度下降更新规则能有效降低目标函数值,表明预编码权重逐步使输出信号逼近恒模。
  • 约20次迭代已获得大部分增益,50次迭代后误差接近最小值。
  • 预编码后的PAPR在所有概率水平上均低于原始信号,表明该方法能有效降低MIMO-OFDM系统的PAPR。

    部分代码:
clearall;close all;clc;%------------------ 定义参数和算法 ----------------- % 默认设置为 WiMAX 系统,OFDM 块大小1024,60 个簇,每个簇包含14个子载波。Mt=2;% 发射天线数量 % 缩放因子,用于改变每个 OFDM 块的子载波数 % 为方便 FFT 计算,保持 N 为2的因数scalfac=1;N=1024*scalfac;% FFT 大小Nuseful=840*scalfac;% 有用子载波数(除去保护带)lGuard=ceil(93*scalfac);% 左保护子载波数 % 整个 OFDM 符号中的总簇数Cluster_N=60*scalfac;M=Cluster_N;Nb=(Nuseful/Cluster_N);% 每个簇中的子载波数Oversampling=1;% 过采样因子Nsym=1;% 一个簇跨越 Nsym 个 OFDM 符号,此处仅支持1Npilot=2*Nsym;% 一个簇中的导频数Nreal=10;% 仿真的实现次数(OFDM 块数) % 一个不连续块中的簇数(允许整数个簇)RB_in_disjoint_block=(Nuseful/M)/Nb;% N 个子载波中的导频子载波总数Npilot_tot=Npilot*(Cluster_N);% 仅对那些超过阈值的 OFDM 符号执行 PAPR 降低处理threshold=4;% dBModulation='QPSK';% 调制方式 % 优化方法('UnitCircle''BlockCma'Optimization_method='BlockCma';%------------------------------------------------------------ % 整个 OFDM 符号中的导频位置ifNsym==2Position=ceil([59;114].*scalfac);elsePosition=ceil([59].*scalfac);endNpilot_position=zeros(Nsym,Cluster_N*length(Position));fork=0:Cluster_N-1 % 一个 Nsym*Ncluster 大小的簇中的导频符号位置 Npilot_position(:,(2*k+1):2*(k+1))=Position+k*(Nb);endNpilot_position=Npilot_position+(lGuard-1);% 生成信号星座图(64QAM, 16QAM, QPSK)const_perm=nchoosek((1)*[1-11j-1j],2);%挑选实部和虚部对,合并为一个 QAM_const=const_perm(find(sign(abs(real(const_perm(:,1)))).*... %#oksign(abs(imag(const_perm(:,2))))),:);%#okQAM_const=sum(QAM_const,2);% 预分配变量以加快速度PAPR=zeros(2,Nreal);Wrecord=zeros(Nreal,M*Mt);Mean=zeros(1,Nreal);tav=0;% CMA 算法的平均处理时间 %******************************* 主循环 ********************************forLoop=1:Nreal % 生成 QPSK 符号 % 括号内生成1-4 之间的随机数(对应 QPSK)QAMs=QAM_const(ceil(length(QAM_const)*rand(Nuseful,Nsym,Mt)));% 用 QAM 符号填充频域信号SigF=zeros(N,Mt,Nsym);SigF(lGuard:1:(Nuseful+lGuard-1),:,:)=QAMs;% 将导频子载波设置为随机符号(接收端已知) SigF(Npilot_position,:,:)=QAM_const(ceil(length(QAM_const)... *rand(length(Npilot_position),Mt,Nsym)));% 填充数据矩阵 DDprim=zeros(Nuseful,M*Mt,Nsym);I=zeros(M,M);fork=0:M-1 I(k+1,k+1)=1;Q=kron(I,SigF((Nb*k)+lGuard:Nb*(k+1)+lGuard-1,:,:));Dprim=Dprim+Q;I(k+1,k+1)=0;endDT=zeros(N,M*Mt,Nsym);DT(lGuard:end-lGuard+1,:,:)=Dprim;% 权重(空间波束成形权重) % 这里假设使用特征波束成形,因此 W 是一组标准正交向量。 % 其他类型的波束成形也可用,但特征波束成形对原始 OFDM 信号的 PAPR 影响较小, % 而 ZF 波束成形会显著增加 PAPR。W=zeros(Mt,M*Mt);fork=0:M-1 W(:,k*Mt+1:(k+1)*Mt)=get_orthonormal(Mt,Mt);end % 构造 D 矩阵D=DT.'; DNorm=norm(D,'fro'); X=W*D; % 波束成形后的信号 XNorm=norm(X,'fro'); % OFDM 块 F=sqrt(N).*ifft(eye(N)); Y=X*F';YNorm=norm(Y,'fro');SigTD=Y(:);% 计算降低前的 PAPRPower1=abs(SigTD).^2;Pav1=mean(Power1(:));Pmax1=max(Power1(:));PAPR(1,Loop)=10*log10(Pmax1/Pav1);% 构造矩阵 AB=D*F'; AT=kr(B.',W);% 论文中的矩阵 AANorm=norm(AT,'fro');%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%if(PAPR(1,Loop)>threshold)% 如果超过预设阈值,则进行 PAPR 降低处理 %*********** 相位序列优化 ************ switch Optimization_method case{'none'}WH=ones(M,1);An=AT.'; case {'BlockCma'} maxiter=50; alpha=Pav1; An=AT.';tic[WH,Err,S]=cma_block(An,maxiter,[],alpha);t=toc;tav=(tav+t)/2;hold on plot(Err)case{'UnitCircle'}maxiter=50;alpha=Pav1;An=AT.'; tic [WH, Err,S] = UnitCircle(An,maxiter,[],alpha); t=toc; tav=(tav+t)/2; hold on plot(Err) end %************************ 优化结束 ********************** % 将权重系数应用于资源块 % 首先缩放 W 矩阵以保持平均功率恒定 WH=WH'./max(abs(W));s=WH*An;Transmit_Sig=s;% 计算 PAPRPower2=(abs(Transmit_Sig).^2).'; Pav2=mean(Power2(:)); Pmax2=max(Power2(:)); PAPR(2,Loop)=10*log10(Pmax2/Pav2); end fprintf('\nPAPR=%d\n',PAPR(:,Loop)); fprintf('\n 已完成第 %d 次实现\n',Loop); end %******************************* 主循环结束 ************************* % 绘制结果 figure(1) xlabel('迭代次数'); ylabel('目标函数值'); title(['10个大小为',num2str(N),'的 OFDM 符号的 CMA 收敛曲线(PAPR 降低)']); grid figure(2) semilogy(sort(PAPR(1,:)),1-linspace(0,1,Nreal),'-b',... sort(PAPR(2,:)),1-linspace(0,1,Nreal),'k') grid legend_text={'原始 PAPR',['预编码(',num2str(M),'个资源块)']}; legend(legend_text); xlabel('PAPR(dB)'); ylabel('CCDF'); title(['大小为',num2str(N),'的 OFDM 符号的 PAPR CCDF 曲线']);hold on

4 总结

本项目针对MIMO-OFDM系统高峰均比问题,提出了一种基于恒模算法(CMA)的预编码方案。通过将PAPR最小化转化为输出信号模平方与平均功率偏差最小化问题,并利用Khatri-Rao积构造数据矩阵,采用最速下降CMA迭代优化每个资源块的预编码权重,使时域信号逼近恒模。为进一步避免误码率恶化,引入单位圆约束,每次迭代后将权重视一化到单位圆上,仿真证明了该算法的有效性。

仿真图所见即所得,完整代码见vx公众号

参考文献:
[1] Khademi, Seyran , and A. J. V. D. Veen . “Constant modulus algorithm for peak-to-average power ratio (PAPR) reduction in MIMO OFDM/A.” #i{IEEE Signal Processing Letters} 20.5(2013):531-534.

http://www.zskr.cn/news/1490923.html

相关文章:

  • 基于Hadoop的招聘数据全流程分析系统(Java实现,含Web界面与完整部署脚本)
  • 02-Hooks完全指南——04-useRef 与 DOM 操作
  • Calibre Image Actions技术深度解析:基于libvips的自动化图片压缩解决方案
  • 手把手教你配置锐捷AC的BFD链路:保障VAC高可用的关键一步
  • WaxPatch高级应用:实现复杂UI动态修改与业务逻辑热更新
  • 告别裸机:在FreeRTOS上为STM32移植SOEM 1.4.0的完整指南
  • 用Cheat Engine给植物大战僵尸“动手术”:从阳光到僵尸血量的完整逆向实战(附C++代码)
  • 告别信息孤岛:如何用OPC UA和Euromap 63协议打通注塑机与MES/云平台
  • MuleSoft AI编排实战:企业级LLM集成的架构设计与故障治理
  • MediaPipe人脸检测Python调用包:含关键点定位、边界框识别与姿态估计
  • 架构级Windows系统性能调优:AtlasOS深度解析与实战指南
  • Python语音合成实战:从文本清洗到树莓派部署
  • DVWA靶场实战:手把手教你用XSS平台盗取Cookie并登录后台(保姆级避坑指南)
  • Anthropic新API层归零:/v1/messages如何重构AI工程范式
  • GD32F303片内FLASH读写避坑指南:从EEPROM到FLASH,你的数据存储姿势对了吗?
  • 纯前端网页文件预览工具:本地打开即用,支持PDF/Office/图片在线查看
  • 你的第一个量化分析项目:从用efinance获取茅台股票数据开始
  • 别再让神经网络‘猜平均’了:用PyTorch实现MDN搞定‘一对多’预测难题
  • Proteus仿真DS18B20温控器,从驱动到逻辑控制保姆级代码解析
  • 别再乱接线了!手把手教你用USB转TTL模块正确配置HC-05蓝牙(附AT指令详解)
  • 告别打印失败!OrcaSlicer-bambulab的智能支撑生成与优化技巧全解析
  • 8K上下文窗口!Fox-1-1.6B-Instruct-v0.1长文本处理能力实测指南
  • LLM数据生命周期防护:面向大模型的动态DLP实践指南
  • 02-Hooks完全指南——03-useContext 与跨组件通信
  • HarmonyOS 手写笔服务:让你的应用支持手写输入
  • AMD Ryzen调试终极指南:5分钟掌握SMU Debug Tool完整教程
  • 济南千鸿黄金回收市中区门店 - 润富黄金回收
  • 从多普勒效应到代码:深入理解无线通信中的频率偏移与同步(以QPSK/16QAM为例)
  • 大模型评估体系全解:如何科学衡量你的 LLM 应用质量?
  • 如何用Dify工作流模板快速构建专业级AI应用?实战方法揭秘