MATLAB简单 - 线性预测编码和能量预测

时间:2016-04-27 08:17:01

标签: matlab filter energy

我有一个数据集,其中有274个样本(9个月)的日常能源(Watts.hour)用于住宅。 我不确定我是否正确应用了lpc功能。

我的代码如下:

  filename='9-months.csv';
  energy = csvread(filename);


  C=zeros(5,1);
  counter=0;


  N=3;



  for n=274:-1:31

  w2=energy(1:n-1,1);
  a=lpc(w2,N);

  energy_estimated=0; 

      for X = 1:N
      energy_estimated = energy_estimated + (-a(X+1)*energy(n-X));
      end

  w_real=energy(n);
  error2=abs(w_real-energy_estimated);


  counter=counter+1;

  C(counter,1)=error2;
  end

  mean_error=round(mean(C));

作为分析样本的“n”,我将使用能量数组的值,从1到n-1,来计算lpc系数(N = 3)。

之后,它将在所提出的“for”循环上应用计算的系数,以便计算估计的能量。

最后,error2输出实际能量和估计值之间的误差。

在提供的示例(http://www.mathworks.com/help/signal/ref/lpc.html)上使用了一些过滤器。我需要应用任何过滤器吗?我的方法是否正确?

非常感谢您提前!

1 个答案:

答案 0 :(得分:0)

lpc似乎使用正确,但您的代码还有其他一些内容。我赞成他在“为n”的部分:

for n=31:274 %for me it would seem more logically to go forward in time

  w2=energy(1:n-1,1);
  a=lpc(w2,N);


  energy_estimate=filter([0 -a(2:end)],1,w2);
  energy_estimate=energy_estimate(end);

  estimates(n)=energy_estimate;


end

error=energy(31:274)-estimates(31:274)';
meanerror=mean(error); %you dont really round mean errors

过滤器正是您尝试使用X = 1:N循环完成的操作。但这将执行整个w2向量的计算。如果你只想要最后一个值,也可以使用(end)命令。

现在没有理由计算每个值的误差,然后将它们添加到矢量中,您可以在计算后更快地完成。

现在,如果您尝试使用lpc估计未来值,它可以像这样工作,但您暗示每个值仅取决于最后3个值。你尝试过像多项式方法吗?我认为这将更接近现实。