基于Matlab的傅里叶变换衍射
我对Matlab非常陌生,正在尝试使用傅里叶变换实现以下菲涅耳衍射: 这摘自以下维基百科页面: 我正在试一个5厘米宽的方形光圈基于Matlab的傅里叶变换衍射,matlab,fft,Matlab,Fft,我对Matlab非常陌生,正在尝试使用傅里叶变换实现以下菲涅耳衍射: 这摘自以下维基百科页面: 我正在试一个5厘米宽的方形光圈 clc;clear; lambda=1*10^-6; w=.05; z=2.0; k=(2*pi)/lambda; x1=linspace(-0.2,0.2,2048); y1=linspace(-0.2,0.2,2048); U1=((abs(x1)<=(w)/2))&((abs(y1)<=(w)/2)); u1=double(U1); f
clc;clear;
lambda=1*10^-6;
w=.05;
z=2.0;
k=(2*pi)/lambda;
x1=linspace(-0.2,0.2,2048);
y1=linspace(-0.2,0.2,2048);
U1=((abs(x1)<=(w)/2))&((abs(y1)<=(w)/2));
u1=double(U1);
figure(1)
plot(x1,u1)
g=u1'*exp(1i*(pi/(lambda*z))*(x1.^2+y1.^2));
G=fftshift(fft2(g));
h=(exp(1i*k*z)/(1i*lambda*z))*exp(1i*(pi/(lambda*z))*(x1.^2+y1.^2));
H=fftshift(fft2(h));
u2=H*G;
figure(2)
plot(x1,abs(u2));
当我绘制场u2时,对于我尝试的任何距离z,它只是显示为一些随机图案,而不是方形光圈的预期衍射图案
就像我说的,我对MATLAB很陌生,很难理解。我想我把它弄得比实际需要的更复杂了,而且我没有正确地实现积分
有什么建议吗?我被卡住了
谢谢 看起来您想用此代码模拟菲涅耳衍射 只需稍作更改,即可查看实际图像。这里显示的是振幅。强度为u2.*2 但是请注意,对于您使用的物理参数,临界采样将发生在距离2米远的地方,更像100米 此外,还需要在输出平面上进行一些额外的重新缩放,而不是在这里进行。否则,对于低菲涅耳数,衍射图样将变得非常小
clc;clear;
N=1048;
L=0.4;
lambda=1*10^-6;
w=.05;
z=500.0;
k=(2*pi)/lambda;
src_delta = L/N;
critical_sampling_z = N*src_delta^2/lambda;
[x1 y1] = meshgrid((-N/2 : N/2-1) * src_delta);
X = double(abs(x1)<w/2); Y = double(abs(y1)<w/2);
u1 = X.*Y;
figure(1);
colormap(gray); imagesc(mat2gray(u1));
g=u1'*exp(1i*(pi/(lambda*z))*(x1.^2+y1.^2));
G=fftshift(fft2(g));
h=(exp(1i*k*z)/(1i*lambda*z))*exp(1i*(pi/(lambda*z))*(x1.^2+y1.^2));
H=fftshift(fft2(h));
u2=H*G;
figure(2);
colormap(gray); imagesc(mat2gray(abs(u2)));