主要内容

不同均衡器的误码率性能

这个例子展示了在通带为零的静态信道中几种均衡器的误码率性能。本例构造并实现了一个线性均衡器对象和一个决策反馈均衡器(DFE)对象。它还初始化并调用最大似然序列估计(MLSE)均衡器。MLSE均衡器首先使用完美的信道知识调用,然后使用直接但不完美的信道估计技术。

随着模拟的进展,它更新一个误码率图,用于比较分析之间的均衡方法。并给出了线性均衡和DFE均衡信号的信号谱。结果表明,在低BERs条件下,MLSE算法和DFE算法都存在错误突发。特别是,与正确的比特反馈相比,检测比特反馈的DFE错误性能是突发的。最后,在“不完善”的MLSE部分的仿真,它显示和动态更新估计的信道响应。

为了实验这个例子,你可以改变这些参数,如信道脉冲响应,均衡器挑出权值的数量,递归最小二乘(RLS)遗忘因子,最小均方(LMS)步长,MLSE回溯长度,估计信道长度中的误差,和在每个Eb/No值收集的最大错误数。

代码结构

此示例依赖于这些助手脚本和函数来执行一系列Eb/No值的链接模拟。

eqber_adaptive.m-一个脚本,运行链接模拟线性和DFE均衡器

eqber_mlse.m-一个脚本,运行链路模拟理想和不完美的MLSE均衡器

eqber_siggen.m-一个脚本,产生一个二元相移键控(BPSK)信号没有脉冲整形,然后通过通道处理它,并添加噪声

eqber_graphics.m-生成和更新显示线性、DFE和MLSE均衡器性能的图的函数。

脚本eqber_adaptive和eqber_mlse说明了如何跨多个数据块使用adaptive和MLSE均衡器,以便在数据块之间保留状态信息。

信号及信道参数

设置信号和信道相关参数。使用没有任何脉冲整形的BPSK和5抽头实值对称信道脉冲响应。(见J. Proakis的《数字通信》第4版第10.2.3节,了解更多频道的细节。)设置数据和噪声发生器的初始状态。设置Eb/No范围。

系统仿真参数Fs = 1;采样频率(概念)nBits = 2048;每个向量的BPSK符号的%数目maxErrs = 200;每个Eb/No的目标错误数%maxBits = 1 e6;每个Eb/No的最大符号数%%调制信号参数M = 2;调制阶Rs = f;%符号率nSamp = Fs / Rs;每符号样本百分比Rb = Rs * log2 (M);%比特率%信道参数CHNL = [0.134 0.134]';信道脉冲响应chnlLen =长度(chnl);%通道长度,在样品中EbNo = 0:14;在dB %1 = 0(大小(EbNo));%初始化值%创建BPSK调节器bpskMod = comm.BPSKModulator;%为随机数生成器指定种子以确保可重复性。rng (12345)

自适应均衡器参数

设置线性和DFE均衡器的参数值。使用一个31抽头线性均衡器,和一个具有15个前馈和反馈抽头的DFE。对第一个数据块采用递归最小二乘(RLS)算法,保证抽头快速收敛。之后使用最小均方(LMS)算法以保证快速的执行速度。

线性均衡器参数nWts = 31;重量百分比algType =RLS的;% RLS算法forgetFactor = 0.999999;%参数的RLS算法% DFE参数-使用与线性均衡器相同的更新算法nFwdWts = 15;%前馈权值的个数nFbkWts = 15;%反馈权值

MLSE均衡器和信道估计参数和初始可视化

设置MLSE均衡器的参数。使用六倍于信道脉冲响应长度的回溯长度。初始化均衡器状态。将均衡模式设置为“连续”,可实现对多个数据块的无缝均衡。在信道估计技术中使用循环前缀,并设置前缀的长度。假设信道脉冲响应的估计长度比实际长度长一个样本。

