马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
在短波信道中,如何用matlab软件实现DD-LMS算法的盲均衡?程序怎么写啊?
还有用变步长归一化LMS均衡算法实现?用基于归一化符号DD-LMS均衡算法实现?我不知道怎么修改下面的程序,请高手指教!谢谢!
下面是参考的自适应的均衡算法(不同步长):
(在程序中修改一下,成为盲均衡算法)
% %%lms算法
clear;
%wn=[2.9 3.1 3.3 3.5];
delta1=[0.075 0.025 0.0075];
Nm=500; Mm=1500; L=10;
wn1=3.1;
for jj=1:3
delta=delta1(jj);
mse=zeros(1,Mm-L);
e=zeros(1,Mm-L);
for ii=1:200
generate(Nm,Mm,1);
load send;
for n=1:3
h(n)=0.5*(1+cos(2*pi*(n-2)/wn1));
end;
r=s;
d=conv(r,h);
snr=30;
d1=awgn(d,snr,'measured'); %add gaussian white noise
M=length(d1); %d1 相当于函数中的r
N=length(s); %s 相当于函数中的train
L=10;
%xu a=zeros(L+1,N);
%xu y=zeros(1,M);
w=zeros(L+1,1);
%%%lms initialization
u_n=zeros(L+1,1);
for n=L/2:N-L/2-1
u_n=d1(n+L/2+1:-1:n-L/2+1).'; %%%******* attention *******
e_n=s(n)-w'*u_n;
w=w+delta*conj(e_n)*u_n;
e(n-L/2+1)=e_n;
% a(:,n-L/2+1)=w;
end;
mse=mse+e.^2;
end;
mse=mse/200;
if delta==0.075
mse2=mse;
end;
if delta==0.025
mse3=mse;
end;
if delta==0.0075
mse4=mse;
end;
end;
save lmsmiu;
load lmsmiu;
figure;
semilogy(mse2);hold on;
semilogy(mse3);hold on;
semilogy(mse4);hold on;
axis([0 1500 0.001 inf]);
ylabel('均方误差 ');
xlabel('迭代次数');
gtext('u=0.075');gtext('u=0.025');gtext('u=0.0075');
这是产生随机序例的函数:
function generate(N,M,Rb)
%clear;
%N=9500;
for i=1:N
if(rand<0.5)
train(i)=-1;
else
train(i)=1;
end;
end;
%the length of info: M-N
% M=10500;
for i=1:M-N
if(rand<0.5)
info(i)=-1;
else
info(i)=1;
end;
end;
%the length of sending series :M
send=[train info];
%%%%%%%%%%%%%%%%%%%%%%%%%%设置码元速率%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Rb=1; %%%% 原来的信息速率假设为1KHz
%%%% 采样速率=码元速率Rb: Rb=1kHz表示按原来信息速率发送
%%%% 这里是以1kHz为基本单位,要求Rb>=1kHz
%%%% 信道模型中也是以1kHz(1ms)为单位。
%%%% 小于1kHz的码元速率是错误的。
len1=length(send);
for i=1:len1
s(i*Rb)=send(i);
for j=1:Rb-1
s(i*Rb-j)=send(i);
end;
end;
%xu for i=1:(M-N)
%xu info1(i*Rb)=info(i);
%xu for j=1:Rb-1
%xu info1(i*Rb-j)=info(i);
%xu end;
%xu end;
%xu for i=1:N
%xu train1(i*Rb)=train(i);
%xu for j=1:Rb-1
%xu train1(i*Rb-j)=train(i);
%xu end;
%xu end;
save send; |