📄 lms_newchannel.m
字号:
%前端加训练序列均衡,后端加信息码元并计算误码
%clc;clear all;close all;
N1=20;%一个码元抽样点数
fs=5000;%抽样频率
f=2000;%PSK载波频率
N=600;
K=5;
%actual_isi=[0.05 -0.063 0.088 -0.126 -0.25 0.9047 0.25 0 0.126 0.038 0.088];%信道
sigma=0.01;
u=0.075;%mu值的选取0.02,大步长+少迭代次数,小步长+多迭代次数
k=2;
eb_n0=30;
snr=eb_n0-10*log10(0.5*(N1*(1/fs)/(1/fs)/k));
w=[];%记录第一权值
Num_of_realizations=100;
mse_av=zeros(1,N-2*K);
for j=1:Num_of_realizations
for i=1:N
if (rand<0.5)
info(i)=-1;
else
info(i)=1;
end
end
i=0;
for j=1:N
for t=0:1/fs:(N1-1)/fs
i=i+1;
psk_s(i)=sin(2*pi*f*t)*info(j);
ss(i)=sin(2*pi*f*i/fs);%本地恢复载波
end
end
%psk_s=psk_s+0.1*rand(1,N*N1);%加入噪声
psk_s=awgn(psk_s,snr,'measured');
% yt=psk_s+0.5*[zeros(1,30) psk_s(1:N*N1-30)];%两径
yt=psk_s+0.5*[zeros(1,30) psk_s(1:N*N1-30)]+0.707*[zeros(1,10) psk_s(1:N*N1-10)];%三径
%y1=filter(actual_isi,1,yt);
y1=yt;
y2=y1.*ss;%解调
b=fir1(34,0.20);%
y2=filter(b,1,y2);
for i=1:N
y(i)=y2(i*N1);%抽样
end
estimated_c=[0 0 0 0 0 1 0 0 0 0 0];
for k=1:N-2*K
w(k)=estimated_c(1);
y_k=y(k:k+2*K);
z_k=estimated_c*y_k.';
e_k=info(k+9)-z_k;%期望序列延迟
estimated_c=estimated_c+u*e_k*y_k;
mse(k)=e_k^2;
end
mse_av=mse_av+mse;
end
mse_av=mse_av/Num_of_realizations;
hold on;
figure(1);
semilogy((1:length(mse_av)),mse_av);title('e_k^2');
figure(2);
subplot(211)
plot(1:N*N1,psk_s);title('psk+noise');
subplot(212)
plot(1:N*N1,yt);title('psk+noise+multipath');
figure(3);
subplot(211)
stem(1:N,y);title('demodulate+sample');
subplot(212)
stem(info);title('training squense');
%%均衡后信息码元
test=randsrc(1,N);
i=0;
for j=1:N
for t=0:1/fs:(N1-1)/fs
i=i+1;
psk_test(i)=sin(2*pi*f*t)*test(j);
ss_test(i)=sin(2*pi*f*i/fs);%本地恢复载波
end
end
%psk_test=psk_test+0.1*rand(1,N*N1);
psk_test=awgn(psk_test,snr,'measured');
% ytest=psk_test+0.5*[zeros(1,30) psk_test(1:N*N1-30)];%两径
ytest=psk_test+0.5*[zeros(1,30) psk_test(1:N*N1-30)]+0.707*[zeros(1,10) psk_test(1:N*N1-10)];%三径
% ytest1=filter(actual_isi,1,ytest);
ytest1=ytest;
ytest2=ytest1.*ss_test;%解调
btest=fir1(34,0.20);%低通滤波
ytest2=filter(btest,1,ytest2);
for i=1:N
ytout(i)=ytest2(i*N1);
end
for i=1:200
tt5(i)=ytout(i:i+10)*estimated_c'; %输出序列
end
tt6=sign(tt5);
ber=sum(tt6~=test(1+9:200+9))/200%同样延迟码元
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -