📄 multiplotber.m
字号:
% plts mlutiples .mat
%--------------------------------------------------------------------------
function fignum = multiplotBER(varargin)
if isnumeric(varargin{1,end}) %fignum provided
fignum = varargin{1,end};
varargin = varargin(1,1:end-1);
else
fignum = -1;
end
if size(varargin,2)>8
error('max number of files is 6') %otherwise not nice, too many plots
end
%colormap;
firstTime=1;
plotLegend={};
h=[];
myColormap = [
0.0, 0.0, 1.0; ... %blue
1.0, 0.0, 0.0; ... %red
0.0, 1.0, 0.0; ... %green
0.0, 0.0, 0.0; ... %black
0.75, 0.75, 0.75; ... %grey
1.0, 0.0, 1.0; ... %magenta
0.6, 0.4, 0.2; ... %brown
0.0, 0.7, 1.0; ... %cyan
1.0, 1.0, 0.0; ... %yellow
1.0, 1.0, 1.0; ... %white
1.0, 1.0, 0.7; ... %yellow (light)
0.7, 0.7, 1.0; ... %blue (light)
1.0, 0.7, 0.7; ... %red (light)
0.8, 1.0, 0.8; ... %green (light)
0.8, 0.7, 0.4; ... %beige
0.6, 0.0, 0.6; ... %violett
0.8, 0.8, 0.8 ... %grey (light)
];
for i=1:size(varargin,2)
%try to load .mat
%check if .mat or data
temp = [varargin{1,i}];
if ischar(temp)
if ~exist([varargin{1,i}],'file')
error([varargin{1,i} ' not found.']);
else % valid .mat file
disp(['Ploting ' varargin{1,i} '...']);
clear data
feval(@load, varargin{1,i}) %load data
end
elseif isstruct(temp) %structure provided
data = varargin{1,i} ;
else
error('Non valid data')
end
if exist('data')==0
if exist('SNR') & exist('CountedErrors') & exist('SimulatedBits')
data.SNR=SNR;data.CountedErrors=CountedErrors;data.SimulatedBits=SimulatedBits;
plotLegend{1,end+1}=['title not available'];
else
error('Non valid data')
end
else
if isfield(data,'SNR')*isfield(data,'CountedErrors')*isfield(data,'SimulatedBits')
plotLegend{1,end+1}=[data.plotTitle];
end
end
if firstTime %execute first time only
if fignum==-1
fignum = figure;
else
figure(fignum)
end
h=singlePlotBER(data,firstTime,myColormap(i,:),h);
grid on
set(gca, 'YMinorGrid', 'off');
%set(gca, 'YMinorGrid', 'on');
xlabel('SNR')
ylabel('BER')
%t=title('D');set(t,'Interpreter','none');
firstTime=0;
else
h=singlePlotBER(data,firstTime,myColormap(i,:),h);
end
% end
end
if firstTime==0
global myLegend
global myTitle
if ~isempty(myTitle);
t=title(myTitle);set(t,'Interpreter','none');
end
if ~isempty(myLegend);
l=legend([h],myLegend);
set(l,'Interpreter','none');
else
l=legend([h],plotLegend);
set(l,'Interpreter','none');
end
hold off
end
%--------------------------------------------------------------------------
function h=singlePlotBER(data,firstTime,myColor,h)
%--+1 SNR
data.SNR=data.SNR+1;
%-- Plot graph
tab=find(data.CountedErrors~=0);
CE_wo0 = data.CountedErrors(tab);
S_wo0 = data.SimulatedBits(tab);
snr_wo0 = data.SNR(tab);
%semilogy(data.SNR,data.CountedErrors./data.SimulatedBits,'.','Color',myColor );%
semilogy(snr_wo0,CE_wo0./S_wo0,'.','Color',myColor );
if firstTime
hold on
end
if ~isempty(tab)
if isfield(data,'trend')*0 & all(data.trend>=0) & size(data.trend,2)>1
%hack
data.snrRange_nomodif=data.snrRange_nomodif+1;
data.snrRange_extrapol=data.snrRange_extrapol+1;
if isfield(data,'trendSNR')
data.trendSNR=data.trendSNR+1;
h(end+1,1)=semilogy(data.trendSNR,data.trend, '-','Color',myColor);
else
%n1=size(data.snrRange_nomodif,2);
n1=min(size(data.snrRange_nomodif,2),size(data.trend,2));
h(end+1,1)=semilogy(data.snrRange_nomodif,data.trend(1:n1), '-','Color',myColor);
end
%n1=size(data.snrRange_nomodif,2);
%n1=min(size(data.snrRange_nomodif,2),size(data.trend,2));
%data.snrRange_nomodif_wo0 = data.snrRange_nomodif(tab);
%h(end+1,1)=semilogy(data.SNR_wo0,data.trend(1:n1), '-','Color',myColor);
%h(end+1,1)=semilogy(data.trendSNR,data.trend, '-','Color',myColor);
%no extrapolation yet
%semilogy(data.snrRange_extrapol,data.trend(n1+1:end), ':','Color',myColor);
% semilogy(data.snrRange_extrapol,data.trend(n1+1:end), ':','Color',myColor);
else
h(end+1,1)=semilogy(snr_wo0,CE_wo0./S_wo0, '-','Color',myColor);
end
end
%--------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -