📄 ask_lms_6_14_.m
字号:
% n0个码源 5_2号修改
close all
clear
clc
fc=400; %载波
fs=2000; %采样频率
n0=500; %训练序列长度
delay_num=5;%延时
X=randint(1,n0); %产生随机训练序列
figure(1)
stem(X),grid
title('初始训练码元序列')
xlabel('点数');ylabel('码元');
x=[];
for i=1:n0
for j=1:fs/10 %每个码源持续0.1s
x=[x X(i)];
end
end
figure(2)
k=linspace(0,n0,n0*fs/10);
plot(k,x)
axis([0,n0,-2,2])
title('基带信号')
xlabel('点数');ylabel('基带码元');
k=linspace(0,n0/10,n0*fs/10);
wave=cos(2*pi*fc*k); % 载波fc
sig = x.*wave; %调制信号
figure(3)
plot(k,sig)
title('2ASK信号')
xlabel('时间');ylabel('调制信号');
%多径信道
k=1:fs;
h(k)=0;
h(1)=1;
h(0.4*fs)=0.4; % 改变时延与衰减
h(0.8*fs)=0.8; % 改变时延与衰减
k=linspace(0,1,fs);
figure(4);
stem(k,h);
title('多径信道');
xlabel('时间');ylabel('码元幅值');
J=conv(sig,h); %卷积输出
J=J(1:n0/10*fs);
nvar = 0.01; % Noise variance
noise = sqrt(nvar)*randn(1,n0/10*fs); % Noise
n = J + noise; % The noise corrupted sine wave.
k=linspace(0,n0/10,n0/10*fs);
figure(5);
plot(k,n);
title('叠加噪声');
xlabel('时间');ylabel('码元幅值');
%相干解调
p=n.*wave;
k=linspace(0,n0/10,n0/10*fs);
figure(6);
plot(k,p);
title('相干解调');
xlabel('时间');ylabel('码元幅值');
N=80;
b1=fir1(N,20*2/fs,'low');
l=filter(b1,1,p); %包络检波
k=linspace(0,n0/10,n0/10*fs);
figure(9);
plot(k,l);
hold on
plot(k,x,'r');
title('包络检波')
xlabel('时间');ylabel('包络幅值');
u=[];
for i=0:n0-1
if [l(fs/10*i+0.3*fs/10)+l(fs/10*i+0.7*fs/10)]/2 > 0.4
u(i+1)=1;
else
u(i+1)=0; %每隔fs/10个点采集一个信号,共n0个点, 构成横向滤波器输入信号
end
end
%期望信号
for i=0:n0-1
dx(i+1)=x(fs/10*i+0.5*fs/10);
end
k=linspace(1,n0,n0);
w0(k)=0; % 11个迭代权系数
w1(k)=1;
w2(k)=0;
w3(k)=1;
w4(k)=0;
w5(k)=1;
w6(k)=0;
w7(k)=0;
w8(k)=1;
w9(k)=0;
w10(k)=0;
y(k)=0;
u0=0.01; % 初始迭代步长
for i=11:n0
y(i)=u(i)*w0(i)+u(i-1)*w1(i)+u(i-2)*w2(i)+u(i-3)*w3(i)+u(i-4)*w4(i)+u(i-5)*w5(i)+u(i-6)*w6(i)+u(i-7)*w7(i)+u(i-8)*w8(i)+u(i-9)*w9(i)+u(i-10)*w10(i);
e(i)=dx(i-delay_num)-y(i);
w0(i+1)=w0(i)+2*u0*e(i)*u(i);
w1(i+1)=w1(i)+2*u0*e(i)*u(i-1);
w2(i+1)=w2(i)+2*u0*e(i)*u(i-2);
w3(i+1)=w3(i)+2*u0*e(i)*u(i-3);
w4(i+1)=w4(i)+2*u0*e(i)*u(i-4);
w5(i+1)=w5(i)+2*u0*e(i)*u(i-5);
w6(i+1)=w6(i)+2*u0*e(i)*u(i-6);
w7(i+1)=w7(i)+2*u0*e(i)*u(i-7);
w8(i+1)=w8(i)+2*u0*e(i)*u(i-8);
w9(i+1)=w9(i)+2*u0*e(i)*u(i-9);
w10(i+1)=w10(i)+2*u0*e(i)*u(i-10);
end
n=linspace(1,n0,n0);
figure(13);
stem(n,y);
title('横向滤波器输出');
xlabel('点数');ylabel('幅值');
e1=e.*e;
figure(14);
plot(n,e1);
title('误差曲线');
figure(15);
plot(n,10*log(e1));
title('误差曲线');
y_data=y;
for i=0:n0-1
if y_data(i+1)>0.5
y_data(i+1)=1;
else
y_data(i+1)=0;
end
end
count=0;
for i=11:n0
if y_data(i)==dx(i-delay_num);
count=count+1;
else
count=count;
end
end
count
count/(n0-10)
title(['误码率为',num2str(1-count/(n0-10))])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -