接下来是仿真运行的主体部分,使用者可以按照“发端-信道-收端”的通信系统结构,使用IFTS包中的模块构建起一次完整的仿真过程。其中将调用IFTS包中的各模块函数完成仿真。

发射端#

首先需要构建起通信系统的发端。在光传输仿真的发端,可以通过调用信号及发射机模块进行信号序列的生成和滤波整形以得到待传输信号。信号序列的生成如下所示,先通过调用sig模块中的函数生成每一通道下的每个偏振信号的比特序列和符号序列;然后再通过tx模块,获得滤波整形后的信号。

def tx_part():
    @progress_info(total_num = sig_para.channel_num,\
        infor_print = sig_para.infor_print, discription = ' Tx DSP')
    def main(**kwargs):
        pbar = kwargs.get('pbar', 0)
        i_total = 0
        bit_seq_pol, sym_seq_pol, tx_seq_pol, integer_seq_pol = [], [], [], []
        for i_ch in range(sig_para.channel_num): 
            for i_p in range(sig_para.nPol):
                if seed == -1:
                    data_seed = -1
                else:
                    data_seed = seed + i_p + i_ch
                
                #######  调用sig模块进行信号的生成  #######
                bit, sym, sym_map_local, integer = sig_main.sig_tx(sig_para, seed = data_seed)
                bit_seq_pol.append(bit), sym_seq_pol.append(sym), integer_seq_pol.append(integer)
            
            #######  调用tx模块进行滤波整形  #######
            tx_sam = tx_main.tx(sym_seq_pol, tx_para, plot_para)
            bit_seq.append(bit_seq_pol) 
            sym_seq.append(sym_seq_pol)
            integer_seq.append(integer_seq_pol)
            tx_seq.append(tx_sam)
            sym_map.append(sym_map_local)
            if i_ch == sig_para.cut_idx:
                plot_para.get_colour(integer_seq_pol)
            bit_seq_pol, sym_seq_pol, integer_seq_pol = [], [], []
            i_total += 1
            if type(pbar) != type(0):
                pbar.update(1)
    sym_map = []
    bit_seq, sym_seq, tx_seq, integer_seq = [], [], [], []
    main()
    if tx_para.save_data:
        simulation_para.save_data_func(np.array(sym_seq), 'sym_seq', data_mode = 'numpy')
        simulation_para.save_data_func(np.array(sym_map), 'sym_map', data_mode = 'numpy')
    return bit_seq, sym_seq, integer_seq, tx_seq, sym_map

此处可以通过配置文件中的图像输出设置来选择是否展示发端信号及其星座图。生成的信号星座图与发端信号如下所示。另外,发端的处理过程在主函数中会通过进度条显示。

if sig_para.infor_print:
    print('---------------- Tx start ----------------')
bit_seq, sym_seq, integer_seq, tx_seq, sym_map = tx_part()
if sig_para.fig_plot:
    plot_para.scatter_plot(sym_seq[sig_para.cut_idx], name = 'Constellations', s=40)

---------------- Tx start ----------------
Tx DSP Start!
Tx DSP: 100%|████████████████████████████████████████████████████| 1/1 [00:00<00:00,  1.61it/s]
Tx DSP end with the running time 0.6279 s

../../_images/Constellations.png

Fig. 1 初始化信号星座图#

../../_images/Constellation_After_TXDSP.png

Fig. 2 发端DSP后的信号#