% MLSE均衡器参数tbLen = 30;% MLSE均衡器回溯长度numStates = M ^ (chnlLen-1);格状状态的百分比[mlseMetric, mlseStates mlseInputs] =交易([]);const =星座(bpskMod);%的信号星座mlseType =“理想”;%完美信道估计mlseMode =“合同”;%没有MLSE复位信道估计参数chnlEst = chnl;初始完全估计prefixLen = 2 * chnlLen;循环前缀长度%excessEst = 1;估计信道脉冲响应的%长度%超出真实长度%初始化模拟图形。绘制非均衡通道%频率响应,以及理想BPSK系统的误码率。idealBER = berawgn (EbNo,相移键控的米,“nondiff”);(hb、hLegend legendString、hLinSpec hDfeSpec,赫尔,hText1, hText2,...hFit、hEstPlot hFig、hLinFig hDfeFig] = eqber_graphics (“init”...chnl、EbNo idealBER nBits);

构造RLS和LMS线性和DFE均衡器对象

采用RLS更新算法调整均衡器抽头权重,并将参考抽头设置为中心抽头。

linEq = comm.LinearEqualizer (“算法”algType,...“ForgettingFactor”forgetFactor,...“NumTaps”nWts,...“星座”常量,...“ReferenceTap”圆(nWts / 2),...“TrainingFlagInputPort”,真正的);dfeEq = comm.DecisionFeedbackEqualizer (“算法”algType,...“ForgettingFactor”forgetFactor,...“NumForwardTaps”nFwdWts,...“NumFeedbackTaps”nFbkWts,...“星座”常量,...“ReferenceTap”圆(nFwdWts / 2),...“TrainingFlagInputPort”,真正的);

线性均衡器

运行线性均衡器,并绘制每个数据块的均衡信号频谱、误码率和突发错误性能。注意,随着Eb/No的增加,线性均衡的信号频谱有一个逐步加深的零值。这强调了一个事实,线性均衡器必须有更多的轻拍,以充分均衡一个深零通道。还需要注意的是,错误发生的误差间隔很小,这在如此高的错误率下是可以预料的。

看到eqber_adaptive.m获取自适应均衡器的仿真代码列表。

firstRun = true;标记以确保噪声和数据的已知初始状态eqType =“线性”;eqber_adaptive;

判决反馈均衡器

运行DFE,并绘制每个数据块的均衡信号频谱、误码率和突发错误性能。请注意,DFE比线性均衡器更能缓解信道零值,如频谱图和误码率图所示。绘制在给定Eb/No值上的BER点会在每个数据块上更新,因此它们会根据该块中收集到的错误数量向上或向下移动。还需要注意的是,DFE错误是突发的,这是由于反馈检测到的比特而不是正确的比特造成的错误传播。突发错误图显示,随着误码率的降低,出现显著数量的错误,误差到达为5位或更少。(如果DFE均衡器始终以训练模式运行,那么错误就不会那么频繁。)

对于每个数据块,如果这些错误是随机发生的,该图还表明平均误差间隔。

看到eqber_adaptive.m获取自适应均衡器的仿真代码列表。

关闭(hFig (ishghandle (hFig)));eqType =“教育部”;eqber_adaptive;

理想的MLSE均衡器,具有完美的信道知识

以一个完美的信道估计运行MLSE均衡器,并绘制每个数据块的误码率和突发错误性能。请注意,错误以一种非常突然的方式发生。观察,特别是在低ber时,绝大多数的错误发生在一个或两个比特的错误间隔。

看到eqber_mlse.m列出了MLSE均衡器的仿真代码。

关闭(hLinFig (ishghandle (hLinFig)), hDfeFig (ishghandle (hDfeFig)));eqType =“mlse”;mlseType =“理想”;eqber_mlse;

具有不完美信道估计的MLSE均衡器

以一个不完美的信道估计运行MLSE均衡器,并绘制每个数据块的误码率和突发错误性能。这些结果与理想的MLSE结果相当接近。(信道估计算法高度依赖于数据,因此一个传输数据块的FFT没有空值。)请注意,估计的信道图与实际的信道频谱图是如何比较的。

看到eqber_mlse.m列出了MLSE均衡器的仿真代码。

mlseType =“不完美”;eqber_mlse;