##device_manager dir
function list:
1. device_selection
2. cuda_number
a decorator device_selection is defined, if cuda is used, this function will perform operation on the correct device
if a function is decortated by this decorator, args is a,b,c,d
if provided_backend is True, the following is performed:
func(backend,a,b,c,d)
The backend is set in the decorator, is device is 'cuda', the backend will be set to cupy, and if device is 'cpu', the backend will be set to numpy
Examples:
from ocsim import device_selection
def normalize(signal, device):
# define the real function
@device_selection(device, provide_backend=True)
# real_func(*args,**kwargs)
# if provid_backend:
# func(backend,*args,**kwargs)
# else:
# func(*args,**kwargs)
def normailize_(backend, args):
# do sth to signal
return 2
normailize_(1) # real_func(1)----> normailize(backend,1)
1. constl.py
2. Signal.py
#TO BE ADDED
Two classes are defined here:
Signal: The baseclass of all Signal
QamSignal: The class represents QamSignal
SignalSetting: define the paprameters of the class QamSignal
define a QamSignal object
from ocsim import QamSignal, SignalSetting
signal_setting = SignalSetting(
center_freq=193.1e12, sps_in_fiber=4,
device='cuda:0', symbol_rate=35e9,
sps_dsp=2
)
signal = QamSignal(signal_setting=signal_setting)
signal.normalize() # inplace normalize the signal
signal.to('cuda:1') # Move signal to NVIDIA GRAPHIC CARD
signal.power() # print the signal power in W and dBm
Define the function at Tx and Rx
Tx: rrc pulse shaping
Rx: CDC, matched_filter, LMS_PLL and superscalaer
Define the electrical and optical instruments, at current state, Laser and Mux are implemented
Define the low-level lms_pll function using numba LLVM compiler to speed up