Info

この質問は閉じられています。 編集または回答するには再度開いてください。

how to avoid the complex result when using ifft2

2 ビュー (過去 30 日間)
Donyau Chiang
Donyau Chiang 2016 年 6 月 24 日
閉鎖済み: MATLAB Answer Bot 2021 年 8 月 20 日
How are you? I tried to solve an optical intensity distribution problem, based on the theory derived from Prof. J.W. Goodman and Prof. M. Mansuripur. My code is below: % calculate the intensity pattern for the x- and z- polarized light at a distance % of z=20 from a aperture of radius r0=3, the original polarized being x
close all; clear all;
r0=3.; nod=256; L=10*r0; z0=20.; det=L/nod; du=1/L;
xyp=(-nod/2:nod/2-1)*det; [xp,yp]=meshgrid(xyp,xyp);
% create a circle of radius r0=3 vn1=find(sqrt(xp.*xp+yp.*yp) <= r0); t1=zeros(nod,nod); t1(vn1)=ones(size(vn1));
uv=(-nod/2:nod/2-1)*du; [u,v]=meshgrid(uv,uv); vn2=find(sqrt(u.*u+v.*v) <= 1); A1=zeros(nod,nod); A1(vn2)=ones(size(vn2));
% do the FFT for circle aperture T1=fftshift(fft2(t1)); T1=T1.*A1;
sgz=sqrt(ones(nod)-u.*u-v.*v);
% create x-polarized component fxx fxx=(ones(nod)+sgz-u.*u)./((ones(nod)+sgz).*sqrt(sgz)); gt=exp(i*2*pi*z0*sgz); ta=((T1.*fxx).*gt); tb=ifft2(ta); Ta=tb.*conj(tb);
mesh(xp,yp,Ta)
% create z-polarized component fxz fxz=-u./sqrt(sgz); tc=((T1.*fxz).*gt); tc=ifft2(tc); Tb=tc.*conj(tc);
figure mesh(xp,yp,Tb)
I get the error message from MatLab as: Error using ==> surface X, Y, Z, and C cannot be complex.
But if I use L=100*r0, I can get the result. Could someone teach me the restriction to use ifft2 command? Your help will be great appreciated. With best Regard Donyau

回答 (0 件)

この質問は閉じられています。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by