一个有趣的光学图案绘制程序

一个有趣的光学图案绘制程序

λ = 600 n m \lambda = 600 nm λ=600nm
α = 0.5 \alpha = 0.5 α=0.5
a = 5 λ a = 5 \lambda a=5λ
k = 2 π / λ k = 2 \pi / \lambda k=2π/λ
w 0 = 5 λ w_0 = 5 \lambda w0=5λ
z 0 = k ⋅ w 0 ⋅ w 0 / 2 z_0 = k \cdot w_0 \cdot w_0 / 2 z0=kw0w0/2
z = α ⋅ z 0 z = \alpha \cdot z_0 z=αz0
A = 2 π p ! / ( p + s ) ! A = \sqrt {2 \pi p!/(p+s)!} A=2πp!/(p+s)!
w ( z ) = w 0 1 + ( z / z 0 ) 2 w(z) = w_0 \sqrt{1+(z/z_0)^2} w(z)=w01+(z/z0)2
z 1 = 50 z_1 = 50 z1=50

b = 1 w ( z ) 2 ( 1 + j z z 0 ) , b ∗ = 1 w ( z ) 2 ( 1 − j z z 0 ) b = \frac{1}{w(z)^2}(1 + j\frac{z}{z_0}), \quad b^{*} = \frac{1}{w(z)^2}(1 - j\frac{z}{z_0}) b=w(z)21(1+jz0z),b=w(z)21(1jz0z)

C 1 = 1 2 s ( A π k z ) 2 ( b ∗ w ( z ) ) 2 p w 0 2 ( s + p ) C_1 = \frac{1}{2^s} \left( \frac{A \pi k}{z} \right)^2 \frac{(b^{*} w(z))^{2p} }{w_0^{2(s+p)}} C1=2s1(zAπk)2w02(s+p)(bw(z))2p

r n = n a N , φ m = ( m − 1 ) 2 π M r_n = n \frac{a}{N}, \quad \varphi_m = (m-1)\frac{2 \pi}{M} rn=nNa,φm=(m1)M2π

C 2 = e x p ( − j k z 1 ( x ⋅ r n ⋅ c o s ( φ m ) + y ⋅ r n ⋅ s i n ( φ m ) ) ) C_2 = exp(-j\frac{k}{z_1}(x\cdot r_n \cdot cos(\varphi_m) + y \cdot r_n \cdot sin(\varphi_m))) C2=exp(jz1k(xrncos(φm)+yrnsin(φm)))

C 3 = ( k r n z 1 ) s ⋅ e x p ( − 1 4 b ( k r n z 1 ) 2 ) C_3 = (\frac{k r_n}{z_1})^s \cdot exp(-\frac{1}{4b}(\frac{kr_n}{z_1})^2) C3=(z1krn)sexp(4b1(z1krn)2)

C 4 = L p s ( 1 4 ∣ b ∣ 2 ( k r n z 1 ) 2 ) ⋅ e x p ( − j s φ m ) C_4 = L_p^s (\frac{1}{4|b|^2}(\frac{kr_n}{z_1})^2) \cdot exp(-js\varphi_m) C4=Lps(4b21(z1krn)2)exp(jsφm)

C s = ∑ m = 1 M ∑ n = 1 N C 2 ⋅ C 3 ⋅ C 4 C_s = \sum_{m=1}^{M} \sum_{n=1}^{N} C_2 \cdot C_3 \cdot C_4 Cs=m=1Mn=1NC2C3C4

I ( x , y , z 1 ) = C 1 ⋅ ∣ C s ∣ 2 I(x, y, z_1) = C_1 \cdot |C_s|^2 I(x,y,z1)=C1Cs2

Python 程序代码如下:

import numpy as np
import matplotlib.pyplot as plt
import math
import cmath

PI = math.pi

def Lps(p, s, x):
    
    if p == 0:
        y = 1
    elif p == 1:
        y = -x + s + 1
    elif p == 2:
        y = 0.5 * x * x - (s+2) * x + (s+1)*(s+2)/2 
    else:
        y = 0
    
    return y


def fac(x):
    return math.factorial(x)

# p 取值 0,1,2
# s 取值 0,1,2
# alpha 取值 0-1
    
p = 0
s = 1
alpha = 0.5

lam = 550 * 1e-9
Num = 200
a = 5 * lam
k = 2 * PI / lam
w0 = 5 * lam
z0 = k * w0 * w0 / 2
z = alpha * z0

A = (2 * PI * fac(p) / fac(p + abs(s))) ** 0.5
w_z = w0 * math.sqrt(1+(z/z0)**2)

b= complex(1.0/(w_z **2), (z/z0)/(w_z **2))
con_b = complex(1.0/(w_z **2), -(z/z0)/(w_z **2))
z1 = 50

I = np.zeros((Num * 2, Num * 2))
C1_1 = 1 / (2 **s)
C1_2 = (A * PI * k / z1) ** 2
C1_3 = (con_b * w_z) ** (2 * p) / (w0 ** (2*(p+s)))
C1 = C1_1 * C1_2 * C1_3 

M = 8
N = 3

Cen_x = Num + 0.5
Cen_y = Num + 0.5

for yy in range(Num*2):
    for xx in range(Num*2):
        xi = xx - Cen_x
        yi = Cen_y - yy
        Sum_xy = 0 
        for n in range(1, N+1):
            r_n = n * a / N
            for m in range(M):
                phi_m = m * 2 * PI / M
                c2_1 = yi * r_n * math.sin(phi_m) + xi * r_n * math.cos(phi_m)
                c2_j = complex(0, -k/z1 * c2_1)
                # c2_j = complex(y0*r_n*math.sin(phi_m), -k/z1*(x0*r_n* math.cos(phi_m)))
                c2 = cmath.exp(c2_j)
                c3 = ((k*r_n/z1) **p) * (cmath.exp(-(k*r_n/z)**2/(4*b)))
                c4_1 = (k*r_n/z1) ** 2/(4 * abs(b) **2)
                c4 = Lps(p, s, c4_1) * cmath.exp(complex(0, -s * phi_m))
                Sum_xy = Sum_xy + c2 * c3 * c4
        
        I[yy, xx] = abs(C1 * (abs(Sum_xy) ** 2))


I_image=I/np.max(I)

cv2.imwrite('Img_out_3.jpg', I_image * 255)

plt.figure()
plt.imshow(I_image, cmap='gray')
plt.show()
        

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值