http://www.crocko.com/B0FCCEB7242F4CF780202C02BA58B06A/ccccc_10t_10w_1nmstep.txt here is the txt file which contains the surface plasmon fields
surface plasmon field scans an optical fiber field
조회 수: 3 (최근 30일)
이전 댓글 표시
Hi Everyone:I designed a code for this problem but somehow it is not giving me the expected result. That is why I thought maybe someone can check my code and let me know if there is any coding error to fix. here is my problem: I have a surface plasmon field which is located in a 2-d domain . The is domain is from -124nm to 124nm in x and fro -150nm to 150nm in y and the fields of the surface plasmons are centered in this domain. This surface plasmon domain must scan a bigger domain which contains an optical fiber centered at the middle of this domain.the fiber has 2.25micrometer spot size. the wavelengths I am using is 1310nm.I will cope my code andupload the txt file which containd the surface plasmon fields so that everyone interested can run the code ans see the result. the result should be centered at the origin . However, it is not centered in my result and I do not know if the there is a reason or an error in my code. Ey1a4 is the surface plasmon field which is a complex field. Ey2a4 is the fiber field which is a real field. this is an overlap integral problem and the equation for the integrations is used in the code with double summation. the fiber is located in a domain which is from -5um to 5um in x and from -5um to 5um in y. here is the code:
clear all;
close all;
clc;
%%%%inputs%%%%%%%%%%%
x1=-5:1e-3:5;
y1=-5:1e-3:5;
step=30; %step size 1=1nm;
randomscannb=100;
%%%%%%%%%%%%%%%%%%%%%
lambda0=1.31;
sfinalmatrix=size(x1);sfinalmatrix=sfinalmatrix(2);
% V=2*pi*a*NA/lambda0;
% rf=a*(0.65+1.619/V^(3/2)+2.879/V^6);
rf=((2.25)/2);
[X1,Y1]=meshgrid(x1,y1);
Ey2a4=exp((-X1.^2-Y1.^2)/rf^2);
% Ey1a4=dlmread('K:\investigations for sweeping the position\New folder\ccccc_10t_10w_1nmstepp.txt');
Ey1a4=dlmread('K:test las code 2\ccccc_10t_10w_1nmstep.txt');
% Ey1a4=randn(300,248)+j*randn(300,248);
%248x;300y;
Ey1a4c=conj(Ey1a4);
%display fields
axis square;
figure(1);subplot(1,2,1);imagesc(real(Ey1a4));title('Ey1a4 real part')
axis square;
figure(2);subplot(1,2,1);imagesc([x1(1) x1(sfinalmatrix)],[y1(1) y1(sfinalmatrix)],real(Ey2a4));title('Ey2a4 real part');xlabel('um')
axis square;
figure(1);subplot(1,2,2);imagesc(imag(Ey1a4));title('Ey1a4 imag part')
axis square;
figure(2);subplot(1,2,2);imagesc([x1(1) x1(sfinalmatrix)],[y1(1) y1(sfinalmatrix)],imag(Ey2a4));title('Ey2a4 imag part');xlabel('um')
fiberscan=Ey2a4+1;
selectedscan=round(rand(1,randomscannb)*(sfinalmatrix*sfinalmatrix)/(step^2));
match=0;
%calculate overlap
C=zeros(sfinalmatrix,sfinalmatrix);
Norma = sum(sum(Ey2a4.*conj(Ey2a4)))*sum(sum(Ey1a4.*conj(Ey1a4)));
tic
c=0; %counter
for b=1:step:sfinalmatrix-300+1
for a=1:step:sfinalmatrix-248+1
c=c+1;
display(strcat('fractionexecuted=',num2str(c*(step^2)/(sfinalmatrix*sfinalmatrix))))
fib=Ey2a4(b:b+300-1,a:a+248-1);
C(b+150,a+124)=(sum(sum(conj(fib).*Ey1a4)))./sqrt(Norma);
for k=1:randomscannb
if c==selectedscan(k)
match=1;
end
end
if match==1
fiberscan(b:b+300,a:a+5)=0;
fiberscan(b:b+300,a+243:a+248)=0;
fiberscan(b:b+5,a:a+248)=0;
fiberscan(b+295:b+300,a:a+248)=0;
match=0;
end
end
end
toc
pack
result=abs(C);
%display fiberscan
figure(100);;imagesc([x1(1) x1(sfinalmatrix)],[y1(1) y1(sfinalmatrix)],real(fiberscan));title('Ey2a4 with 100 random scan positions indicated');xlabel('um')
%fill in the blanks:
if step>1
resultx=real(result)*0;
for a=1:sfinalmatrix
for b=1:sfinalmatrix
if result(b,a)==0
elseif a>step+1 & b>step+1 & a<sfinalmatrix-step-1 & b<sfinalmatrix-step-1
hs=round(step/2);
resultx(b-hs:b+hs,a-hs:a+hs)=0*result(b-hs:b+hs,a-hs:a+hs)+result(b,a);
end
end
end
else
resultx=result;
end
%display overlap
axis square;
figure(3);subplot(1,2,1);imagesc([x1(1) x1(sfinalmatrix)],[y1(1) y1(sfinalmatrix)],real(resultx));title('real part of overalp');xlabel('um')
axis square;
figure(3);subplot(1,2,2);imagesc([x1(1) x1(sfinalmatrix)],[y1(1) y1(sfinalmatrix)],imag(resultx));title('imaginary part of overlap');xlabel('um')
axis square;
% contourf(CC);
% colorbar;
% shading flat;
% axis image;
% axis square;
% xlabel('x(\mum)', 'fontsize', 12);
% ylabel('y(\mum)', 'fontsize', 12);
%
답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!