用恒模算法进行盲自适应均衡的MATLAB仿真

合集下载

基于MATLAB的自适应均衡器的研究毕业论

基于MATLAB的自适应均衡器的研究毕业论

基于MATLAB的自适应均衡器的研究毕业论自适应均衡器(Adaptive Equalizer)是一种用于消除信号传输中的失真影响的信号处理器。

在通信系统和数码信号处理中,信号在传输过程中容易受到噪声干扰和信号失真的影响,从而导致接收端的信号质量下降。

自适应均衡器通过根据接收端的反馈信息,调整均衡器的参数来补偿信号传输中的失真影响,从而提高信号质量。

MATLAB是一种广泛应用于科学和工程领域的高级计算机语言和环境。

它提供了丰富的工具和函数库,可以方便地进行信号处理和模拟仿真。

基于MATLAB的自适应均衡器研究可以通过建立模型、仿真实验和性能评估来实现。

首先,在MATLAB中可以通过建立自适应均衡器模型来进行研究。

自适应均衡器的基本原理是根据接收信号和已知的传输信号之间的差异,调整均衡器的系数来补偿信号失真。

在MATLAB中,可以根据特定的信道模型和均衡算法来实现自适应均衡器模型。

其次,通过进行仿真实验可以验证自适应均衡器的性能。

在MATLAB 中,可以生成各种类型的信号,并通过添加噪声和失真来模拟信号传输中的实际情况。

然后,使用自适应均衡器模型来对仿真信号进行处理,并比较处理前后的信号质量。

通过观察误码率、信号噪声比等指标,可以评估自适应均衡器的性能。

最后,可以使用MATLAB进行自适应均衡器的性能分析和优化。

通过调整均衡器的参数和算法,可以优化自适应均衡器的性能。

MATLAB提供了各种工具和函数库,如优化算法工具箱、信号处理工具箱等,可以帮助研究人员快速分析和优化自适应均衡器的性能。

总之,基于MATLAB的自适应均衡器的研究可以通过建立模型、进行仿真实验和性能评估来实现。

MATLAB提供了丰富的工具和函数库,可以方便地进行信号处理和模拟仿真,从而帮助研究人员深入了解和优化自适应均衡器的工作原理和性能。

用恒模算法进行盲自适应均衡的MATLAB仿真

用恒模算法进行盲自适应均衡的MATLAB仿真

用恒模算法进行盲自适应均衡的MATLAB仿真一:仿真内容:1:了解盲均衡算法和CMA算法的原理;2:用CMA算法来仿真4QAM信号;二:算法原理:1:盲均衡算法:一般的均衡器需要训练和跟踪两个时期,在训练时期,需要已知信号的一些特性参数来训练均衡滤波器,或直接周期地发送训练序列。

由于训练序列并非含用户的数据,而占用了信道资源,自然会降低信道的利用率。

另外,在跟踪时期,不发送训练序列,若是信道特性是快速转变的,均衡器的性能将迅速恶化。

