Simulating Light Propagation in Turbulent Atmosphere using pyAtmosphere

Blake Bradford Avatar

·

Simulating Light Propagation in Turbulent Atmosphere using pyAtmosphere

This article explores the physics-based simulation of light propagation in turbulent atmosphere using the pyAtmosphere package. PyAtmosphere is a powerful tool that allows software engineers and solution architects to simulate the behavior of light in turbulent atmospheric conditions. This simulation can be valuable in various applications, such as astronomy, satellite communication, and laser communication.

Installation

To get started with pyAtmosphere, it is highly recommended to use a virtual environment. You can install the required packages using the following command:

pip install -r requirements.txt

If you want to use the GPU for simulation, you need to install CUDA on your machine. Additionally, you will need the cupy Python package. For example, if you are using CUDA 11.0, you can install cupy-cuda110 using the following command:

pip install cupy-cuda110

Usage

GPU Usage

If you want to enable GPU simulation, you can configure pyAtmosphere to use the GPU by adding the following code at the beginning of your script:

python
from pyatmosphere import gpu
gpu.config['use_gpu'] = True

QuickChannel Example

The QuickChannel class in pyAtmosphere allows you to quickly simulate light propagation in turbulent atmosphere with minimal code. Here’s an example:

from pyatmosphere import QuickChannel

quick_channel = QuickChannel(
Cn2=1e-15,
length=10000,
count_ps=5,
beam_w0=0.09,
beam_wvl=8.08e-07,
aperture_radius=0.12
)

quick_channel.plot()

Advanced Channel

For more advanced simulations, you can use the various classes provided by pyAtmosphere. Here’s an example of simulating an advanced channel:

mport numpy as np
from pyatmosphere import (
Channel,
RectGrid,
RandLogPolarGrid,
GaussianSource,
IdenticalPhaseScreensPath,
SSPhaseScreen,
CirclePupil,
MVKModel,
measures
)

channel = Channel(
grid=RectGrid(
resolution=2048,
delta=0.0015
),
source=GaussianSource(
wvl=808e-9,
w0=0.12,
F0=np.inf
),
path=IdenticalPhaseScreensPath(
phase_screen=SSPhaseScreen(
model=MVKModel(
Cn2=5e-16,
l0=6e-3,
L0=1e3,
),
f_grid=RandLogPolarGrid(
points=2**10,
f_min=1 / 1e3 / 15,
f_max=1 / 6e-3 * 2
)
),
length=50e3,
count=5
),
pupil=CirclePupil(
radius=0.2
),
)

channel_output = channel.run(pupil=False)
intensity = measures.I(channel, output=channel_output)
mean_x = measures.mean_x(channel, output=channel_output)

Simulations

In addition to the basic simulations, pyAtmosphere provides more comprehensive simulations for analyzing the behavior of light in turbulent atmosphere. Here’s an example of how to perform simulations:

from pyatmosphere import simulations

beam_result = simulations.BeamResult(quick_channel, max_size=2000)
pdt_result = simulations.PDTResult(quick_channel, max_size=6000)
sim = simulations.Simulation([beam_result, pdt_result])
sim.run(plot_step=1000)

Contributing

Contributions to pyAtmosphere are welcome. If you have any ideas or suggestions for improvement, feel free to open an issue or submit a pull request. The project encourages community involvement and appreciates contributions from all stakeholders.

License

PyAtmosphere is licensed under the GNU GPLv3 license. For more details, refer to choosealicense.com/licenses/gpl-3.0/.


This article has provided an overview of pyAtmosphere and its capabilities for simulating light propagation in turbulent atmosphere. It covered the installation process, usage examples, and available simulations. GPU usage, quick channel simulations, advanced channel simulations, and comprehensive simulations were discussed with code snippets provided. The article also highlighted the project’s commitment to community involvement and encouraged contributions. For more information, refer to the pyAtmosphere repository and its documentation.

Leave a Reply

Your email address will not be published. Required fields are marked *