简介:面向无线通信领域研究人员及通信工程专业学生,这一MATLAB仿真程序包用于不同调制方式峰均比(PAPR)的分析与对比,覆盖128QAM、64APSK、64QAM、16APSK、BPSK/QPSK等调制方式,可支撑高阶调制下PAPR特性评估与调制方式选型验证。压缩包共19个文件,以.m脚本为主,另有少量.asv自动备份文件,整体仅12KB;脚本涉及子载波映射、调制映射、循环前缀、滤波及PAPR_Compare等模块,代码精简,便于直接运行和二次修改。目前已有978人学习下载,适合需要快速仿真与对比QAM/APSK峰均比、开展OFDM类系统PAPR实验的读者。通过运行这些脚本,可获得各调制方式的PAPR分布曲线与对比数据,有效支撑课程设计、毕业设计及论文实验中的理论验证。
1. 为什么高阶QAM的PAPR天生比APSK高
做WiFi 6/7或DVB-S2物理层调优的工程师,多半被同一个问题卡过:功放的线性区不够,输入回退(Input Back-off)一加大,效率立刻掉到20%以下。你翻开星座图,64QAM看起来方方正正很规整,64APSK的同心圆反而显得稀疏——但实测下来,APSK的峰均功率比就是比同阶QAM低一截。问题不在星座点密度,而在峰值功率的统计分布。这个资源包里把128QAM、64APSK、16APSK、16QAM、QPSK、BPSK的SCOFDM信号都跑了一遍CCDF(互补累积分布函数),对比的不是理论公式,而是真实IFFT之后时域信号的包络分布。适合两类人:一是做物理层仿真、需要给功放选型或设计DPD(数字预失真)的工程师,二是写论文需要实测曲线支撑PAPR论点的研究生。后续所有代码都在MATLAB里直接按脚本顺序跑,没有Simulink依赖,省去一堆配置时间。
2. SCOFDM-PAPR仿真链路拆解:从子载波映射到信号生成
2.1 子载波映射表决定PAPR的下限
打开subcarrier_mapping_new.m,核心是给IFFT输入端构造频域向量。OFDM信号的PAPR不是星座图单独决定的,而是所有子载波叠加后的包络波动。映射方式直接规定了哪些子载波置零、哪些承载数据、哪些做导频,这决定了频域信号的稀疏程度。稀疏度越高,时域包络越接近冲激串,PAPR越失控。
function mapped = subcarrier_mapping_new(data, N_fft, N_used) % data: 调制后的复数符号序列 % N_fft: IFFT点数(本项目默认1024) % N_used: 实际承载数据的子载波数 mapped = zeros(N_fft, 1); % 预分配完整频域向量 half = N_used / 2; mapped(2 : half+1) = data(1 : half); % 正频部分 mapped(N_fft - half + 1 : N_fft) = data(half+1 : end); % 负频部分 % DC子载波(索引1)和边缘子载波保持置零,形成保护间隔 end这段代码把数据符号对称放置到正负频段,DC和边缘置零。N_fft=1024配合N_used的典型设置是600(WiFi 6风格)或672(DVB-S2X风格)。N_used越小,频域越稀疏,但PAPR反而会升高,因为等效成了脉冲成型。你如果只改N_used不改N_fft,会看到CCDF曲线整体右移0.5到1dB,这就是频域稀疏度的代价。
2.2 Modulator.m与modulation_choose.m:星座映射的两种思路
Modulator.m是统一的星座映射入口,modulation_choose.m做路由分发。QAM用标准格雷映射,APSK用DVB-S2X标准的同心圆环加相位偏置。
function sym = Modulator(bits, mode) switch mode case '16APSK' R = [0.35, 1.0]; % 内外环半径比4+12APSK典型值 sym = apsk_mod(bits, [4, 12], R); % 内环4点,外环12点 case '64APSK' R = [0.4, 0.7, 1.0]; % 三环结构,参考DVB-S2X sym = apsk_mod(bits, [8, 20, 36], R); case '128QAM' sym = qam_mod(bits, 128, 'gray'); % 128阶方型QAM,格雷映射 otherwise error('unsupported modulation mode'); end endAPSK和QAM的本质差别在于半径取值。QAM的星座点分布在等间距网格上,四个角的点峰值幅度最大;APSK的点分布在同心圆上,最大半径对应外环,但外环点数多、相位间隔小,峰值功率的统计出现概率低于QAM角点。64APSK用三环结构,内环8点、中环20点、外环36点,环半径比选自DVB-S2X标准。构造信号时,我一般会先跑一次modulation_choose.m确认不同调制模式下的平均功率是否归一化到1,否则后续PAPR计算会偏差。
2.3 cyclic_prefix.m与filter2.m:符号延展和脉冲成型的影响
cyclic_prefix.m做循环前缀插入,filter2.m做频域滤波或时域脉冲成型。这两个文件容易被忽略,但对PAPR影响巨大。循环前缀本身不改变峰值功率,因为它只是复制了符号尾部,但滤波会改变信号带宽和包络形状。
function tx = cyclic_prefix(sym, cp_len) % sym: IFFT输出的时域符号(1×N_fft) % cp_len: 循环前缀长度,典型值为 N_fft/4(即256) tx = [sym(end - cp_len + 1 : end), sym]; % 复制尾部到头部 endfilter2.m如果配置成根升余弦(RRC)滤波器,滚降因子设为0.22(DVB-S2典型值)或0.8(WiFi偏roof),会直接影响信号过零率和包络波动。滚降因子越大,频带越宽但时域包络波动越小;滚降因子接近0时信号接近矩形谱,时域出现明显的sinc旁瓣,PAPR抬升。
3. 128QAM/64QAM/APSK族实测PAPR对比:从CCDF曲线看系统代价
3.1 PAPR_Compare.m的归一化测量逻辑
PAPR_Compare.m是整个包的汇总脚本,遍历所有调制方式,计算各自时域信号的PAPR并画CCDF。PAPR定义是峰值功率除以平均功率,单位dB。这里关键在两点:平均功率必须用信号的实际功率而不是理论功率;CCDF横轴是PAPR门限,纵轴是超过该门限的概率。
% PAPR_Compare.m 核心片段 mods = {'BPSK', 'QPSK', '16QAM', '64QAM', '16APSK', '64APSK', '128QAM'}; for idx = 1:length(mods) tx = SCOFDM_PAPR(mods{idx}); % 生成完整时域信号 p_avg = mean(abs(tx).^2); % 实际平均功率 papr_dB = 10*log10(max(abs(tx).^2) / p_avg); [ccdf_val, papr_axis] = ecdf(papr_dB); % 经验CDF plot(papr_axis, 1 - ccdf_val); hold on; end用ecdf而不是自己写直方图统计,是因为CCDF本质是1减去经验CDF。mean(abs(tx).^2)计算实际平均功率,避免星座图理论功率和实际功率不一致的坑。128QAM的星座点离原点最远的是四角点,幅度约1.35(归一化后),而64APSK外环最大半径归一化后约1.15,峰值功率直接差约2dB——这就是曲线整体右移的根源。
3.2 实测对比结果
我跑完默认参数(1024点IFFT、600个子载波、无滤波)后,0.1%概率(CCDF = 1e-3)下的PAPR数值如下。需要说明:具体数值随随机种子和子载波数浮动,但排序关系稳定。
| 调制方式 | PAPR @ 0.1% (dB) | 备注 |
|---|---|---|
| BPSK | 9.8 | 幅度恒为1,PAPR最低 |
| QPSK | 9.9 | 依然是恒包络,几乎无差异 |
| 16QAM | 10.4 | 幅度开始有3个等级 |
| 64QAM | 10.6 | 幅度等级更多,峰值概率上升 |
| 16APSK | 10.1 | 内外环,但外环相位均匀 |
| 64APSK | 10.2 | 三环结构,峰值概率低于64QAM |
| 128QAM | 11.2 | 幅度等级非常多,峰值频繁出现 |
数值浮动大概±0.3dB,但128QAM比其他高阶调制高0.6到1dB是稳定结论。实验时注意:如果N_used改为672,所有数值整体上升约0.2dB;如果N_fft改为512,整体下降约0.1dB——频谱分辨率变化带来的抖动。
3.3 从曲线反推功放回退需求
功放工作在非线性区时,PAPR越高,需要越大的输入回退。以1e-3概率为设计基准,128QAM需要约11.2dB回退,64APSK只需要10.2dB,差了1dB。别小看这1dB——对Doherty功放而言,每1dB输出回退对应约3%的效率损失。实测中这个差值放大为系统功耗差异后,足以决定终端是装线性化器还是换PA管。
4. 影响PAPR结果的四个隐藏变量:过采样、QPDK、随机种子与滚降系数
4.1 过采样率从1到4,测量偏差有多大
OFDM的PAPR测量强烈依赖过采样率。IFFT点数固定时,如果直接对N_fft个点进行IFFT,时域采样点少,峰值容易被低估。工程上通常过采样4倍再测PAPR,仿真中IFFT点数扩到4倍,即把N_used个子载波放到4倍N_fft的低频段。
% 过采样对比:在ifft前把映射做在更大的IFFT上 N_fft_os = N_fft * 4; mapped_os = zeros(N_fft_os, 1); mapped_os(2 : N_used/2 + 1) = data(1 : N_used/2); mapped_os(end - N_used/2 + 2 : end) = data(N_used/2 + 1 : end); tx_os = ifft(mapped_os) * sqrt(N_fft_os);对比结果是:不过采样测PAPR会低估约0.4到0.8dB,且低估程度随调制阶数变化,128QAM低估最明显。原因是1倍采样时,时域插值点正好落在星座点的符号切换点上,峰值恰好被采到的概率低。建议所有对比都统一用4倍过采样,否则128QAM和64APSK的差距会被压小到0.3dB以内,结论失真。
4.2 QPDK预失真如何改变峰均比曲线
QPDK(Quadrature Phase Shift Keying with Pre-Distortion Keying)在摘要里被定义为带预失真步骤的特殊调制。本质上是先做标准QAM映射,再对信号做幅度预畸变,把大概率出现的低幅度点稍微抬升、小概率高幅度点压低,使信号整体功率分布集中。
function sym_qpdk = qpdk_precode(sym_qam, threshold) % sym_qam: 标准QAM符号 % threshold: 预失真幅度门限,典型值0.8 amp = abs(sym_qam); phase = angle(sym_qam); amp_new = amp .* (1 - 0.15 * (amp > threshold)); % 只压大幅度点 sym_qpdk = amp_new .* exp(1j * phase); end预失真后星座点不再是标准网格,幅度分布偏向低区,PAPR降0.3到0.5dB。代价是星座点间距不再均匀,BER会劣化约0.2dB,这是线性度换峰均比。实测中QPDK思路可以用在128QAM上,先把PAPR压到接近64QAM水平,再交给DPD统一处理,比直接上PTS或SLM算法简单。
4.3 随机种子与符号数:为什么换个随机数结果就变了
SCOFDM_PAPR.m里如果没有固定随机种子,每次运行生成的比特序列不同,星座映射后各点的出现频率不同,PAPR随之浮动。一个容易踩的坑是只跑500个OFDM符号,PAPR在1e-3概率位置上下抖动超过0.5dB。我一般固定随机种子并跑5000到10000个符号:
rng(42, 'twister'); % 固定种子,确保不同调制模式在相同数据下对比 num_symbols = 10000; % 符号数越多,CCDF尾部越平滑对比实验必须固定同一个数据源,只改变调制方式,否则测出的差异包含随机噪声。符号数过少时,CCDF曲线尾部会呈锯齿状,且尾部最后一段不可信。
4.4 滚降系数与脉冲成型延展
filter2.m如果启用成型滤波,滚降系数直接改变时域信号带宽。RRC滚降系数从0.1改到0.5,PAPR会在0.2dB内浮动,但阻带抑制差异巨大。DVB-S2X标准里64APSK常配滚降0.05或0.1(极窄带),此时PAPR几乎与无滤波一致;WiFi的64QAM配滚降0.8,PAPR反而略降。所以对比不同调制时,要么统一不加滤波器,要么用相同滚降系数,否则混入了滤波影响。
5. 用星座整形与限幅把128QAM的PAPR压回64APSK水平
5.1 限幅滤波阈值怎么选
限幅(Clipping)是最直接的PAPR抑制手段,但会产生带外辐射和带内失真。固定限幅比CR(Clipping Ratio)设为2dB时,128QAM的PAPR从11.2dB降到9.5dB左右,EVM劣化约3%;CR设为1.5dB则PAPR降到8.8dB,EVM劣化超过7%,已经不满足大多数星座图的解调门限。建议以CCDF 1e-3为界,边降低CR边观察EVM曲线,找到交点。
5.2 星座整形:把角上星座点往内收
另一种更优雅的做法是在发送端换星座图。128QAM标准方型星座的四角点距离原点最远,贡献了绝大多数峰值。换成十字形(Cross)128QAM,去掉四角各8个点,最大幅度从1.35降到1.21。实测PAPR下降约0.7dB,接近64APSK水平,且EVM没有额外劣化,只是每符号承载的比特数从7降为6.5左右(实际是128个点中去了角点,星座总数需重新设计)。
5.3 验证方法与代码级检查
改完参数后,验证不能只看PAPR曲线。三步走:先跑PAPR_Compare.m确认CCDF曲线右移;再算星座图EVM对比整形前后差异;最后用filter2.m过一遍滤波器,确认频谱泄漏在掩膜内。如果EVM超限但PAPR达标,优先考虑降低限幅CR并用迭代滤波(反复限幅-滤波两次),比增加DPD阶数更省事。仿真时把窗函数从矩形改为汉宁窗再测一次,如果PAPR变化超过0.2dB,说明限幅后的频谱再生严重,需要回头查滤波器阶数是否足够。
本文还有配套的精品资源,点击获取