在 MATLAB 中使用自回归 (AR) 滤波器过滤一些随机信号

Filtering some random signal using Autoregressive (AR) filter in MATLAB

在 MATLAB 中,如果我有一些信号 x 让我们说

x = rand(1,1000)

我想通过使用 M 阶自回归 (AR) 过滤器过滤 x 来生成 y。我怎样才能找到 y(n)?因为自回归滤波器需要过去的输出值来计算,但我还没有任何过去的输出。我只有输入样本 x.

在移动平均线 (MA) 过滤器中,我可以轻松生成 y(n),因为它只需要过去的输入,我可以轻松提供这些输入,因为我们有 x,如下所示

for n=1:1000
  sum=0;
  for k=1:M+1
    if (n-k+1>0)
      sum = sum + (1/M)*x(n-k+1); % MA depends on current & previous input 
    end
  end
  y(n)=sum;
end

任何人都可以帮我为自回归过滤器生成相同的东西吗?

在移动平均滤波器中,您展示了您基本上能够通过假设在 x(1) 中第一个提供的值之前的过去输入样本为零来计算输出。

类似地,对于自回归滤波器,您可以通过假设第一个计算值 y(1) 之前的过去输出为零来计算输出:

for n=1:1000

  % Add feedforward section for ARMA filter
  % ... for an AR filter this is just sum=x(n)
  sum = x(n);

  % Feedback section      
  for k=2:M+1   % normalized AR (assuming a(1) equals 1) 
    if (n-k+1>0)
      sum = sum + a(k)*y(n-k+1);
    end
  end
  y(n) = sum;
end

更一般地说,您还可以通过使用一些先前已知的初始条件为过滤器播种来计算输出(尽管在您的特定情况下您指出这些初始条件是未知的)。