如何旋转高斯场?

问题描述

我有一个代码可以传播高斯场并产生干扰,我想要做的是从每个元素传播并给它一个轻微的旋转。 (图 1)。

Figure 1: rotating the field example

这是 3 个以均匀距离 (10um) 间隔的元素的代码,发生的情况如图 2

Figure 2: Gaussian field prop from 3 elements spaced at 10um

所示。我想要的是从左到右稍微旋转字段,如图 2 所示的 3 个元素的图所示。我该怎么做??。 # -- 编码:utf-8 -- """ 创建于 2021 年 6 月 18 日星期五 15:32:21

@author: Nelson Pinto
"""


# import sys,imp,datetime,os,json
from scipy import constants
import matplotlib.pyplot as plt
# from matplotlib import animation,patches
import numpy as np
# from n_effective import n_effective,n_effective_TM
# from scipy.io import savemat,loadmat
# import nazca as nd
# import nazca.geometries as geom

# Central wavelength / frequency
lambda_c = 1550e-9                              #Central Wavelenght [nm]
f_c      = constants.speed_of_light / lambda_c

n_eff_fpr   = 1
w_e = 1e-6


coord_arr = np.zeros((1000001,2)) +1
coord_arr[:,1] = np.linspace(-1,1,1000001)



w_0 = w_e #* 1e6
#Total power of beam 
# P0 = 0.000001
I0 = 1 #2*P0 / (np.pi*w_0**2)
E0 = np.sqrt(I0)

#E fiels from radial distance r and axial distance z
def E_rz(r,z,l_c):
    #E0 = np.sqrt(2*P0/(np.pi*w_0**2))
    #E0 = 2
    if z == 0:
        return  E0 * np.exp(-r**2/w_0**2) 
    else:
        #Wave number of FPR
        k = (2*np.pi*n_eff_fpr) / l_c
        #Rayleigth distance
        Zr = (np.pi * w_0**2 * n_eff_fpr) / l_c
        #Wavefront curvature
        Rz = z * (1 + (Zr/z)**2)
        #Spot size parameter
        Wz = w_0 * np.sqrt( 1 + (z/Zr)**2  )
        #Gouy phase
        psi = np.arctan(z/Zr)
        #print(E0 * (w_0/Wz) )
        E_rz = E0 * (w_0/Wz) * np.exp(-r**2/Wz**2)  * np.exp(-1j*(k*z + k*((r**2)/(2*Rz)) ) - psi)       
        return E_rz  
    


E_arr = np.zeros((1000001))   
for i in range(0,1000001):
    E_arr[i] = E_rz(coord_arr[i,1],coord_arr[i,0],lambda_c)

    
fig,ax = plt.subplots()        # Create a figure containing a single axes.
#ax.plot(coord_arr[:,E_arr[:],label="In amplitude" )
ax.plot(coord_arr[:,np.abs(E_arr[:]**2),label="In amplitude" )
#ax.set_xlim((-0.1,0.1))

E_arrsum = np.zeros((1000001)) 
E_arrsum = E_arr


#creating second beam
for j in range(1,3):

    coord_arr[:,1] = coord_arr[:,1] + 10e-6*j
    E_arr1 = np.zeros((1000001))   
    for i in range(0,1000001):
        E_arr1[i] = E_rz(coord_arr[i,lambda_c)
        E_arrsum[i] = E_arrsum[i] + E_arr1[i]


fig,E_arr1[:],color="red",label="In amplitude" )
ax.set_xlim((-0.005,0.005))    
    
fig,np.abs(E_arrsum[:]**2),0.1))
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)