一、题目
其中,ks 为 BPSK 信号,
h
k
1
1 cos
2
2
0
k
2
k
1,2,3
x
, k
k
为其它值
,
n
k
s
k
h
k
分别取值为 2.9 和 3.3,噪声功率为 0.01,分别采用 LMS 算法,CM 算法以及
CM 加判决反馈算法实现自适应均衡,画出不同算法下
nE
2
的收敛曲线。
二、结果
其中设置 kw 阶数为 6,在 CM 加判决反馈算法实现过程中,在进行 100
次 CM 算法后运用判决反馈自适应算法。得到的三种算法的
nE
2
的收敛曲线
如下:
图 1 LMS 算法的收敛曲线
图 2 判决反馈自适应算法的收敛曲线
图 3 CM 加判决反馈算法的收敛曲线
由图 2 可以看出,CM 算法在初始误码率很高时可以得到有效收敛,但稳态
性能较差,由图 3 可知,CM 加判决反馈算法的收敛速度很快,且稳态性能较好,
误差较低。
代码:
clc
close all
clear all
%%
num_signal=2000;
n = rand(1,num_signal);
index=find(n>=0.5);
s=zeros(1,num_signal);
s(index)=2;
s=s-1;
tm=1:10;
ssin=cos(2*pi/10*(tm-1));
sk=[];
for i=1:num_signal
sk=[sk,s(i)*ssin];
end
% w=2.9;
% figure;
% plot(real(sk(1:100)));
w=3.3;
for k=1:3
end
h(k)=1/2*(1+cos(2*pi/w*(k-2)));
y=conv(sk,h);
%
% figure;
% plot(real(y(1:100)));
noise=wgn(1,length(y),-10);
xk=y+noise;
% figure;
% plot(real(xk(1:100)));
num=6;
N=length(xk);
temp1=xk(3:N-5);
temp2=xk(4:N-4);
temp3=xk(5:N-3);
temp4=xk(6:N-2);
temp5=xk(7:N-1);
temp6=xk(8:N);
temp=[temp6;temp5;temp4;temp3;temp2;temp1];
R = conj(temp)*temp.'/size(temp,2);
%%
%LMS 算法实现自适应均衡
w = 1*ones(num,length(temp)+1);
miu = 0.01/trace(R);
for cont = 1 :length(temp)
X_input = temp(:,cont);
error_output = sk(cont) - X_input'*w(:,cont);
error_cov(cont) = error_output;
delt_grad = -2*error_output*conj(X_input);
tt(cont)=delt_grad'*delt_grad;
w(:,cont+1) = w(:,cont) - miu*delt_grad;
end
% wm=w(:,length(temp)+1);
% ttt=temp'*wm;
% figure;
% plot(real(ttt(1:100)));
figure
subplot(1,3,1)
plot(1:1:length(temp),abs(w(1,2:end)),'b')
title('w1 收敛曲线')
subplot(1,3,2)
plot(1:1:length(temp),abs(w(2,2:end)),'r')
title('w2 收敛曲线')
subplot(1,3,3)
plot(1:1:length(temp),abs(w(3,2:end)),'k')
title('w3 收敛曲线')
figure
plot(error_cov(1:4995));
axis([0 5000 -3 3])
%%
%CM 算法实现自适应均衡
R0=1;
w1 = 1*ones(num,length(temp)+1);
miu = 0.01/trace(R);
for cont = 1 :length(temp)
X_input = temp(:,cont);
yk=X_input'*w1(:,cont);
error_output = abs(yk)^2 - R0^2;
error_cov1(cont) = sk(cont)-yk;
delt_grad = 4*yk*error_output*conj(X_input);
w1(:,cont+1) = w1(:,cont) - miu*delt_grad;
end
% yyyy=temp'*w1(:,length(temp)+1);
% figure;
% plot(yyyy(1:100));
figure
subplot(1,3,1)
plot(1:1:length(temp),w1(1,2:end),'b')
title('w1 收敛曲线')
subplot(1,3,2)
plot(1:1:length(temp),w1(2,2:end),'r')
title('w2 收敛曲线')
subplot(1,3,3)
plot(1:1:length(temp),w1(3,2:end),'k')
title('w3 收敛曲线')
figure
plot(error_cov1(1:4995));
axis([0 5000 -3 3])
%%
%CM+判决引导自适应均衡
w2 = 1*ones(num,length(temp)+1);
miu = 0.01/trace(R);
for cont = 1 :100
X_input = temp(:,cont);
yk=X_input'*w2(:,cont);
error_output = abs(yk)^2 - R0^2;
error_cov2(cont) = sk(cont)-yk;
delt_grad = 4*yk*error_output*conj(X_input);
w2(:,cont+1) = w2(:,cont) - miu*delt_grad;
end
for cont = 10 :floor(length(temp)/10)-1
X_input=[];
for i=1:10
X_input=[X_input;temp(:,cont*10+i)'];
end
yk=X_input*w2(:,51);
if sum(yk(1:5))>=0
dk=sin(2*pi/10*(tm-1));
dk=-1*sin(2*pi/10*(tm-1));
else
end
for i=1:10
error_output = dk(i) - X_input(i,:)*w2(:,cont*10+i);
error_cov2(cont*10+i) = error_output;
delt_grad = -2*error_output*conj(X_input(i,:)');
w2(:,cont*10+i+1) = w2(:,cont*10+i) - miu*delt_grad;
end
end
figure
subplot(1,3,1)
plot(1:1:length(temp),w2(1,2:end),'b')
title('w1 收敛曲线')
subplot(1,3,2)
plot(1:1:length(temp),w2(2,2:end),'r')
title('w2 收敛曲线')
subplot(1,3,3)
plot(1:1:length(temp),w2(3,2:end),'k')
title('w3 收敛曲线')
figure;
plot(error_cov2(1:4990));
axis([0 5000 -3 3])