不同参数值的图表中的问题

时间:2013-07-29 02:58:44

标签: matlab matrix plot visualization

我需要绘制关于变化参数k的信号恢复图,当k的误差最小时,将选择该参数。发送的信号由transmitted表示,接收信号received通过白高斯噪声并由函数Quantizer量化。我计算了失真error= (transmitted(channel,time) - received(channel,time))^2。我想为不同的k参数值绘制传输与失真信号的关系,但在循环内部如何将值存储在矩阵中,以便我可以绘制,然后查看错误最小的k值。在本代码中,只存储了最后的迭代值,而我希望有一个文件,其中恢复的信号与每个k的两个通道一起存储,以便我可以稍后绘制。请帮助您继续。

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

1 个答案:

答案 0 :(得分: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')

请注意,错误计算可以通过一些按摩从循环中取出。