1

我需要绘制关于变化参数 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
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')

编辑:

以下是如何循环收集然后绘制最佳结果的recovered示例error

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 回答