做一个fft运算,第一个事先用fftshift对待变换的E0进行操作,第二个没有用fftshift,第三个没有用fftshift但是进行了相位手动修正:
- %%用fft进行角谱传输计算
- %对比fft运算与傅里叶变换(黎曼和)的区别以及修正
- clear
- clc
- close all
-
- scale = 1.5e-4;
- N = 50;
- d0 = 20e-6;%sampling interval
- wave_len=632.8e-9;%wavelength in nm
- k0=2*pi/wave_len;% vacuum wave number
- fs=1/d0;%sample frequency
- z=k0*scale^2;
-
- x=d0*(-0.5*N:1:0.5*N-1);
- E0=abs(x)
- I0=abs(E0).^2;
-
- %初始面光强
- figure(1)
- plot(x,I0);
- drawnow
-
- %初始面相位
- figure(2)
- plot( x,mod(angle(E0),2*pi));
-
- %傅里叶变化
- figure(3)
- ufft10=fftshift(fft(fftshift(E0)));%fftshift就是把频率平移,自己查资料,百度也行。如果不平移,那得知道每个地方对应的真实频率。
- ufft10=ufft10';
-
- subplot(1,3,1)
- plot(mod(angle(ufft10),2*pi));
-
- p=0:N-1;
- ufft11=fftshift(fft(E0));%fftshift就是把频率平移,自己查资料,百度也行。如果不平移,那得知道每个地方对应的真实频率。
- ufft11=ufft11';
- subplot(1,3,2)
- plot( mod(angle(ufft11),2*pi));
-
- ufft12=fftshift(exp(1i*pi*p).*fft(E0));
- ufft12=ufft12';
- subplot(1,3,3)
- plot( mod(angle(ufft12),2*pi));
- %由于计算误差,可能会出现0和2pi的区别,画图可能会看起来相位不一样,所以可以直接看数据。
-
-
-
-
-
-

相位校正原理:

可以参考文献:FFT计算菲涅尔衍射相位的跳变与矫正研究