盲均衡能够不借助训练序列(即咱们通常所说的“盲”,而仅仅利用所接收到的信号序列即可对信道进行均衡。

换言之,其本身完全不用训练序列,就能够够自启动收敛并避免死锁情形,且能使滤波器的输出与要恢复的输入信号相等。

盲均衡从全然上幸免了训练序列的利用,收敛范围大,应用范围广,克服了传统自适应均衡的缺点,从而降低了对信道和信号的要求。

盲均衡的原理框图如下:在上图中,x(n)为系统的发送序列,h(n)为离散时刻传输信道的冲激响应,其依据所用调制方式的不同,能够是实值,也能够是复值;n(n)为信道中叠加的高斯噪声;y(n)为通过信道传输后的接收序列,同时也是均衡器的输入序列;w(n)为盲均衡器的冲激响应,盲均衡器一样采纳有限长横向滤波器,其长度为L;x为盲均衡器的输出信号,也即通过均衡后的恢复序列。

)(~n且有下式成立:y(n)=h(n)*x(n)+n(n);x=w(n)*y(n)=w(n)*h(n)*x(n);(~n)2:Bussgang算法Bussgang类盲均衡算法作为盲均衡算法的一个分支,是在原先需要训练序列的传统自适应均衡算法基础上进展起来的。

初期的盲均衡器以横向滤波器为大体结构,利用信号的物理特点选择适合的代价函数和误差操纵函数来调剂均衡器的权系数。

这种算法是以一种迭代方式进行盲均衡,并在均衡器的输出端对数据进行非线性变换,当算法以平均值达到收敛时,被均衡的序列表现为Bussgang 统计量。

如何通过MATLAB进行模拟与仿真

如何通过MATLAB进行模拟与仿真

如何通过MATLAB进行模拟与仿真MATLAB是一种用于科学计算、数据分析和可视化的强大工具,它也是进行模拟和仿真的理想选择。

通过MATLAB,用户可以编写脚本或函数来描述和模拟各种现象,并通过可视化结果来验证和分析模拟过程。

在本文中,我们将介绍如何使用MATLAB进行模拟和仿真,包括建模、求解、可视化和分析。

首先,建立一个模型是进行模拟和仿真的第一步。

在MATLAB中,可以使用符号计算工具箱或数值计算方法来建立模型。

符号计算工具箱提供了一种使用符号表达式而不是数值进行计算的方法,这对于一些复杂系统的建模非常有用。

数值计算方法则使用数值解来近似求解模型。

在MATLAB中,可以通过定义变量和方程来建立模型。

例如,假设我们要建立一个简单的弹簧振动系统的模型,可以使用如下的方程:m*x''+k*x=0其中,m是质量,x是位移,k是弹簧常数。

我们可以使用MATLAB的符号计算工具箱来定义这个方程:syms x(t) m keqn = m * diff(x, t, t) + k * x == 0这样,我们就建立了一个描述弹簧振动系统的方程。

接下来,我们需要求解这个方程。

在MATLAB中,可以使用ode45函数来求解常微分方程。

例如,使用ode45函数求解上面的方程,并绘制振动的位移随时间的变化曲线:tspan = [0 10]; % 时间范围x0=1;%初始位移v0=0;%初始速度parameters = {m, k}; % 参数figure;plot(t, x(:, 1))xlabel('时间')ylabel('位移')title('弹簧振动')function dxdt = spring_ode(t, x, m, k)dxdt = [x(2); -k/m * x(1)];end在上面的代码中,我们定义了一个名为spring_ode的函数来描述弹簧振动的常微分方程。

如何利用Matlab进行模拟和仿真实验

如何利用Matlab进行模拟和仿真实验

如何利用Matlab进行模拟和仿真实验Matlab是一种功能强大的数学计算和数据可视化软件。

它不仅可以进行数学模拟和仿真实验,还可以处理数据、绘制图表和实施算法。

在工程、物理学、生物学等领域,Matlab被广泛用于解决各种实际问题。

本文将介绍如何利用Matlab进行模拟和仿真实验,并探讨其在实验设计和结果分析中的应用。

一. Matlab的基本功能Matlab具有很多基本功能,如矩阵操作、数值计算、符号计算等。

这些功能使得Matlab成为进行模拟和仿真实验的理想选择。

在Matlab中,可以定义和操作矩阵,进行线性代数运算,如求解方程组、矩阵求逆等。

此外,Matlab还提供了许多内置函数,可以进行数值计算和符号计算,如求解微分方程、积分、数值优化等。

二. 模拟实验的设计在进行模拟实验之前,首先需要设计实验方案。

实验设计包括选择合适的模型和参数设置,确定实验变量和观测指标等。

在Matlab中,可以使用函数或脚本来定义模型和参数,通过修改参数值来观察实验结果的变化。

比如,可以使用Matlab的模型库来选择合适的模型,然后使用函数传入参数值进行求解。

此外,Matlab还提供了绘图功能,可以绘制实验结果的图表,以便更直观地分析数据。

三. 仿真实验的实施在设计好实验方案后,就可以开始进行仿真实验了。

在Matlab中,可以使用已定义的模型和参数进行仿真计算。

可以通过Matlab的编程功能来实现计算过程的自动化。

比如,可以使用循环语句来迭代计算,以观察参数变化对结果的影响。

此外,Matlab还提供了随机数生成和统计分析函数,可以用于生成随机变量和分析实验数据。

四. 实验结果的分析在完成仿真实验后,需要对实验结果进行分析。

Matlab提供了丰富的数据处理和分析工具,可以对实验数据进行统计分析、绘图和可视化展示。

可以使用Matlab的数据处理函数来计算均值、标准差、相关系数等统计指标。

此外,Matlab还可以通过绘图函数来绘制直方图、散点图、线图等图形,以便更好地理解和展示数据。

如何使用Matlab技术进行模拟仿真

如何使用Matlab技术进行模拟仿真

如何使用Matlab技术进行模拟仿真引言在科学研究和工程设计中,模拟仿真是一种重要的工具。

它可以帮助研究人员和工程师预测和评估系统的性能、优化设计方案、解决问题等。

近年来,Matlab成为了广泛使用的科学计算软件,具有强大的数值计算和仿真功能。

本文将介绍如何使用Matlab技术进行模拟仿真,以及一些常见的应用案例。

一、Matlab的基本介绍Matlab是由美国MathWorks公司开发的一种科学计算软件。

它具有丰富的数学函数库和各种工具箱,可以进行数值计算、数据可视化、统计分析、信号处理、控制系统设计等。

Matlab是一种解释性的编程语言,用户可以通过编写脚本文件或使用命令行进行交互式计算。

二、Matlab的仿真建模工具Matlab提供了Simulink这一强大的仿真建模工具。

Simulink使用图形化界面,可以直观地构建系统模型。

可以将系统抽象成各种不同的模块,通过连接这些模块来描述系统的结构和行为。

Simulink支持常见的连续时间仿真、离散时间仿真和混合仿真,并提供了丰富的仿真调试工具。

三、Matlab的数值计算和优化在模拟仿真过程中,通常需要进行数值计算和参数优化。

Matlab提供了强大的数值计算功能,可以进行矩阵运算、数值积分、微分方程求解、优化等。

用户可以通过编写自定义函数和调用内置函数来实现数值计算和优化任务。

Matlab还提供了各种优化算法,如遗传算法、模拟退火算法、粒子群优化算法等,可以解决复杂的优化问题。

四、Matlab在控制系统设计中的应用控制系统是一种常见的工程系统,如何设计合适的控制策略是一个重要的问题。

Matlab提供了专门的控制系统工具箱,包括系统建模、控制器设计、仿真测试等功能。

用户可以使用Matlab进行控制系统建模,通过调整控制器参数来达到所需的性能指标,并使用Simulink进行仿真测试。

Matlab还提供了自适应控制、最优控制、模糊控制等高级控制方法,可以满足不同的控制需求。

模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)

