有人可以解释为什么误差和滤波信号是用最小均方自适应滤波交替切换的

时间:2014-01-05 14:46:27

标签: matlab least-squares

我一直在使用自适应滤波方法进行最小化方法,但无法为LMS实现找到正确的方法。

考虑到每个脉冲信号有500个样本,我实现了以下内容。对于第一个脉冲信号(500个样本),从脉冲信号的低通滤波器生成参考信号,然后使用生成的误差作为参考噪声信号。下一个脉冲信号

P=load('Pulse_signal.mat');
a2=P.a(334:4500,:);
for i=1:500:length(a2)-500   
    if(i<500)
        input=a2(i:i+499,:); 
        detected(i:i+499,:)=input; 
          d = fdesign.lowpass('Fp,Fst,Ap,Ast',1.5,8,0.5,20,500);
          Hd1 = design(d);
          filtered = filtfilt(Hd1.Numerator,1,input);              
          [w,y,e,W]=simple_LMS1(filtered,input,0.08,5);   
          e2(i:i+499,:)=e;      
          y2(i:i+499,:)= y;
      else        
          input=a2(i:i+499,:);  
          detected(i:i+499,:)=input; 
          [w,y,e,W]=simple_LMS1(e,input,0.08,8);         
          e2(i:i+499,:)=e;
          y2(i:i+499,:)= y;               
      end;
  end
  plot(detected);hold on;plot(e2,'-r');hold on;plot(y2,'-k');
simple_LMS1 fucntion

function [w,y,e,W] = simple_LMS1(x,d,mu_step,M)
N = length(x);
 y = zeros(N,1); 
 w = zeros(M,1); 
e = zeros(N,1); 
W = zeros(M,N); 
for n = 1:N
  if n <= M % assume zero-samples for delayed data that isn't available
      k = n:-1:1;
      x1 = [x(k); zeros(M-numel(k),1)];
  else
      x1 = x(n:-1:n-M+1); % M samples of x in reverse order
  end
  y(n) = w'*x1; 
  e(n) = d(n) - y(n); 
  w = w + mu_step*e(n)'*x1;
  W(:,n) = w; 
end

问题:输出(或多或少类似于输入)在误差信号和滤波信号之间交替移动,如下图所示。output

我的实现本身有问题吗?

1 个答案:

答案 0 :(得分:0)

代码中似乎没有几件事情。对于前500个样本,您有一个滤波信号及其输入。您正试图从过滤后的信号中找到输入。也就是说,您正试图反转低通滤波器操作。那是你想要做的吗?

在LMS过滤器中,您不会在调用之间保存过滤器状态和过滤器权重。您实质上是在每500个样品后重新设置过滤器并重新开始。这将在每500个样本后显示输出中的不连续性。这就是你所观察到的。我仍然不知道你试图为500以上的样本实现什么逻辑。你试图找到一个过滤器,它从前500个样本的误差中创建输入?