我在做物理层波形仿真的时候,最常被问起的问题不是“这个波形误码率多少”,而是“PAPR能不能再低一点,时延能不能再小一点,谱效率能不能再高一点”。滤波器组多载波(FBMC)的偏移正交幅度调制(OQAM)和单载波频分多址(SC-FDMA),本来就是两套被反复比较的备选波形:前者靠滤波器组把频谱压制得很干净,后者靠DFT扩频把峰均比压得很低。这个项目做的一件事,就是试着把两者的长处合并到一个物理层方案里,用Matlab把发射机、接收机、PAPR统计、谱效率估算整条链路跑通。
这篇内容既适合正在做5G/6G波形预研的通信算法工程师,也适合刚接触新型多载波调制的研究生。我会从“为什么非要结合”讲起,再拆OQAM和DFT扩频的原理,最后给出可以照着改的Matlab结构、参数表和排错记录。我不打算把它写成教科书,而是按实际仿真中“我先踩坑、再修坑”的思路来讲。
1. 为什么要把FBMC-OQAM和SC-FDMA放在一起看
1.1 三个指标放在一起就是一道取舍题
任何一个无线物理层发端方案,往下拆到最后都会落到一组矛盾上:PAPR低,发射机功放就能工作在效率更高的回退点附近,电池续航和覆盖都受益;时延低,才能支撑交互类业务和紧凑帧结构;谱效率高,意味着同样的带宽能塞进更多有效数据。可惜这三个指标天然互相牵扯。
纯OFDM谱效率高、均衡简单,但多载波叠加带来的PAPR尖峰非常明显。SC-FDMA把PAPR压下来了,可它本质还是带循环前缀的多载波发射,带外泄漏并不理想。FBMC-OQAM用长原型滤波器把每个子载波的频谱约束得很窄,不需要循环前缀,谱效率可以做得非常紧,但滤波器组本身会引入额外的处理时延,而且OQAM的实虚交替结构对信道均衡和同步要求更高。
也就是说,单纯选一种波形,总有一个指标吃亏。这个项目想验证的思路是:用SC-FDMA的DFT扩频结构来压低PAPR,同时用FBMC的滤波成型来保住带外抑制和谱效率,最后再看时延能不能通过参数选择控制在一个可接受的范围内。
1.2 FBMC-OQAM的看家本领和软肋
FBMC-OQAM跟OFDM最大的不同,是它放弃了循环前缀,改用精心设计的原型滤波器来保证子载波间的正交性。调制时把复数QAM符号拆成实部和虚部,实部虚部在时间轴上错开半个符号周期,并且在相邻符号间做相位旋转,让相邻符号之间的干扰恰好落在正交方向上。接收端只取结果的实部,就能把干扰消掉。
这套设计的直接收益是频谱效率:不需要CP,也就没有每符号约5%到10%的开销;滤波器旁瓣衰减快,各子载波可以尽量贴近排列,频谱利用率比OFDM高。代价也明显:原型滤波器通常要做得很长,我常用的PHYDYAS滤波器,重叠因子K=4时长度已经是K倍子载波数再加1,每个符号经过滤波器都会有一段固有的群时延。对时延敏感的业务来说,这段时延不能无视。
另外,OQAM在信道估计上也比OFDM麻烦。OFDM可以直接插导频,OQAM的相邻符号之间天然存在本征干扰,导频放下去会被虚部干扰污染,必须做辅助导频或干扰消除。这是很多初次动手复现FBMC的人最容易翻车的地方。
1.3 SC-FDMA值得借的那一手
SC-FDMA在LTE上行已经用了很多年,它的核心操作其实只有一步:把要发送的复数符号先做一次M点DFT,再把这些频域结果映射到M个子载波上,最后做N点IDFT回到时域。
这一多一少的频域变换,带来的最大好处就是时域信号近似于单载波成型后的波形,包络起伏小,PAPR明显低于OPDM。付出的代价也很直观:因为先做了DFT,发射端调度器不能单独扭某个子载波的功率,资源分配粒度和灵活度都要打折扣;而且SC-FDMA沿用了OFDM的CP结构,带外泄漏依然存在。若把FBMC的滤波器接到SC-FDMA的DFT扩频后面,等于既保留单载波的低峰均比特性,又获得滤波器组对频谱的收紧能力。
1.4 这版仿真里我选择的融合路线
融合不是把两个系统拼在一起这么简单。直接拿FBMC-OQAM的子载波去做SC-FDMA映射,会破坏OQAM原本的实虚正交结构。我最后采用的路线是:先把调制符号按块做M点DFT,得到频域预编码结果,再把预编码后的符号填入一组选定的FBMC子载波,之后才进入OQAM的实虚分离、相位旋转和原型滤波器成型。
换成流程图来看就是:
- 比特流到星座符号
- 分块并做块内M点DFT
- 将M个频域值映射到N个子载波中的特定位置
- 对每个子载波按OQAM规则做实虚交错与相位旋转
- 经过综合滤波器组完成时域成型和重叠相加
- 接收端先用分析滤波器组还原子载波信号
- 频域均衡后按OQAM规则取实部/虚部
- 再做M点IDFT还原数据块,解调统计误码率
这条路线既避免了SC-FDMA带外泄漏大的问题,也让PAPR比同参数的纯FBMC-OQAM低不少。下文会把它拆开讲。
2. 核心理论模型:两个系统的真正衔接点
2.1 OQAM的实虚分隔原理
FBMC-OQAM发射信号的表达式可以写成:
s(t) = Σₘ Σₙ aₘ,ₙ · g(t - nT/2) · e^(j2πmF₀t) · e^(jφₘ,ₙ)
其中aₘ,ₙ是OQAM符号序列。它不是一个普通的复数序列,而是把原始QAM符号的实部、虚部分开,交替放在奇数索引和偶数索引上,并在时间轴上错开半个符号周期。φₘ,ₙ通常取π/2的整数倍,规则是相邻子载波间、相邻符号间都要有一个90度的相位差。
为什么非要这么转?因为g(t)的设计只能保证相邻子载波和相邻符号之间在时频平面上存在“正交重叠”,但没法做到像OFDM那样用CP把符号完全隔离。通过实虚分离加相位旋转,所有来自邻居的干扰都会落在目标符号的虚部上,接收时只取实部就能恢复信息。如果相位顺序错了,或者信道带来了复增益,这个“干扰落在虚部”的约定就被破坏,误码率立刻抬高。
这里要强调一个容易忽略的细节:OQAM的“正交”不是在复数域上的正交,而是“实数域上的正交”。所以信道均衡后不能直接把复信号拿来判决,必须先把复信号投影到对应符号应处的实数轴或虚数轴上,再做判决。
2.2 SC-FDMA的DFT扩频原理
SC-FDMA的发射侧可以看成三步:
d → M点DFT → 频域符号X → 子载波映射 → IFFT → 时域信号s
M点DFT之后,原来时域上的M个符号被转换到频域,成了M个频域值。接下来把这M个频域值映射到N点IDFT的某M个输入端口上。映射方式常见有两种,一种是集中式映射,M个频域值连续地放在一段子载波上;另一种是分布式映射,M个值等间隔撒在整个频带上。
关键在于,经过DFT变换后,发射端在时域看到的波形不再是各路子载波独立调制的叠加,而是一个频率宽度被压缩到M/N位置的等效单载波信号。它经过IDFT采样后,时域包络近似于单载波成型信号,幅度起伏远小于N路子载波随机叠加的结果。这就是SC-FDMA低PAPR的根本原因。集中式映射的PAPR一般比分布式映射更低,但也更容易受到窄带干扰影响。
2.3 衔接时的关键设计
把SC-FDMA的DFT扩频接到FBMC-OQAM上,最关键的是预编码和OQAM实虚分离的先后顺序。我在仿真中把顺序定成了“分块 → M点DFT → 子载波映射 → OQAM实虚分离 → 滤波器组成型”。这样做的好处是,DFT扩频后的符号仍然保留一个“频域数据块”的概念,OQAM只是对这个频域数据块做了进一步调制,两者不会在概率统计上相互抵消。
另一个关键设计是子载波映射方式。我建议用集中式映射,把M个DFT输出连续放在M个相邻子载波上。这样时域信号的瞬时带宽最窄,包络也更平稳,PAPR收益最明显。如果用分布式映射,频域值等间隔铺开,时域信号更容易重新出现多载波叠加的起伏。很多复现方案PAPR降不下去,根因就在映射方式选错了。
还有一个容易被忽视的细节是块间保护。FBMC不需要CP,是因为原型滤波器本身就能抑制符号间干扰;但引入DFT扩频后,一个DFT块的内部符号之间是强耦合的。一旦需要在块与块之间做资源调度或切换,最好在块边界留一小段空白保护间隔,或者在DFT块前加一个很短的循环前缀,否则块间重叠会把“单载波特性”破坏掉。这个保护间隔不是每符号一个,而是每个DFT块一个,所以对谱效率的损耗远小于传统OFDM。
2.4 参数设计表和折中分析
这组参数是我在本地复现时最常用到的一组,适合先验证算法趋势,不适合直接当产品参数用。
| 参数 | 取值 | 选择理由 |
|---|---|---|
| 子载波总数N | 256 | 便于做FFT,也便于M取64时形成4倍过采样关系 |
| 单载波块长度M | 64 | 每个块内做64点DFT,兼顾PAPR收益和块时延 |
| 映射方式 | 集中式连续映射 | PAPR最低,块结构最清晰 |
| 调制阶数 | 16QAM | 频谱效率适中,误码率曲线容易观察趋势 |
| 重叠因子K | 4 | 原型滤波器带外抑制好;K=3可降时延但旁瓣变高 |
| 原型滤波器长度L | K×N+1 | PHYDYAS滤波器标准设计公式 |
| 块间保护 | 0~32个采样点 | 不设保护谱效率最高;加保护可避免块间串扰 |
| 信道模型 | AWGN / 径数≤3的多径 | 先无信道,再加简单多径,逐步逼近真实场景 |
这里面的折中关系很直接:M从64降到32,块时延变小,但PAPR抑制效果会变差;K从4降到2,滤波器变短,处理时延明显减小,带外泄漏却会抬高,谱效率的账面好看但实际抗邻道干扰能力下降。想同时压低时延和保持高谱效率,只能用更复杂的短滤波器设计去补救,这是后续可以深入的方向。
3. Matlab实现:让整条链路先转起来
3.1 模块划分
我习惯把仿真拆成四个独立模块:参数配置、发射机、接收机、指标统计。这样做的好处是,想单独看PAPR曲线或者单独看BER曲线,都只需要改一小块代码,不会牵一发动全身。
发射机的模块顺序是:随机比特生成、QAM映射、按M分块、块内点DFT、子载波映射、OQAM实虚分离与相位旋转、综合滤波器组成型。接收机模块对应做分析滤波器组、频域均衡、OQAM实虚投影、M点IDFT、QAM解调和误码率统计。
很多初学者一上来就把FBMC的滤波器组实现写得很复杂,实际上在仿真正交性能验证阶段,不需要把PHYDYAS多相滤波结构全部手工展开。可以先把原型滤波器系数算好,然后用重叠相加的方式模拟滤波器组行为,等性能曲线趋势出来了,再决定是否做低复杂度多相实现。先通后优,是我最常用的流程。
3.2 原型滤波器设计
这里给出PHYDYAS原型滤波器的生成函数。PHYDYAS滤波器是在频域给出一组系数,然后通过频域采样加IDFT得到时域脉冲。对应的频域系数表并不是随便拍的,它满足近似完美重构条件。K=4时我经常使用的系数如下:
function h = design_phydyas(N, K) % N: 子载波数 % K: 重叠因子,通常取3或4 % H: 频域采样系数 % 返回原型滤波器脉冲响应,长度为K*N+1 switch K case 3 H = [1, 0.911438, 0.4110]; case 4 H = [1, 0.97195984, 0.70710678, 0.23514695]; otherwise error('此代码支持K=3或K=4'); end % 频域采样的半频谱 h_freq = [H, zeros(1, (K-1)*N - 1), fliplr(H(2:end))]; % 反变换得到实系数脉冲 h = ifft(ifftshift(h_freq), K*N+1, 'symmetric'); h = h / sqrt(sum(h.^2) / N); % 归一化,保持子载波平均功率一致 end这段代码里最关键的是归一化和长度处理。长度K×N+1是为了让原型滤波器在时域上形成奇数长度的对称脉冲,从而满足OQAM的对称正交条件。归一化是为了让每个子载波发射平均功率为1,不然后面算PAPR时分子分母都会出现比例偏差。
如果你用的是Hermite滤波器,设计思路不同,但发射机主体结构完全不用改,只需要把滤波器原型替换成新的h就行。这也是模块化设计带来的好处。
3.3 发射端核心流程
下面这段是发射端主循环的骨架代码。为了阅读方便,我把细节注释到代码里,并把块数和帧数都简化,方便你改成自己的帧结构。
% 参数区 N = 256; % 子载波总数 M = 64; % 单载波块长度 K = 4; % 重叠因子 modOrder = 16; % 16QAM L = K*N + 1; % 原型滤波器长度 numBlocks = 100; % 发送块数 % 调制 bitsPerSym = log2(modOrder); dataBits = randi([0 1], numBlocks*M*bitsPerSym, 1); syms = qammod(dataBits, modOrder, 'gray', 'UnitAveragePower', true); symMat = reshape(syms, M, numBlocks); % SC-FDMA核心:M点DFT扩频 precoded = fft(symMat, M, 1); % 每列是一个DFT块 % 子载波映射:集中式映射到前M个子载波 freqGrid = zeros(N, numBlocks); freqGrid(1:M, :) = precoded; % OQAM实虚分离与相位旋转 % 这里按行处理每个子载波 realPart = real(freqGrid); imagPart = imag(freqGrid); % 对偶数时间索引放实部,奇数时间索引放虚部 % 为了演示简洁,eve/odd做两层循环 txOqam = zeros(N, numBlocks*2); txOqam(:, 1:2:end) = realPart; txOqam(:, 2:2:end) = 1j * imagPart; % 加上OQAM相位旋转:m+n为奇数时取负或旋转 [nIdx, mIdx] = meshgrid(0:numBlocks*2-1, 0:N-1); phase = 1j .^ ((mIdx + nIdx) + 1); % 指向实虚交替 txOqam = txOqam .* phase; % 综合滤波器组:用重叠相加实现时域成型 tx = zeros((numBlocks*2 - 1) * (N/2) + L, 1); for nn = 1:numBlocks*2 % 对第nn个OQAM符号,先用IDFT生成基带符号 symShift = fftshift(txOqam(:, nn)); s_sym = ifft(symShift, N) * sqrt(N); % 将该符号经过原型滤波器,并按N/2间隔叠加进输出序列 s_filtered = conv(s_sym, h); startIdx = (nn-1) * (N/2) + 1; tx(startIdx:startIdx + L - 2) = ... tx(startIdx:startIdx + L - 2) + s_filtered(1:length(tx(startIdx:startIdx + L - 2))); end上面这段代码是教学级骨架,不是经过大量性能优化的工程实现。它在逻辑上覆盖了DFT扩频、集中式映射、OQAM实虚分离、相位旋转和滤波器组重叠相加,足够让你观察PAPR和BER趋势。想做到跟标准FBMC完全一致,还需要把频率扩展法或原型滤波器的多相分解整理进来,但原理不变。
我在本地调试时会在txOqam段打一行disp检查实虚部功率是否相等,如果实部功率和虚部功率差异超过0.1dB,大概率是相位旋转规则写错了。
3.4 接收端核心流程
接收端的第一步是分析滤波器组,简单说就是把发射端的成型过程倒过来:每个接收符号先乘上原型滤波器并重叠,再做N点DFT,得到频域符号。
% 接收端骨架 rx = tx + noise; % 先不加信道或加简单信道,噪声级由EbNo决定 % 分析滤波器组 rxSyms = zeros(N, numBlocks*2); for nn = 1:numBlocks*2 startIdx = (nn-1) * (N/2) + 1; block = rx(startIdx:startIdx + L - 2); % 匹配滤波 y = conv(block, fliplr(h)); % 截取N点有效区段再做FFT y = y(N: N + N - 1); rxSyms(:, nn) = fftshift(fft(y)) / sqrt(N); end % 去除OQAM相位旋转,做实数投影 rxOqam = rxSyms .* conj(phase); rxReal = real(rxOqam); rxImag = 1j * imag(rxOqam); % 按发射端相反规则重组数据块 rxBlocks = complex(zeros(N, numBlocks)); rxBlocks(:, 1:2:end) = rxReal(:, 1:2:end); rxBlocks(:, 2:2:end) = rxImag(:, 2:2:end); % 取出前M个子载波 rxPrecoded = rxBlocks(1:M, :); % 块内M点IDFT rxSymsData = ifft(rxPrecoded, M, 1); % 解调 rxBits = qamdemod(rxSymsData(:), modOrder, 'gray', 'UnitAveragePower', true); ber = sum(rxBits(:) ~= dataBits) / length(dataBits);这段代码假设信道是AWGN,所以没有写均衡器。如果换成多径信道,最简单的做法是对每个子载波做单抽头MMSE均衡,因为FBMC子载波带宽窄,多径信道在每个子载波上近似平坦。你只需要在rxOqam和取实/虚之间插一行多子载波均衡系数即可。
我建议调试时先不要加信道,先确认发射机和接收机在无信道情况下BER能到0,再逐步加入AWGN和衰落信道。这个习惯能省下大量排查问题的时间。
3.5 PAPR、谱效率和时延怎么测
PAPR的计算很简单,但对测试条件很敏感。正确的做法是统计发射机时域输出信号的瞬时功率峰值与平均功率之比,并画出互补累积分布函数CCDF曲线。
% 计算发射信号PAPR的CCDF signalPower = abs(tx).^2; peakPaprDb = 10*log10(max(signalPower) / mean(signalPower)); % 更完整的CCDF需要跑多帧数据 % 对每一帧计算PaprDb,然后统计P(PAPR > gamma)我一般跑至少10000个符号以上的发射信号做PAPR统计,只有几十个符号算出的峰值没有统计意义。还要注意,计算PAPR时不能把滤波器冲激响应的前导和尾部的衰减区一起算进来,因为那些位置平均功率低,会把平均功率拉小,导致PAPR虚高。稳妥做法是丢弃每帧前后约一个滤波器长度的时间样本,只统计数据有效部分的包络。
谱效率方面,我习惯用“有效信息速率/占用带宽”来算。FBMC不需要CP,所以每个符号的实际开销比OFDM少;它的占用带宽可以按原型滤波器99%能量带宽计算,而不是像OFDM那样按子载波频点直接铺满算。低频侧和高频侧的保护带可以比OFDM短很多,这就是谱效率收益的来源。
时延方面,我按“发射端缓存完整DFT块的时间 + 原型滤波器群时延 + 接收端分析滤波器延迟”折算。M=64、N=256、K=4时,整链路的额外延迟大约是1到2个OFDM符号宽度。如果把K降到3,滤波器时延会降下来,但带外泄漏会上升,是否需要就看业务需求了。
4. 从仿真跑到实际:我踩过的几个坑
4.1 OQAM的实虚顺序写反,BER永远压不下来
第一次复现时,我犯过一个很低级的错误:没有把OQAM的相位旋转矩阵和实虚分离顺序对齐,导致接收端取实部/虚部后,符号能量分布跟发射端错位。表面上看PAPR曲线很漂亮,BER却一直在0.4附近下不来。
排查方法很直接:把发射符号存下来,在无信道条件下把接收符号和发射符号逐子载波对比。如果星座点整体转了一个固定角度,就是相位旋转或滤波器归一化的问题;如果星座点在时间上错位了一个符号索引,就是重叠相加的起始位置算错了。OQAM对时间和相位的错位非常敏感,这类Bug比噪声导致的问题更难发现。
4.2 滤波器长度和重叠起始点不匹配
PHYDYAS滤波器长度为K×N+1,而每个OQAM符号在时域上只错开N/2个采样点。重叠相加时,相邻符号的起点间隔是N/2,不是N。许多复现方案把间隔写成N,结果滤波器响应没有对齐,误码率曲线会出现一个恒定底噪。这个底噪在高信噪比下特别碍眼。
我的建议是在发射端重叠相加后跑一次无信道环回,计算重建误差:直接把发射端tx和接收端还原后的符号做差,如果误差能量不是零,就去查重叠间隔。这个误差能量为零是OQAM无干扰恢复的基本前提。
4.3 PAPR没有如预期下降
SC-FDMA低PAPR的核心是DFT扩频,但如果M相对于N太小,或者子载波映射方式用了分布式映射,时域信号会重新接近多载波叠加,PAPR自然不会好看。仿真里M=64、N=256时,理想情况下CCDF在1e-3处比纯FBMC-OQAM低2到3dB已经不错;如果你用M=16,下降幅度可能只有1dB不到。
此外,滤波器成型也会抬高PAPR。原型滤波器的时域旁瓣越长,越容易在符号重叠处产生幅度叠加,抵消一部分DFT扩频的收益。遇到PAPR降不动的情况,先检查两件事:M/N的比值是否足够小,以及是否用了集中式连续映射。
4.4 块间不保护,BER在衰落信道恶化
FBMC无CP的设计是基于符号级正交的。但SC-FDMA块内所有符号经过DFT绑定在一起,块与块之间的干扰不能靠单符号滤波器完全消掉。我在加了3径信道后,BER曲线出现了明显的平台效应,后来在块间插了16个采样点保护间隔,平台才消失。
这16个采样点相对于一个DFT块的时长来说,开销非常小。不过它确实会抵消一部分FBMC无CP带来的谱效率收益,所以设计帧结构时要算清楚:保护间隔缩短多少,BER恶化的斜率变化有多大。这里没有绝对最优值,只能按目标业务需求去做权衡。
4.5 常见问题速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| BER平台下不去 | OQAM相位旋转错位或重叠间隔错 | 无信道环回,先验BER是否为零 |
| PAPR基本没降 | M/N太小、子载波用分布式映射、滤波器成型拖尾太长 | 换集中式映射、增大M/N、换K=2或K=3滤波器 |
| 谱效率算出来低 | 保护间隔和有效带宽统计口径不一致 | 统一用99%能量带宽,并明确CP/保护间隔开销 |
| 时延比预期大 | 重叠因子K太大、DFT块M太长、仿真代码里重采样步骤多余 | 统计每级模块的耗时,不要只看总时延 |
| 信道估计不准 | OQAM本征干扰污染导频 | 用辅助导频,或对导频位置做虚部干扰消除 |
5. 这个方案的扩展空间和我的实操建议
5.1 还能往哪些方向走
这套混合调制方案并不止步于单用户点对点链路。把它放进多用户调度场景时,就可以按SC-FDMA块做资源粒度,每个用户分配一个或多个DFT块,再在相邻块之间用FBMC滤波自然隔离。这样既保持了低PAPR,也降低了多用户间的带外干扰,比传统SC-FDMA在频谱管控上更省心。
另一个方向是结合MIMO预编码。DFT扩频后的频域数据块可以做一层预编码,再把预编码后的符号送入OQAM调制,能够在不增加PAPR的前提下提升空间复用增益。代价是接收端均衡矩阵要做成块级别的联合检测,复杂度会上去。
如果你想往低复杂度实现走,可以把当前的重叠相加滤波器组改成多相结构,或者使用频率扩展法。前者适合硬件实现,后者适合Matlab批量仿真,两者的理论结果应该一致。我在仿真后期也会把发射机部分改成FFT复用结构,主要是为了把仿真时间压下来。
5.2 给想复现的同学的几个建议
先说最实在的一条:先跑通纯FBMC-OQAM的基线,再往上加SC-FDMA的DFT扩频。如果基线本身BER和PAPR都不对,混合后的问题会叠在一起,几乎无法定位。
第二条建议是,每次只改一个变量。比如这次只对比“有无DFT扩频”,其他参数全部固定;下次只对比“集中式vs分布式映射”。混合调制方案本身就是参数敏感型系统,一次改太多东西,最后看到的曲线差异你根本不知道来自哪个改动。
第三条建议是,PAPR曲线和BER曲线要放在同一张图里看。同一个方案如果PAPR降了2dB但BER平台多了1dB,很难说是进步。只有两个指标同时满足场景要求,才说明这个参数组合是可用的。
最后想提醒的是,Matlab里做这种波形仿真,向量化不是越快越好。OQAM的嵌套循环在调试时更容易发现问题,向量化之后的数组索引出错更难发现。我的习惯是先写循环版本,跑通和做性能基线,再用向量化重构一版做大规模统计。这样既保证了正确性,也保住了效率。
实操中还有一个不起眼但很关键的小技巧:滤波器归一化最好在频域完成,而不是只在时域把能量归一。直接用ifft出来的脉冲是双端的,如果在时域做峰值归一,可能在带外能量上和理论原型有微小偏差。这个小偏差在单个符号上不明显,积累到多符号重叠相加后,就会让PAPR统计出现零点几个dB的误差。
我个人在这些折腾里最大的体会是,混合波形的价值从来不是某个指标单点最优,而是在“PAPR、时延、谱效率”三者之间多出一个可调维度。通过M点DFT块长、子载波映射方式、重叠因子K这三个旋钮,你可以在不同业务需求之间平滑切换,而不是为了一个指标牺牲掉另外两个。把这条链路做成Matlab原型后,后续无论是换滤波器、换预编码、还是接多用户调度,都只是在同一套骨架上做局部替换。这一点,比单点性能优化更值得投入时间。