You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
Matlab
51 lines
1.4 KiB
Matlab
function z=code(mu,s,sigma,noise,norm,stdnorm,wrap)
|
|
if nargin<7 || isempty(wrap)
|
|
wrap=0;
|
|
end
|
|
|
|
z=zeros(1,length(s),'single');
|
|
|
|
if isnan(mu)
|
|
return; %NaNs = distribution all zeros
|
|
end
|
|
|
|
%Make distribution with given standard deviation and mean, and with an amplitude of one.
|
|
%Used to define input PPCs (when all have same precision) and V weights
|
|
if wrap %input space wraps around
|
|
a=s(end)-s(1)+s(2)-s(1);
|
|
z=z+exp(-(0.5/sigma.^2).*min([abs(mu-s);abs(mu-(s+a));abs(mu-(s-a))]).^2);
|
|
else %no wrap-around
|
|
z=z+exp(-(0.5/sigma.^2).*(mu-s).^2);
|
|
end
|
|
|
|
%add noise
|
|
if nargin>3 && noise
|
|
%add poisson noise
|
|
z=single(imnoise(uint8(125.*z),'poisson'))./125;
|
|
end
|
|
|
|
%Modify distibution so that it has a sum of one, used to define W weights
|
|
if nargin>4 && norm
|
|
spacing=mean(diff(s));
|
|
z=spacing.*z./(sigma*sqrt(2*pi));
|
|
|
|
if ~wrap
|
|
%for weights cut-off at edges, adjust weights at edge so that sum remains one
|
|
if z(1)>z(end)
|
|
z(1)=z(1)+1-sum(z);
|
|
else
|
|
z(end)=z(end)+1-sum(z);
|
|
end
|
|
end
|
|
end
|
|
|
|
%Modify distibution so that it would have an amplitude of one if sigma=stdnorm
|
|
%(amplitude is <1 if sigma>stdnorm, and amplitude is >1 if sigma<stdnorm). Used
|
|
%to define input PPCs which all have a constant sum (so that the effects of
|
|
%changing the precision can be observed without the confound of changing the overal strength
|
|
%of the input).
|
|
if nargin>5 && stdnorm
|
|
z=stdnorm.*z/sigma;
|
|
end
|
|
|