非线性薛定谔方程数值求解器项目说明文档
项目介绍
本项目是一个基于对称分步傅里叶算法(Symmetric Split-Step Fourier Method, SSFM)的数值计算程序,专门用于求解非线性薛定谔方程(Nonlinear Schrödinger Equation, NLSE)。该模型描述了光脉冲在考虑二阶色散、克尔非线性和损耗的光纤介质中的演化过程。通过该程序,用户可以模拟不同初始形状的脉冲在光纤中传输时的时域和频域演变,是分析孤子传输、自相位调制(SPM)以及脉冲致宽等现象的有效工具。
功能特性
- 采用对称分步法:通过将色散算子分为两个半步,分别在非线性操作前后进行计算,提高了数值仿真的准确性。
- 支持多种初始脉冲:内置双曲正割脉冲(sech)、高斯脉冲(Gaussian)以及超高斯脉冲(Super-Gaussian)的初始化模板。
- 物理效应全面:涵盖了二阶色散(GVD)、非线性克尔效应以及光纤线性损耗(Alpha)。
- 动态指标监测:在传输过程中实时计算脉冲的均方根(RMS)宽度。
- 全方位可视化:提供时域演化三维图、时域对比图、频域功率谱对比图以及脉宽演化趋势图。
使用方法
- 环境准备:确保计算机上安装了 MATLAB 环境。
- 参数配置:在主程序起始部分的参数设置区修改物理参数。例如:
* 设置光纤总长度(L)和计算步长(dz)。
* 调整色散参数(beta2)、非线性系数(gamma)和损耗系数(alpha_db)。
* 选择脉冲类型(pulse_type)并设置对应的峰值功率(P0)和脉宽(T0)。
- 启动计算:运行程序,系统将自动执行分步傅里叶迭代过程。
- 观察结果:程序会自动弹出绘图窗口展示仿真生成的四组核心数据图表,并在命令行输出传输前后的宽度变化及最大相位偏移。
系统要求
- 软件环境:MATLAB R2016a 或更高版本。
- 核心函数需求:需要 MATLAB 自带的信号处理相关函数,包括 fft、ifft、fftshift、ifftshift 以及基础绘图库。
实现逻辑与算法细节
#### 1. 离散化与网格设置
程序首先定义了一个时间窗口,将其划分为 N 个采样点(通常为 2 的幂次方以优化 FFT 效率)。基于此时间窗口构建时间轴,并根据傅里叶变换关系导出对应的频率轴和角频率轴。传输距离 L 被离散化为多个长度为 dz 的步长。
#### 2. 对称分步傅里叶算法(SSFM)步骤
程序的动力学核心是一个循环迭代过程。对于每一个纵向步长 dz,算法执行以下操作:
- 半步色散计算:在频域内,将脉冲频谱乘以预先计算好的色散算子的半步增益(exp((i*beta2/2*omega^2 - alpha/2) * (dz/2)))。
- 全步非线性计算:通过逆傅里叶变换(IFFT)将脉冲转回时域。计算由克尔效应引起的非线性相移(exp(i*gamma*|A|^2*dz)),并直接作用于时域包络。
- 完成剩余半步色散:再次通过傅里叶变换(FFT)回到频域,乘以另外半步的色散算子。
- 数据恢复:通过 IFFT 返回时域,记录当前位置的脉冲振幅信息。
#### 3. 核心计算函数说明
- 脉冲初始化逻辑:利用 switch 分支结构,根据用户定义的类型和参数计算复包络的起始状态。
- 算子预计算:为提高效率,色散和损耗算子被预先计算为包含角频率 omega 的指数矩阵。
- 均方根宽度计算函数:定义了专门的内联函数,通过计算强度分布的一阶矩(重心)和二阶矩(方差),准确提取脉冲在时域的 RMS 宽度,从而量化记录脉冲的展宽或压缩。
#### 4. 可视化实现逻辑
- 时域演化三维图:使用网格绘图方式展示不同传播距离下脉冲强度的变化。
- 包络与频谱对比:提取传输起点和终点的数据,展示时域包络的形变以及频域功率谱(以 dB 为单位)的展宽情况。
- 参数追踪:绘制 RMS 宽度随传播距离的变化曲线,清晰展示色散与非线性共同作用下脉冲宽度的动态演变。