2016-04-27 8 views
0

私は住宅で使用されている日々のエネルギー(Watts.hour)の274サンプル(9ヶ月)のデータセットを持っています。 lpc関数を正しく適用しているかどうかはわかりません。MATLABシンプル - 線形予測符号化とエネルギー予測

私のコードは以下の通りです:

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" は、分析上のサンプルなので、私はNで(LPCのcoefficientesを計算するために、1からのn-1に、エネルギーの配列の値を使用します= 3)。

その後、推定エネルギーを計算するために、提示された「for」サイクルに計算係数を適用します。

最後に、error2は、実エネルギーと推定値の間の誤差を出力します。

提示された例(http://www.mathworks.com/help/signal/ref/lpc.html)では、いくつかのフィルタが使用されています。フィルタを適用する必要がありますか?私の方法論は正しいですか?

ありがとうございます!

答えて

0

lpcは正しく使用されているようですが、コードについては他にもいくつかあります。私は彼の「nのための」で一部adressign午前: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でやろうとしている正確に何です。これはw2ベクトル全体の計算を実行します。最後の値だけが必要な場合は、(end)コマンドも使用します。

ここで、単一の値ごとにエラーを計算してから、計算後にその値をベクトルに追加する理由はありません。

ここでlpcで将来の値を推定しようとすると、そのように動作する可能性がありますが、すべての値が最後の3つの値のみに依存することを暗示しています。あなたは多項式のようなものを試しましたか?私はこれが現実に近いと思うだろう。