ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RLS算法在MIMO卫星信道均衡中的Matlab仿真与调参实践

RLS算法在MIMO卫星信道均衡中的Matlab仿真与调参实践 上个月我在调一套 2×2 MIMO 卫星链路的仿真信道用的是典型 Rician 模型K 因子 10dB、多径 3 径。按理说这种信道不算难可我把 LMS 均衡器扔进去跑了 2000 个符号MSE 还拖着一条长尾巴下不来星座图四个簇糊成一片。后来换成 RLS不到 100 个符号就收敛了同样的信道和信噪比误码率直接降了两个数量级。这篇就把这套基于 RLS 算法的 MIMO 卫星信道均衡化方案完整拆开从卫星信道为什么难均衡、为什么选 RLS 而不选 LMS/CMA到 2×2 MIMO 链路的 Matlab 仿真搭建、RLS 均衡器代码逐段实现再到我实际调参时踩过的坑和最终的收敛/误码结果。所有代码都是可运行级别你拿回去改改参数就能用。1. 卫星MIMO信道为什么这么难均衡——先看清干扰来源1.1 莱斯信道弱多径在高信噪比下的主导作用很多人觉得卫星信道就是加性高斯白噪声信道因为卫星链路视距传播占主导信道里的多径成分很弱。这个印象对了一半卫星信道的确有一个很强的直射分量LoS但地面上各种反射物体——建筑物、山体、车载平台周围的地面反射——会叠加出多个幅度小但不可忽略的散射径。工程上通常用 Rician 信道描述这种场景h sqrt(K/(K1)) * h_LoS sqrt(1/(K1)) * h_scatterK 因子是直射分量功率与散射分量功率的比值卫星场景下的 K 因子一般落在 8~20dB视环境和仰角而定。K 因子越高信道越接近纯 AWGN但 K 因子只有 10dB 时散射分量的功率其实已经占到总功率的约 9%这部分能量造成的符号间干扰ISI在低信噪比下被噪声掩盖一旦信噪比拉到 15dB 以上残余 ISI 就会成为误码率的地板。卫星信道还有一个特点是变化相对慢但并不是不变。低轨卫星高速运动或者地面终端移动时多普勒频移能达到几百赫兹到几 kHz信道在数据帧内可以近似看成准静态但在多帧尺度上是时变的。这意味着均衡器不能只做一个固定的滤波器它需要不断跟踪信道的微小变化。我在仿真里建的 Rician 信道用了 3 个抽头的抽头延时线模型LoS 分量放在第一抽头后面两抽头全部来自散射径。这个模型抓住了“弱多径但存在”的本质也是后面 RLS 均衡器要对抗的核心对象。1.2 MIMO收发的“双重干扰”ISI之外还有流间串扰MIMO 系统通过多根天线同时发送多个独立数据流来提升频谱效率卫星通信中一般是地面站多天线、卫星多天线或者移动终端多天线。2×2 MIMO 就是两个发送流、两个接收天线。问题在于每一路接收信号都不是只来自一个发送流。假设第 j 根接收天线在第 n 个时刻收到的信号可以写成y_j(n) sum_{i1}^{M} sum_{l0}^{L-1} h_{ji}(l) * s_i(n-l) v_j(n)其中 h_{ji}(l) 是第 i 个发送天线到第 j 个接收天线的第 l 个信道抽头s_i(n) 是第 i 个发送流在 n 时刻的符号。这个式子直观展示了干扰的两层叠加时间维度上多径把历史的符号混进了当前接收符号形成 ISI空间维度上另一个发送流的符号也混了进来形成流间串扰CCI。单天线均衡只要处理一路信号里的 ISIMIMO 均衡必须同时把 ISI 和 CCI 一起消除。这也是为什么 2×2 MIMO 系统的均衡器输入不能只取某一根接收天线的几个采样点而是要把所有接收天线的时域采样都拼成一个向量联合处理。均衡器本质上是做一个空间-时间联合线性滤波器每个发送流对应一组权重系数输入向量的长度等于接收天线数乘以每个天线取的时域抽头数即 K*N。系数数量越大能消除的 ISI 和 CCI 范围越广但同样过长的滤波器也会积累噪声。1.3 均衡器到底在解什么从MMSE准则说起对于线性均衡器 z_m(n) w_m^H * x(n)w_m 是第 m 个发送流的权重向量x(n) 是所有接收天线拼接出的 K*N 维输入向量目标就是找一组 w_m 让估计值 z_m(n) 和真实发送符号 s_m(n) 足够接近。最常用的准则是最小均方误差MMSE即最小化J(w_m) E{ |s_m(n) - w_m^H x(n)|^2 }这个问题的闭式解就是维纳解w_m R^{-1} * p_m其中 R E{ x x^H } 是输入向量的自相关矩阵p_m E{ x s_m^*(n) } 是输入向量与期望符号的互相关向量。麻烦的地方在于真实信道的统计特性无法提前知道R 和 p_m 只能用实际收到的数据去估计。自适应均衡算法干的就是这件事——在线估计 R 和 p_m并逐步逼近维纳解。LMS 和 RLS 是其中最经典的两条路线但它们在卫星 MIMO 这个场景下的表现差异非常大下面细说。2. 自适应均衡方案选型LMS、CMA和RLS的取舍2.1 LMS收敛慢的根因特征值扩散与固定步长的死结LMS 的原理是梯度下降每次迭代用当前误差的负梯度方向更新权重更新公式是 w(n1) w(n) mu * x(n) * convolve e^*(n)。实现简单、复杂度低但它的收敛行为有一个致命限制收敛速度和稳态误差都由同一个步长 mu 控制而收敛速度还严重依赖输入自相关矩阵 R 的特征值分布。具体来说LMS 的收敛时间与 R 的最大最小特征值之比即特征值扩散度强相关。如果 R 的条件数接近 1LMS 收敛飞快但卫星多径信道会让接收信号的时域采样之间有很强的相关性R 的特征值扩散度很容易达到几十甚至上百。这种情况下为了保证稳定mu 必须取得足够小收敛自然慢得让人着急。我在仿真里用 2×2 MIMO、3 抽头 Rician 信道时接收信号自相关矩阵的特征值扩散度粗算了一下超过了 50。LMS 要用 2000 个符号才能把 MSE 压到比较低的水平这在突发帧结构的卫星通信中是不可接受的——训练序列不可能占那么长的比例。高信噪比下的另一个问题LMS 稳态误差与 mu 正相关mu 小了收敛慢mu 大了稳态误差高。想要低误码率就得把 mu 压得很小然后耐心等它慢慢磨。这个矛盾在时变的卫星信道里几乎无解。2.2 盲均衡CMA在MIMO场景的局限CMA恒模算法经常被拿来做卫星信道的盲均衡因为它不需要训练序列直接利用信号恒包络的特性。QPSK 信号确实恒包络CMA 在单输入单输出的 QPSK 链路上表现还行。但在 MIMO 场景下CMA 有两个很实际的问题第一CMA 对高阶 QAM 信号天然不友好。卫星链路如果要上 16QAM、64QAM 来提高频谱效率信号幅度不再是常数恒模准则失效。当然有人做多模算法MMA去适配 QAM但复杂度上去了收敛性能也不稳定。第二MIMO 盲均衡要同时解决盲分离和盲均衡两个问题。CMA 本身没有区分不同发送流的能力多流情况下经常收敛到错误的解——比如两个流都收敛到同一个发送流的拷贝另一个流完全丢失。要避免这种“误收敛”需要用额外的约束条件或者多路联合算法复杂度远高于有训练的 RLS。盲均衡省掉了训练开销但付出的代价是算法结构和调参上极大的不确定性。卫星通信链路一般都有导频或者同步序列训练序列完全用得起没必要为了省那几百个符号去硬凹盲均衡。2.3 RLS为什么快递归矩阵求逆的“拟牛顿”视角RLS 的核心思想可以概括成一句话它显式地维护着输入自相关矩阵逆矩阵 R^{-1} 的估计每次来一个新样本就用矩阵求逆引理把 R^{-1} 更新一下然后直接沿着“牛顿方向”修正权重。矩阵求逆引理Woodbury 恒等式说的是如果 A 加上一个秩 1 修正那么 A^{-1} 也能直接用一个简单公式修正不需要重新求逆。RLS 正是利用这一点把每一步的计算量控制在 O(N_dim^2)而不是每次重新做一次矩阵求逆的 O(N_dim^3)。具体迭代如下增益向量g(n) P(n-1) x(n) / (lambda x(n)^H P(n-1) x(n))误差e(n) d(n) - w(n-1)^H x(n)权重更新w(n) w(n-1) g(n) * conj(e(n))逆矩阵更新P(n) (P(n-1) - g(n) x(n)^H P(n-1)) / lambda其中 P(n) 就是 R^{-1} 的在线估计lambda 是遗忘因子决定过去样本对当前估计的影响权重。为什么 RLS 对特征值扩散不敏感因为它的增益向量 g(n) 里带了 P(n-1)相当于对不同方向的梯度分量做了归一化处理——相当于是把整个坐标空间“白化”之后再更新权重。牛顿法比梯度下降法收敛快的原因就在这RLS 就是统计信号处理里的拟牛顿法。理论上 RLS 的收敛速度在理想情况下只和滤波器阶数有关大约几十个符号就能收敛和信道特征值分布基本无关。代价也很清楚LMS 每步复杂度 O(KN)RLS 每步 O((KN)^2)。对 2×2 MIMO、K5 的小规模系统每步是 100 次复数乘法的量级Matlab 仿真完全跑得动。如果未来扩到 4×4 MIMO、K15那就需要考虑快速 RLS 变体了这个后面避坑章节再聊。2.4 三种算法在卫星MIMO场景下的综合对比把我调参过程中的实际感受列个表方便你根据自己的链路特点选型算法收敛速度稳态MSE每步复杂度特征值扩散敏感度卫星MIMO适用性LMS慢千级符号受mu限制偏高O(KN)高度敏感不推荐跟踪差CMA中等但易误收敛有残差均衡不彻底O(KN)中等不适合MIMORLS快几十到百级符号接近理论MMSEO((KN)^2)低推荐训练可得如果你的系统是纯 QPSK、无训练序列、SISO 卫星信道CMA 也许够用但只要是 MIMO 且能容忍短训练序列RLS 基本是首选。3. 仿真系统搭建Rician信道、帧结构与收发链路3.1 系统参数与帧结构设计我采用的系统配置如下兼顾了仿真速度和场景代表性参数取值发送天线数 M2接收天线数 N2信道抽头数 L3每接收天线均衡抽头数 K5调制方式QPSK每流总符号数4000训练符号数200遗忘因子 lambda0.99P矩阵初值 delta1.0仿真EbN0范围0~20dB帧结构是“训练数据”的经典格式前 200 个符号是接收端已知的训练序列用来让 RLS 收敛并完成权重初始化后面 3800 个符号是业务数据均衡器切换到判决引导模式Decision-Directed继续在线跟踪。200 个训练符号对应 2×2 MIMO、K5 的 10 维权重训练长度是权重维数的 20 倍足够 RLS 完成初始化收敛。3.2 Rician信道的Matlab建模简化卫星信道建模我不想搞得太复杂重点是体现“强视距弱多径”的特征。实现时每个收发天线对独立生成 3 抽头信道LoS 分量集中到第一抽头% 生成Rician信道每个收发对归一化功率为1 M 2; N 2; L 3; K_dB 10; K_lin 10^(K_dB/10); H zeros(N, M, L); for ntx 1:M for nrx 1:N h_los sqrt(K_lin/(K_lin1)) * exp(1i*2*pi*rand); h_scat sqrt(1/(K_lin1)) * (randn(1,L) 1i*randn(1,L))/sqrt(2); h h_los .* (1:L1) h_scat; % 每对收发天线总功率归一化为1 H(nrx,ntx,:) h(:) / sqrt(sum(abs(h(:)).^2)); end end注意最后一步归一化每对收发信道的总功率归一化成 1接收端总信号功率就大致等于发送流数乘以接收天线数噪声功率按照目标 EbN0 去反推。这样不同信道实现之间的信噪比才有可比性否则每次随机信道功率不同误码率曲线波动会非常大。LoS 分量做法上我用(1:L1)把直射能量只放在第一抽头散射分量覆盖所有抽头。这符合卫星信道视距径最先到达、反射径随后到达的物理直觉。3.3 接收信号模型与卷积实现细节发送数据流是两个独立的随机 QPSK 符号序列。接收信号通过线性卷积生成逐天线累加% QPSK调制 mapping (1/sqrt(2)) * [11i, 1-1i, -11i, -1-1i]; % 随机发送数据 训练序列 Nsym 4000; Ntrain 200; S zeros(M, Nsym); S(:,1:Ntrain) mapping(randi([1 4], M, Ntrain)); S(:,Ntrain1:end) mapping(randi([1 4], M, Nsym-Ntrain)); % 多径信道卷积 Y zeros(N, Nsym); for nrx 1:N for ntx 1:M h squeeze(H(nrx,ntx,:)); % L x 1 tmp conv(h, S(ntx,:)); Y(nrx,:) Y(nrx,:) tmp(L:end); % 截断边界 end end % 加噪 EbN0dB 15; EbN0 10^(EbN0dB/10); signal_power mean(abs(Y(:)).^2); N0 signal_power / (2*EbN0); % QPSK每符号2bit Y Y sqrt(N0/2)*(randn(N,Nsym) 1i*randn(N,Nsym));卷积截断这里要提一句线性卷积长度是 NsymL-1我把前 L-1 个采样丢掉保留从第 L 个采样开始的 Nsym 个点。这样做的目的是避开信道卷积的建立过程——前几个接收采样里只有最早到达的抽头有能量信息不完整均衡器学习时会产生不必要的边界误差。丢弃之后第 n 个接收采样就包含第 n 个发送符号及其之前的历史符号均衡器的期望标签可以直接用 S(:,n)。这个设计里隐含一个同步假设接收端已经知道训练序列的起始位置也就是帧同步已经完成。实际工程中帧同步是另一套独立的流程可以用导频相关或者前导码捕获来解决这里不展开。4. RLS均衡器Matlab实现从递推公式到可运行代码4.1 RLS五步递推的复数域写法复数域和实数域有一个容易被新手忽略的地方误差的共轭。权重更新公式是 w(n) w(n-1) g(n) * conj(e(n))不是直接乘 e(n)。原因是梯度是对权重向量的共轭求导误差项要跟着取共轭。很多第一次手写复数 RLS 的人在这会写错表现就是算法怎么调都不收敛或者收敛极其不稳定。完整的迭代流程算滤波器输出z(n) w(n-1)^H x(n)算误差e(n) d(n) - z(n)计算增益向量g(n) P(n-1) x(n) / (lambda x(n)^H P(n-1) x(n))更新权重w(n) w(n-1) g(n) conj(e(n))更新逆矩阵P(n) (P(n-1) - g(n) x(n)^H P(n-1)) / lambda每一步的向量维度都等于 K*N也就是 10 维。第 3 步的分子是矩阵乘向量分母是个标量——这个标量的实部通常还要做一次real()取实防止数值上出现微小的虚部残留干扰计算。4.2 主程序共享P矩阵的多输出RLSMIMO 场景下多个发送流共用同一个输入向量 x(n)区别只在于各自的期望符号 d_m(n)。这意味着增益向量 g(n) 和 P(n) 的更新对所有输出流是完全一致的可以先算一次再分头更新每个 w_m省掉大量重复计算。% RLS参数 lambda 0.99; delta 1.0; Pm delta * eye(K*N); W zeros(K*N, M); % 每个发送流一组权重 mse_log zeros(1, Nsym); % 均衡主循环 for n 1:Nsym % 构造输入向量所有接收天线当前及前K-1时刻采样 x zeros(K*N, 1); idx 0; for nrx 1:N for k 0:K-1 if n-k 1 x(idxk1) Y(nrx, n-k); else x(idxk1) 0; end end idx idx K; end % 滤波器输出两个发送流 z W * x; % M x 1 % 期望信号训练段用导频数据段判决引导 if n Ntrain d S(:, n); else d (sign(real(z)) 1i*sign(imag(z))) / sqrt(2); end % 共享增益向量 denom lambda real(x * Pm * x); g Pm * x / denom; % 逐个流更新权重 for m 1:M e d(m) - z(m); W(:,m) W(:,m) g * conj(e); end % 更新逆矩阵 Pm (Pm - g * (x * Pm)) / lambda; % 记录误差 mse_log(n) mean(abs(d - z).^2); end这段代码有几个设计决策值得展开权重矩阵 W 用(K*N) x M的格式每一列对应一个发送流的均衡器。滤波器输出 z W*x 一次性算完两个流的估计比循环里面逐个算更高效。判决引导阶段用sign(real(z)) 1i*sign(imag(z))做 QPSK 硬判决简单直接。因为训练阶段已经让权重收敛到基本正确的位置数据阶段的判决错误率很低判决引导可以持续跟踪信道的缓慢变化。如果换了 16QAM硬判决函数要改成按最短欧氏距离映射不能再用 sign。输入向量构造时if n-k 1这个边界判断对应的是数据帧开头的缺历史样本问题。前 K-1 个符号的输入向量里有一部分是零填充这会让最开始几次迭代的误差偏大但由于训练序列长度远超 K对整体收敛影响可以忽略。4.3 训练-判决引导切换决策引导的风险窗口训练到判决引导的切换时机是一个必须注意的操作细节。切太早RLS 还没收敛判决错误率高反馈回去之后会出现所谓的“误码蔓延”——一个判决错误会让后续权重更新方向错误然后引发更多错误最终整个均衡器锁死在一个错误状态下。我在这套仿真里留了 200 个训练符号是 10 维权重维数的 20 倍。实际测试中2×2 MIMO、K5 的情况下 RLS 大概 30~60 个符号就能收敛到稳态附近200 个训练符号留了充足的余量也方便你观察收敛曲线。作为参考经验训练序列长度至少取滤波器维度数的 3~5 倍这是我做突发链路时常用的保守准则。从另一个角度说RLS 的优点就在这体现出来了如果换成 LMS200 个训练符号在特征值扩散度为 50 的信道上可能刚收敛到一半战斗已经结束了。5. 仿真结果分析收敛曲线、星座图与误码率5.1 MSE收敛对比RLS打了LMS一个“信息差”我在相同信道、相同信噪比下跑了 RLS 和 LMS 的对比。收敛曲线上的差异非常直观RLS 大约在第 50 个符号就把 MSE 压到稳态水平附近而 LMS 用步长 mu0.02跑到第 1000 个符号还在缓慢下降稳态 MSE 还比 RLS 高出一截。如果强行给 LMS 加大步长到 mu0.05收敛快了但稳态 MSE 明显抬升误差在星座图上表现为更厚的散射点云。这个现象印证了第 2 章的结论RLS 利用的是输入自相关矩阵的二阶统计信息相当于用牛顿法的收敛速度逼近维纳解LMS 只有一阶梯度信息在病态矩阵上只能走“之字形”的缓慢下山路。从实现复杂度上做非对称对比也很有意思RLS 每步共享 P 矩阵后10 维滤波器的开销主要是两次矩阵向量乘计算 g 和更新 P单步计算量大概相当于 LMS 的 20~30 倍。但 LMS 要花 50 倍以上的符号数才能达到接近的收敛水平从“总计算量×总时长”来算RLS 反而更划算——这在实时突发仿真里是一个经常被低估的点。5.2 星座图与误码率数值观察收敛之后看星座图没有均衡的输出星座图严重发散四个 QPSK 簇边界模糊大量符号跨越判决区域RLS 均衡后的星座点凝聚成清晰的四个簇散射半径随着信噪比提升明显收缩。LMS 均衡在中等信噪比下也能看但稳态误差导致星座点周围始终罩着一层“雾”这是固定步长带来的不可消除的额外噪声。误码率仿真我做了 0~20dB 的扫描每次随机生成信道并做 20 次蒙特卡洛取平均这里给出一次典型运行的数值EbN0 (dB)无均衡 SERLMS SERRLS SER00.310.180.1250.280.090.04100.250.050.008150.230.040.0012200.220.0382e-4无均衡的情况在高信噪比下出现明显地板SER 卡在 0.2 左右这就是多径 ISI 和流间串扰不可消除的残余干扰LMS 也出现了缓慢下降但仍偏高的地板这是固定步长稳态失调贡献的RLS 的 SER 曲线基本贴着理想 QPSK 的误码率曲线走20dB 下已经没有统计显著的错误。这里补充一个观察卫星信道如果 K 因子继续抬高到 18dB 以上多径更弱无均衡的地板会往下掉RLS 的优势就不再那么夸张。但如果终端处于移动状态多普勒引入信道的时变性RLS 的跟踪优势会重新凸显。仿真场景的选择会影响结论建议你根据自己关心的链路条件调整 K 因子和移动速度重跑一遍。6. 调参经验与工程落地避坑手册6.1 协方差矩阵初值delta为什么我一开始就吃了亏RLS 的 P 矩阵初始值 delta*I 是新手最容易翻车的地方。我第一次跑仿真时图省事把 delta 设成了 0.001结果前 50 个符号的误差直接飙到 10 以上整个 P 矩阵病态得像要爆炸。后来把 delta 调成 1.0前几十步就稳住了。原因是这样的P 矩阵的初始值相当于对 R^{-1} 的先验估计如果它远远小于真实的 R^{-1} 量级增益向量 g 在初始阶段会被压得极低权重更新跟不上信号的统计特性变化误差就会在一个不正确的方向上积累。反过来delta 取得太大又会让初始增益过高权重抖动剧烈收敛变慢。实用的取法有两种先用一小段接收数据估一下输入向量功率delta 取输入功率倒数的一个量级。比如 x 平均功率为 1delta 取 1~10直接按经验范围来对归一化信号delta 的推荐区间是 0.1~1010 是安全值1 是常用值。如果做完归一化后你的信号功率量级不同delta 也要跟着缩放否则就得重新试。6.2 遗忘因子lambda的选择跟踪能力与稳态精度的折中遗忘因子 lambda 控制的是 RLS 对历史数据的记忆长度等效记忆窗口大约 1/(1-lambda) 个符号。lambda0.99 时记忆约 100 个符号lambda0.999 时记忆约 1000 个符号。卫星信道变化慢可以取较大的 lambda 来追求稳态精度但 lambda 太大对突发多普勒的跟踪会迟钝。我的经验区间lambda等效记忆收敛速度稳态MSE适用场景0.9520个符号快偏高快速时变信道0.99100个符号较快较低中速时变/准静态信道0.9991000个符号偏慢接近理论极限准静态卫星信道在仿真里我把 lambda 取 0.99这是对收敛速度和跟踪性能都有余量的中间值。如果你信道的多普勒很明显可以改成 0.975 左右但要接受稳态 MSE 小幅抬升的代价。注意lambda 的调节必须配合同样调整训练长度lambda 太小时训练阶段可能还没收敛就结束了。6.3 均衡器长度K和训练序列长度的配合均衡器长度 K 决定滤波器能消除多少范围内的多径干扰。一个简单的匹配原则K 至少要大于等于信道抽头数 L否则均衡器的观察窗口覆盖不了所有多径延迟残余 ISI 无法消除。但 K 也不是越大越好。滤波器维数增加到 N*K一方面训练需要更多符号才能可靠估计另一方面每个权重都会引入额外噪声高信噪比下 K 过大的代价是稳态 MSE 小幅恶化。在我的 3 抽头信道模型下K5 留了两抽头的余量兼顾性能和鲁棒性。这里给一个一般性建议先通过信道估计或者测量得到多径时延展宽然后取 K L 2~3 作为初始值。如果仿真结果里星座图还有明显的拖尾云团优先想到是不是 K 不够如果训练序列已经很长但星座图仍然发毛优先怀疑是不是 K 过长导致过拟合。训练序列长度和 K 是绑定的关系训练长度尽量大于 10NK这样才能保证 R 和 p 的估计有足够的统计稳定性。我用的 200 符号训练对应 10 维滤波器已经留了很大余量实际缩到 100 个符号也可以工作但余量越大对判决引导阶段越友好。6.4 P矩阵退化与数值稳定性处理标准 RLS 在理论上是数值稳定的但在有限精度运算下P 矩阵的正定性可能随着时间缓慢丧失尤其是输入信号动态范围大、帧长很长时。P 矩阵一旦失去正定增益向量 g 的幅度和方向都会出错均衡器性能会突然崩塌。我从实际仿真里总结出三个实用的加固手段在每次 P 更新后做对称化处理Pm (Pm Pm)/2。这个操作能抵消浮点运算积累的对称性偏差成本很低在 P 更新后加一个小量正则项Pm Pm 1e-8*eye(size(Pm))防止 P 的特征值退化到接近零如果计算资源允许改用平方根 RLS 或带 QR 分解的 RLS 变体。这类算法维护的是 P 的平方根因子理论上保证半正定数值稳定性大幅提升代价是代码量多一截。在纯 Matlab 仿真里我用方案 1 和 2 就够用了如果要把算法移植到定点硬件或者做长帧连续跟踪平方根 RLS 基本是必须的。6.5 判决引导阶段的“防复发”细节判决引导模式有一个天然的隐患一旦某个数据符号被判决错误这个错误会被当作参考信号反馈回去污染权重更新。单个孤立错误影响有限但如果信道发生了突变导致一阵连续判决错误均衡器完全可能被带偏到无法自恢复。应对策略有两种工程上很常见一是在数据帧中周期性地插入已知导频符号让 RLS 定期切换到训练模式重新纠正权重二是对判决做置信度检查比如把软输出幅度作为置信度指标幅度过低时跳过权重更新。第二种做法实现上很简单在更新循环里加一个条件判断即可但需要谨慎设置阈值。在我这套仿真里准静态信道下判决引导很稳没有出现误码蔓延。但如果你把场景改成多普勒较强的移动卫星链路强烈建议加上周期导频。最后再分享一个小技巧用 RLS 做 MIMO 均衡时训练序列不要全用随机 QPSK 符号可以尝试 Zadoff-Chu 序列。它具有恒包络和理想循环自相关特性能让输入自相关矩阵 R 在训练阶段更快接近对角占优P 矩阵的初始收敛会更平稳。这个改进在信道条件较差时尤其明显代码只需要替换训练序列生成那几行值得一试。
返回列表