4. 训练序列设计:PN序列、CAZAC序列,长度与功率选择原则
训练序列这玩意儿,说简单也简单,说深了真能折腾人。我早年做单载波均衡时,选错序列类型,结果整个系统误码率直接下不去——嗯,那时候才意识到,序列设计不是随便填个伪随机数就行的。
说白了,训练序列主要用来做信道估计、同步和均衡器系数预训练。通信系统里常见两大类:PN序列和CAZAC序列。别急,咱们一个一个拆开看。
4.1 PN序列:工程里最皮实的选手
PN序列(Pseudo-Noise),我最常用的是m序列和Gold序列。m序列自相关性能好,只有一个主峰,这点在扩频系统里特别香。但m序列数量有限,比如7阶m序列才6条,多用户场景不够用。
我记得有一次做多用户上行信道估计,用户数一多m序列不够分,只好上了Gold序列。Gold序列由两个优选对m序列模2加生成,数量翻了几倍,互相关也还行。但代价是自相关性能稍微差一点——工程嘛,就是权衡。
4.2 CAZAC序列:恒包络的稳定担当
CAZAC序列全称是恒包络零自相关序列,代表选手是Zadoff-Chu序列。这玩意儿在LTE/NR的PSS、SRS里是标配,为啥?因为它时域恒包络,峰均比(PAPR)低,功放效率高;自相关是完美的冲激函数,互相关也接近零。
我自己做个实验,同样长度64,ZC序列的自相关旁瓣比m序列低了将近10dB。这个差距在低信噪比下就是生死线。
% MATLAB 生成 Zadoff-Chu 序列(根索引 u=1,长度 N=63 质数)
N = 63;
u = 1;
n = 0:N-1;
zc_seq = exp(-1j * pi * u * n .* (n+1) / N);
% 检查恒包络:abs(zc_seq) 应全为 1
disp(['PAPR = ', num2str(max(abs(zc_seq).^2)/mean(abs(zc_seq).^2))]);
4.3 长度选择原则:既不能长到浪费,也不能短到失效
长度L的选择,我总结三个硬约束:
- 信道时延扩展约束:L必须不小于信道最大多径时延(以采样点计),否则循环前缀或保护间隔都盖不住。
- 频率选择性约束:在OFDM系统里,L越长意味着频域采样越密,信道估计越准。但长度受限于资源块(RB)大小。
- 开销约束:训练序列占用的时频资源不能超过总开销的10%,否则有效数据吞吐掉得厉害。
我通常在工程设计里按这个思路选:先估算信道最大时延扩展,比如城市环境5μs,采样率30.72MHz,对应约154采样点,那么L取128或256都行。再算一算开销,若一个子帧里放2个训练符号,开销约5%,能接受。
| 场景 | 典型信道时延 | 推荐L | 序列类型 |
|---|---|---|---|
| 室内小蜂窝 | 0.1~0.5 μs | 16 ~ 32 | m序列 / ZC |
| 城市宏站 | 1~5 μs | 64 ~ 256 | ZC / Gold |
| 郊区/山区 | 5~20 μs | 256 ~ 1024 | ZC(质数长度) |
4.4 功率选择原则:别让训练序列吃掉动态范围
功率这块,很多新人上来就把训练序列功率开到最大,觉得信噪比越高越好。其实不是。训练序列功率太大会导致数据符号的功率被压缩,整体系统的峰均比恶化,功放更容易饱和。
我自己有个原则:训练序列的功率与数据符号的平均功率保持同一量级,差值控制在0~3dB以内。当然,LTE/NR标准里SRS和PSS的功率是单独配置的,可以比数据高2~3dB,但那是因为它们不用同时发射。
另外,若使用CAZAC序列,恒包络可以让功放一直工作在最佳效率点。而PN序列有包络波动,功率回退(backoff)得更多。这一点在功率预算紧张的物联网场景里尤为重要。
4.5 序列选择流程图(知识体系)
4.6 实践避坑:我踩过的几个雷
- PN序列的直流分量:有些m序列初相设置不对,会产生直流分量,导致时域同步误判。我习惯把初相全置1,生成后检查均值是否接近零。
- ZC序列的根索引选择:不同根索引的ZC序列互相关不相同。我一般避开两个相邻根,比如u=1和u=N-1互相关最小,但u=1和u=2互相关就大一点。曾经因为用了相邻根,多用户干扰直接让SINR掉了3dB。
- 功率分配过猛:有次为了提升信道估计精度,我把训练序列功率比数据高了6dB,结果功放饱和导致星座图扭曲,均衡器怎么调都调不过来——只能降功率重测。从那以后,我记住:功放动态范围是王道。