1

エラーがそのkの最小値であるときに選択される可変パラメータkに関して、信号回復のグラフをプロットする必要があります。送信信号は で示されtransmitted、受信信号receivedはホワイト ガウス ノイズを通過し、関数 で量子化されますQuantizer。歪みを計算しerror= (transmitted(channel,time) - received(channel,time))^2ます。k パラメータのさまざまな値に対して送信信号と歪んだ信号をプロットしたいのですが、ループ内で行列に値を格納してプロットし、k のどの値が最小であるかを確認するにはどうすればよいですか。現在のコードでは、最後の反復値のみが保存されますが、後でプロットできるように、復元された信号が k ごとに 2 つのチャネルと共に保存されるファイルが必要でした。進め方を教えてください。

k=10;trials=5;
data=dlmread('b1.txt');
transmitted=data';
data=dlmread('b2.txt');
received=data';
[channels time] = size(transmitted)  % channels=2 time = 1024
tclass=zeros(k,time);

c=cell(k);

for iter=1:k
    [prot,class]=Quantizer(received',iter,trials); 
tclass(noprot,:)=class;
c{noprot}=prot;
recovered = prot(class',:);
    error=calculate_distortion(transmitted,recovered);

      plot(transmitted,'r');hold on;
      plot(recovered,'g');
end

function error = calculate_distortion(transmitted,received)
channels=2;time=1024;
for s=1:channels
        for t=1:time 
error= transmitted(channel,time) - received(channel,time))^2
end
end
4

1 に答える 1

1

各反復でエラーを収集するには、ループで置き換えることができます

error=calculate_distortion(transmitted,recovered);

error(iter)=calculate_distortion(transmitted,recovered);

また、その行を単純に置き換えることもできることに注意してください

error(iter)= sum((transmitted(:) - recovered(:)).^2);

関数を呼び出す必要はありません。

次に、プロットするには、たとえば次のように書くことができます

plot([1:k],error,'-o')

編集:

以下は、ループして収集recoverederror、最良の結果をプロットする方法の例です。

ks = [1:k];
for iter=ks

    % ....
    % processing here .... 
    % ....
    vec = prot(class',:);
    recovered(:,:,iter) = vec;
    error(iter)= sum((transmitted(:) - vec(:)).^2);        
end

[minval imin ]=min(error);
figure, plot(ks,error,'o-k')
hold on, plot(ks(imin),error(imin),'or','MarkerFaceColor','r')

figure, hold on
plot(transmitted(1,:),'-k')
plot(recovered(1,:,imin),':g') % substitute with or add received if you like

figure, hold on
hold on, plot(transmitted(2,:),'-k')    
plot(recovered(2,:,imin),':g')

エラーの計算は、何らかのメッセージを送信することでループから除外できることに注意してください。

于 2013-07-29T08:52:16.190 に答える