我有一个数据集,其中有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)上使用了一些过滤器。我需要应用任何过滤器吗?我的方法是否正确?
非常感谢您提前!
答案 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个值。你尝试过像多项式方法吗?我认为这将更接近现实。