0001 function OM=CS_DO_ObsModel(varargin)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 switch nargin
0013 case 1
0014 if isa(varargin{1},'CS_DO_ObsModel')
0015 OM=varargin{1};
0016 else
0017 error('Wrong parameter type in CS_DO_ObsModel constructor');
0018 end
0019 case 3
0020 if isa(varargin{1},'CSpace')
0021 OM.S=varargin{1};
0022 else
0023 error('Wrong parameter type in CS_DO_ObsModel constructor');
0024 end
0025 if isa(varargin{2},'DSpace')
0026 OM.O=varargin{2};
0027 else
0028 error('Wrong parameter type in CS_DO_ObsModel constructor');
0029 end
0030 if isa(varargin{3},'cell')
0031 OM.p=varargin{3};
0032 else
0033 error('Wrong parameter type in CS_DO_ObsModel constructor');
0034 end
0035
0036 no=dim(OM.O);
0037 if no~=size(OM.p,2)
0038 error('Size missmatch in DS_CO_ObsModel constructor');
0039 end
0040
0041
0042
0043
0044
0045 o=OM.p{1};
0046 for i=2:no
0047 o=o+OM.p{i};
0048 end
0049
0050
0051
0052 ps=0;
0053 for i=1:10
0054 ps=ps+Value(o,rand(OM.S));
0055 end
0056 ps=ps/10;
0057 scale=UniformProbability(OM.S)/ps;
0058 for i=1:no
0059 OM.p{i}=OM.p{i}*scale;
0060 end
0061
0062 OMBase=ObsModel();
0063
0064 OM=class(OM,'CS_DO_ObsModel',OMBase);
0065
0066 otherwise
0067 error('Wrong number of parameters in CS_DO_ObsModel constructor');
0068 end
0069
0070