⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ask_lms_6_14_.m

📁 自适应滤波lms算法
💻 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 + -