模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)

模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)2这个例子的程序百度文库里有很多版本,但我下了很多都有错误,运行不了。

以下程序我一字一字的敲出来的,已经成功运行,绝对无误。

仿真实例,被控对象为p G (s)=ss s 1047035.8752350023++ 采样时间为1ms ,采用模糊PID 控制进行阶跃响应,在第300个采样时间时控制器输出加1.0的干扰,相应的运行结果如图1~13所示。

仿真程序如下:将以下程序保存为fuzzypid.m 文件,即可得到仿真结果。

%fuzzy tunning PID controlclear all ;clear all ;a=newfis('fuzzpid');a=addvar(a,'input','e',[-3,3]); %parameter ea=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'input','ec',[-3,3]); %parameter eca=addmf(a,'input',2,'NB','zmf',[-3,-1]);a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);a=addmf(a,'input',2,'PM','trimf',[0,2,3]);a=addmf(a,'input',2,'PB','smf',[1,3]);a=addvar(a,'output','kp',[-0.3,0.3]); %parameter kpa=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);a=addvar(a,'output','ki',[-0.06,0.06]); %parameter ki a=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]); a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);a=addvar(a,'output','kd',[-3,3]); %parameter kda=addmf(a,'output',3,'NB','zmf',[-3,-1]);a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);a=addmf(a,'output',3,'PM','trimf',[0,2,3]);a=addmf(a,'output',3,'PB','smf',[1,3]);rulelist=[1 1 7 1 5 1 1;1 2 7 1 3 1 1;1 3 62 1 1 1;1 4 62 1 1 1;1 5 5 3 1 1 1;1 6 4 42 1 1;1 7 4 4 5 1 1;2 1 7 1 5 1 1;2 2 7 13 1 1;2 3 6 2 1 1 1;2 4 53 2 1 1;2 5 53 2 1 1;2 6 4 43 1 1;2 734 4 1 1;3 1 6 14 1 1;3 2 6 2 3 1 1;3 3 6 3 2 1 1;3 4 5 3 2 1 1;3 54 4 3 1 1;3 6 3 5 3 1 1;3 7 3 54 1 1;4 1 6 2 4 1 1;4 2 6 2 3 1 1;4 35 3 3 1 1;4 4 4 4 3 1 1;4 5 3 5 3 1 1;4 6 2 6 3 1 1;4 7 2 6 4 1 1;35 1 5 2 4 1 1;5 2 5 3 4 1 1;5 3 4 4 4 1 1;5 4 3 5 4 1 1;5 5 3 5 4 1 1;5 6 2 6 4 1 1;5 7 2 7 4 1 1;6 1 5 47 1 1;6 2 4 4 5 1 1;6 3 3 5 5 1 1;6 4 2 5 5 1 1;6 5 2 6 5 1 1;6 6 27 5 1 1;6 7 1 7 7 1 1;7 1 4 4 7 1 1;7 2 4 4 6 1 1;7 3 2 5 6 1 1;7 4 2 6 6 1 1;7 5 2 6 5 1 1;7 6 1 7 5 1 1;7 7 1 7 7 1 1];a=addrule(a,rulelist);a=setfis(a,'DefuzzMethod','mom');writefis(a,'fuzzpid');a=readfis('fuzzpid');%PID controllerts=0.001;sys=tf(5.235e005,[1,87.35,1.047e004,0]); dsys=c2d(sys,ts,'tustin');[num,den]=tfdata(dsys,'v');u_1=0.0;u_2=0.0;u_3=0.0;y_1=0;y_2=0;y_3=0;x=[0,0,0]';4error_1=0;e_1=0.0;ec_1=0.0;kp0=0.40;kd0=1.0;ki0=0.0;for k=1:1:500time(k)=k*ts;rin(k)=1;%using fuzzy inference to tunning PIDk_pid=evalfis([e_1,ec_1],a);kp(k)=kp0+k_pid(1);ki(k)=ki0+k_pid(2);kd(k)=kd0+k_pid(3);u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);if k==300 %adding disturbance(1.0v at time 0.3s)u(k)=u(k)+1.0;endif u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;endyout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;error(k)=rin(k)-yout(k);%%%%%%%%%%%%%%%%%%%%%%%%%return of pid parameters%%%%%%%%%%%%%%%%%%%%%%%% u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);5x(1)=error(k); %calculating Px(2)=error(k)-error_1; %calculating Dx(3)=x(3)+error(k); %calculating De_1=x(1);ec_1=x(2);error_2=error_1;error_1=error(k);endshowrule(a)figure(1);plot(time,rin,'b',time,yout,'r'); xlabel('time(s)');ylabel( 'rin,yout');figure(2);plot(time,error,'r');xlabel('time(s)');ylabel( 'error ');figure(3);plot(time,u,'r');xlabel('time(s)');ylabel( 'u ');figure(4);plot(time,kp,'r');xlabel('time(s)');ylabel( 'kp ');figure(5);plot(time,ki,'r');xlabel('time(s)');ylabel( 'ki ');figure(6);plot(time,kd,'r');xlabel('time(s)');ylabel( 'kd ');figure(7);plotmf(a,'input',1);figure(8);plotmf(a,'input',2);figure(9);plotmf(a,'output',1);figure(10);plotmf(a,'output',2);figure(11);plotmf(a,'output',3);plotfis(a);fuzzy fuzzpid.fis6仿真运行结果:789。

在Matlab中进行模拟和仿真

在Matlab中进行模拟和仿真

在Matlab中进行模拟和仿真Matlab是一种功能强大的数学软件,广泛应用于科学研究、工程设计和数据分析等领域。

它不仅拥有丰富的数学函数库和绘图工具,还提供了一套强大的仿真和模拟功能,使用户能够更加方便地进行系统建模和性能评估。

本文将以Matlab中的模拟和仿真为主题,介绍其应用和原理,希望能为读者提供一些有用的参考和指导。

一、模拟与仿真的基本概念模拟和仿真是现代科学和工程中常用的研究方法,通过对实际系统进行数学建模和计算机模拟,可以在不进行实际试验的情况下,预测和评估系统的性能和行为。

模拟和仿真能够节省时间和成本,提高研究效率,使得科学家和工程师能够更快地了解和优化系统。

在Matlab中,模拟和仿真一般包括以下几个步骤:首先,确定系统的数学模型,即建立数学方程或差分方程描述系统的动态行为。

其次,选择仿真方法和算法,根据系统的特点和需求,确定合适的模拟算法,如欧拉法、龙格-库塔法等。

然后,设定仿真参数,包括仿真时间、步长等,这些参数将影响仿真结果的准确性和计算效率。

最后,执行仿真,并对仿真结果进行分析和评估。

二、Matlab中的模拟功能在Matlab中,模拟功能是通过内置的仿真工具和函数库来实现的。

Matlab提供了一系列用于数学建模和仿真分析的函数、工具箱和工具。

例如,Simulink是Matlab中最常用的仿真工具之一,它基于图形化仿真模型,可以快速搭建各种系统的模型,并进行仿真和分析。

Simulink提供了丰富的模块和工具箱,能够满足不同系统的建模和仿真需求。

用户可以通过拖放模块、连接信号线的方式,构建系统模型,并设置参数、仿真时间等。

Simulink还支持自定义模块和函数,用户可以根据具体需要,编写自己的模块和函数,以满足特定的仿真需求。

除了Simulink之外,Matlab还提供了其他一些实用的仿真函数和工具,如ode45函数用于解非刚性系统的常微分方程,ode15s函数用于解刚性系统的常微分方程等。

基于恒模准则的盲均衡算法仿真

基于恒模准则的盲均衡算法仿真

i t . cod gt t f i c f l vr n e dp ae o t o C A i l i vr b e— z A, oi d C ( C A fsy A cri e ec nyo s w cn e ec n hs t e f M , c d g a al s ps e M M d e MA M M ) rl n o di e h o o g a ra d n u n a i et i C i f
复发送 序 列 , 便 是 盲 均 衡 技术 L2。 在各 种 盲 均 这 1』 . 衡算 法 中 , oa G dr d和 Te h r 人 提 出的 恒模 算 法 ri l 等 ce
时 , 利 用 接 收 序 列 本 身 的 先 验 信 息 就 能 够 正 确 恢 仅
1 恒 模 算 法
B s a g 质盲均衡 器 是在 传 统 自适应 均衡 技 us n 性 g 术的基 础上发展 起 来 的 , 它是 盲 均衡 技术 的一个 分 支 , 显著特 点是不 增加计算 的复杂 度 , 其 物理 概念清 楚, 易于实现 。不 同 B s a g 质 盲 均衡 器 具 有不 us n 性 g 同的无记忆 非线性 函数 , 其原 理如 图 1 所示 。
ag rtmsa ee p an d. n tlain fg r sa d MS c re r b ie fe q aiain, ih idc tsg d e e t n e u lzr lo h r x li e Co selto ue i i n E u v sae o t n d atre u lzto whc n iae o f cso q aie . a Ke r s CMA ; ln q aiain; a a l tp sz y wo d bid e u z t l o v r b ese — ie CMA; i MCMA ; MA M
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用恒模算法进行盲自适应均衡的MATLAB 仿真
一:仿真内容:
1:了解盲均衡算法和CMA 算法的原理;
2:用CMA 算法来仿真4QAM 信号;
二:算法原理:
1:盲均衡算法:
普通的均衡器需要训练和跟踪两个阶段,在训练阶段,需要已知信号的一些特性参数来训练均衡滤波器,或者直接周期地发送训练序列。

