https://github.com/cmu-ci-lab/mcspeckle
Tip revision: c4ecf78f32558cba5e45ab0c43a0995a20f2c85b authored by igkiou on 05 September 2019, 11:00:35 UTC
first commit
first commit
Tip revision: c4ecf78
multipleAndSingleScattering.m
%% Check dependence of single vs. multiple scattering
% Measure the correlation in multiple scattering and single scattering
% cases, where the light and view are rotated around the z axis
span = 22; % how l1 source is far from z axis (in degrees)
alpha = 0:3:90; % the rotation directions (in degrees)
% Build the target area
boxTargetArea = boxArea( ...
1 , ... wavelength
20, ... MFP
[-50,50], ... z
[-50,50], ... x
[-50,50] ... y
);
scatter = isotropicScatter;
singleCorr = zeros(1,numel(alpha));
mulCorr = zeros(1,numel(alpha));
totalCorr = zeros(1,numel(alpha));
%% Measure correlation
l1 = [-sind(span), 0, cosd(span)];
v1 = [-sind(span), 0, -cosd(span)]; % minus for backward scattering
tic
for a = 1:1:numel(alpha)
% Build the rotation matrix around z axis
R_alpha = [ ...
cosd(alpha(a)), -sind(alpha(a)), 0; ...
sind(alpha(a)), cosd(alpha(a)), 0; ...
0 0 1];
l2=(R_alpha*l1')';
v2=(R_alpha*v1')';
% Solve
mulres = scmc(boxTargetArea, ...
farFieldSource([v1',v2']), ...
farFieldSource([l1',l2']), ...
scatter,1e3, ...
'mean', false, ...
'singleScattering', true, ...
'parforIters', 12);
singleCorrMatrix = mulres.Csingle(:,:,1,2);
totalCorrMatrix = mulres.C(:,:,1,2);
[~,maxCorrIdx] = max(abs(totalCorrMatrix(:)));
singleCorr(a) = abs(singleCorrMatrix(maxCorrIdx));
mulCorr(a) = abs(totalCorrMatrix(maxCorrIdx) - singleCorrMatrix(maxCorrIdx));
totalCorr(a) = abs(totalCorrMatrix(maxCorrIdx));
end
toc
maxCorr = max(totalCorr);
%% Comapare between single scattering the multiple scattering
figure;
hold on
plot(alpha,singleCorr/maxCorr,'lineWidth',2);
plot(alpha,mulCorr/maxCorr,'lineWidth',2);
plot(alpha,totalCorr/maxCorr,'lineWidth',2);
legend('Single Scattering','Multiple Scattering','Total Scattering')
xlabel('Rotation [deg]');
ylabel('Correlation');