我需要绘制关于变化参数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
答案 0 :(得分: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')
请注意,错误计算可以通过一些按摩从循环中取出。