无量纲化非线性薛定谔方程基本形式:
Step1:对方程性质分析,将待求解方程改写为含线性算符与非线性算法形式如下:
Step2:两项在光传播时同时作用,在编程上,假设取一小段距离,在这小段距离上线性项与非线性项分别作用,可将方程化为分别独立的的两端分别求解:
以光纤为例:
线性算符含:色散系数,光纤损耗系数 非线性算符含:非线性系数
此处同样通过matlab对其进行数值仿真,快速傅里叶变换与逆变换可直接通过matlab内置函数fft与ifft实现。输入的各项常数与初值来源于引用的他人已发表的相关领域结论。
输入的相关值包括:光纤损耗值、光前非线性参数、初始脉冲宽度、二阶色散与二阶色散长度等。
输入参考值:
Po=0.00064; %输入瓦功率
alpha=0; %光纤损耗值,单位dB/km
alph=alpha/(4.343); %光纤损耗值,单位dB/km
gamma=0.003; %光纤非线性参数
to=125e-12; %初始脉冲宽度,单位秒
C=-2; %第一次计算输入的啁啾参数
b2=-20e-27; %波数的倒数
Ld=(to^2)/(abs(b2)); %二阶色散长度,单位是m
pi=3.1415926535;
Ao=sqrt(Po); %光振幅
tau =- 4096e-12:1e-12: 4095e-12;dt=1e-12;
rel_error=1e-5;
h=1000;% 光步长
完整代码:
clc; clear all; close all; clf;
cputime=0;
tic;
ln=1;
i=sqrt(-1);
Po=0.00064; %输入瓦功率
alpha=0; %光纤损耗值,单位dB/km
alph=alpha/(4.343); %光纤损耗值,单位dB/km
gamma=0.003; %光纤非线性参数
to=125e-12; %初始脉冲宽度,单位秒
C=-2; %第一次计算输入的啁啾参数
b2=-20e-27; %波数的倒数
Ld=(to^2)/(abs(b2)); %二阶色散长度,单位是m
pi=3.1415926535;
Ao=sqrt(Po); %光振幅
tau =- 4096e-12:1e-12: 4095e-12;dt=1e-12;
rel_error=1e-5;
h=1000;% 光步长
for ii=0.1:0.1:1.5 %不同的光纤长度不同,这个量可变
z=ii*Ld;
u=Ao*exp(-((1+i*(-C))/2)*(tau/to).^2);
figure(1)
plot(abs(u),'r');
title('输入方程'); xlabel('Time'); ylabel('振幅');
grid on;
hold on;
l=max(size(u));
fwhm1=find(abs(u)>abs(max(u)/2));
fwhm1=length(fwhm1);
dw=1/l/dt*2*pi;
w=(-1*l/2:1:l/2-1)*dw;
u=fftshift(u);%零延迟对中的谱
w=fftshift(w); %零延迟对中的谱
spectrum=fft(fftshift(u)); %快速离散傅立叶变换
for jj=h:h:z
spectrum=spectrum.*exp(-alph*(h/2)+i*b2/2*w.^2*(h/2)) ; %括号里为线性算符e的指数表达式
f=ifft(spectrum);%快速离散反傅立叶变换
f=f.*exp(i*gamma*((abs(f)).^2)*(h)); %括号里为非线性算符e的指数表达式
spectrum=fft(f); %快速离散傅立叶变换
spectrum=spectrum.*exp(-alph*(h/2)+i*b2/2*w.^2*(h/2)) ;
end
f=ifft(spectrum);%快速离散反傅立叶变换
op_pulse(ln,:)=abs(f);%保存在所有间隔点上的输出脉冲
fwhm=find(abs(f)>abs(max(f)/2));
fwhm=length(fwhm);%比最大值一半还大的元素的个数,超短光脉冲传输前后的展宽因子
ratio=fwhm/fwhm1; %每一个值是PBR
pbratio(ln)=ratio;%保存每一步的PBR
dd=atand((abs(imag(f)))/(abs(real(f))));
phadisp(ln)=dd;%保存脉冲相位
ln=ln+1;
end
toc;
cputime=toc;
figure(2);
mesh(op_pulse(1:1:ln-1,:));
title('脉冲演化');
xlabel('时间'); ylabel('长度'); zlabel('振幅');
figure(3);
plot(pbratio(1:1:ln-1),'k');
xlabel('步数');
ylabel('脉冲展宽g比');
grid on;
figure(4);
plot(phadisp(1:1:ln-1),'k');
xlabel('距离里程');
ylabel('相变');
grid on;
disp('CPU time:'), disp(cputime);