由于训练序列并不含用户的数据,而占用了信道资源,自然会降低信道的利用率。

另外,在跟踪阶段,不发送训练序列,如果信道特性是快速变化的,均衡器的性能将迅速恶化。

盲均衡能够不借助训练序列(即我们通常所说的“盲”,而仅仅利用所接收到的信号序列即可对信道进行均衡。

换言之,其本身完全不用训练序列,就可以自启动收敛并防止死锁情况,且能使滤波器的输出与要恢复的输入信号相等。

盲均衡从根本上避免了训练序列的使用,收敛范围大,应用范围广,克服了传统自适应均衡的缺点,从而降低了对信道和信号的要求。

盲均衡的原理框图如下:
在上图中,x(n)为系统的发送序列,h(n)为离散时间传输信道的冲激响应,其依据所用调制方式的不同,可以是实值,也可以是复值;n(n)为信道中叠加的高斯噪声;y(n)为经过信道传输后的接收序列,同时也是均衡器的输入序列;w(n)为盲均衡器的冲激响应,盲均衡器一般采用有限长横向滤波器,其长度为L; )
(~n x 为盲均衡器的输出信号,也即经过均衡后的恢复序列。

且有下式成立:
y(n)=h(n)*x(n)+n(n);
)(~n x =w(n)*y(n)=w(n)*h(n)*x(n); 2:Bussgang 算法
Bussgang类盲均衡算法作为盲均衡算法的一个分支,是在原来需要训练序列的传统自适应均衡算法基础上发展起来的。

早期的盲均衡器以横向滤波器为基本结构,利用信号的物理特征选择合适的代价函数和误差控制函数来调节均衡器的权系数。

这类算法是以一种迭代方式进行盲均衡,并在均衡器的输出端对数据进行非线性变换,当算法以平均值达到收敛时,被均衡的序列表现为Bussgang 统计量。

因此,此类算法称为Bussgang类盲均衡算法。

Bussgang类盲均衡算法的显著特点是算法思路保持了传统自适应均衡的简单性,物理概念清楚,没有增加计算复杂度,运算量较小,便于实时实现。

缺点是算法的收敛时间较长,收敛后剩余误差较大,没有解决均衡过程中局部收敛问题,对非线性信道或存在零点的信道均衡效果不佳。

Bussgang类算法的原理框图如下:
Godard是其中性能最好的算法:a.代价函数的推导只与接收信号的幅值有关,与相位无关,因此对载波相位偏移不敏感;b.在稳态条件下,此算法能获得比其它算法小的均方误差;c.它能均衡一色散信道,即使起始眼图是关闭的。

Godard最早提出了恒模盲均衡算法。

恒模盲均衡算法适用于所有具有恒定包络(简称恒模)的发射信号的均衡,它是Bussgang算法的一个特例。

3:CMA(恒模算法)
现代通信系统中常用的QAM调制方式具有频带利用率高的显著优势,随着电平级数的增加,传输数码率越高,但电平间的间隔减小,码间干扰增加,抗噪性能变差。

近年来,研究最多的盲均衡算法是恒模算法(CMA)。

CMA算法被广泛用于恒包络信号的均衡,因其计算量小及良好的收敛性能也应用于非恒包络信号的盲均衡,如QAM信号。

然而,其初始化之后的收敛效果却不令人满意,存
在较大的剩余误差,对于非恒模信号来说,误符号的方差更加严重。

同时,CMA 及其改进算法对于高阶的QAM 信号都存在较大的失调。

这就需要我们对CMA 算法进行适当改进,以达到更好的收敛效果。

CMA 算法的诸多优点使之被广泛应用于恒包络信号的均衡、非恒包络信号(如QAM 信号)及自适应阵列处理等领域中。

恒模算法(Const Modulus Algorithm ,CMA)就是当参数p=2时的Godard 算法,是由Godard 最早提出的。

它是Bussgang 类盲均衡算法中最常用的一种,具有计算复杂度低、易于实时实现、收敛性能好等优点,己成为通信系统中广泛采用的盲均衡技术。

恒模算法的代价函数为:
J(w(n))=E{(|x ~
(n)|-R 2)2} 根据传输理论和盲均衡的框图可以得到:
y(n)=h(n)*x(n)+n(n);
均衡器的输出为:
)(~n x =w(n)*y(n)=w(n )*h(n)*x(n)=w T (n)*y(n)
由上得到权系数的更新公式为:
)(])(~)[(~)()1(*22n y n x R n x n W n W -+=+μ
式中μ是自适应步长,通常取足够小的正常数。

下表给出CMA 算法的流程:
三:仿真内容:
利用CMA 算法来仿真QAM 信号:首先举4QAM 调制的例子。

用复信号表示4QAM 调制相当于只传输4种取值的信号,即x=a+bj ,a=2/2±,b=2/2±,因此发送信号的星座是四个点,假设4QAM 的基带信号通过一个信道,信道用一个FIR 滤波器来表示,滤波器的传输函数为:
3211.05.02.0)(----++=z z z z H 信号经FIR 滤波器输出后加入了高斯白噪声,
信噪比为30db ,接收到的4QAM 信号经过一个均衡器,均衡器是由长度为6的FIR 滤波器构成,应用CMA 算法进行盲均衡,步长取0.02(0.001效果很差,所以将步长稍改大)。

(仿真程序见附件cma.m )
四:结果分析:
下图是仿真图形:
第一个图为经过4QAM 调制后产生的传输序列sn 所构成的星座图:可以明显的看到4QAM 基带信号的星座图。

-0.8-0.6-0.4-0.200.20.40.60.8
-0.8-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
传输序列的4QAM 星座图
第二个图为经过信道之后的输出信号,由于码间干扰, 4QAM 信号已经有点混乱。

-1.5-1-0.500.51 1.5
-1.5-1
-0.5
0.5
1
1.5
经过FIR 滤波器之后的输出4QAM 信号
第三个图为加上一个30dB 的高斯白噪声之后的星座图,可以看到由于噪声干扰,接收到的信号已经非常混乱。

-1.5-1-0.500.51 1.5
-1.5-1
-0.5
0.5
1
1.5
加过噪声之后的4QAM 信号
第四个图是收敛后的均衡器输出的分布图,由图可以看到盲均衡器将输出聚
集在4个星座的附近。

由于前面一部分的序列会被当作训练序列,所以实际的发送序列是从中间序列开始的。

-1-0.8-0.6-0.4-0.200.20.40.60.81
-1-0.8
-0.6
-0.4
-0.2
0.2
0.4
0.6
0.8
1
盲均衡器输出的4QAM 信号分布图
下图为CMA 算法的收敛图,由图可以看出,作为盲均衡器的CMA 算法的收敛速度明显比LMS 算法的慢,大约要到接近1000次迭代以后才能达到收敛,而LMS 算法一般只需几十至几百次迭代,这就是缺乏期望响应的代价。

由于步长和初值的不同,使得收敛的值有所不同。

0100020003000400050006000
70008000900010000-180-160
-140
-120
-100
-80
-60
-40
-20
CMA 算法的收敛图
点数/n e n .2/d B
五:结论
本报告首先介绍了盲均衡算法的数学模型,接着分析了Bussgang类盲均衡算法,重点介绍了其中的最为常用的且是本实验用到的CMA算法并对其进行了MATLAB仿真,分析了仿真结果。

但是CMA算法采用固定步长,这就使得步长对于CMA算法的收敛性能起着决定性的作用。

固定步长CMA算法在收敛速度和收敛精度方面对调整步长的要求是相矛盾的,在实际应用中,要根据不同的需求决定步长值的大小。

因此本实验中我采用0.02的步长才能得到此效果,如果采用0.001的步长,收敛效果和星座图的效果很差,需要提出一种更有利的算法,使得算法的收敛性有更大提高。

总之,通过查阅资料完成此次仿真,让我了解了盲自适应均衡的模型和恒模算法的原理,也让我看到在恒模算法中存在的需要改进的地方。

但由于知识有限,仅做到此,希望老师能多多指教。

相关文档
最新文档