我需要绘制一个关于一个变化参数k的信号恢复图,当该k的误差最小时,它将被选择,发送的信号用transmitted表示,接收到的信号received通过一个高斯白噪声,由函数Quantizer量化。我计算失真error= (transmitted(channel,time) - received(channel,time))^2。我想要为k参数的不同值绘制传输的vs失真信号,但是在循环内部,我如何将这些值存储在一个矩阵中,这样我就可以绘制,然后看到哪个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发布于 2013-07-29 08:52:16
要在每次迭代中收集错误,可以在循环中进行替换。
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')请注意,误差计算可以通过一些按摩从循环中取出。
https://stackoverflow.com/questions/17915422
复制相似问题