• 大小: 130KB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2021-09-07
  • 语言: Matlab
  • 标签: matlab  

资源简介

matlab语言 分布傅里叶算法 +原始论文Optimization of the Split-Step Fourier Method in Modeling Optical-Fiber Communications Systems

资源截图

代码片段和文件信息

function [Aoutnumber_of_fftsphadisp]=SSFM(Aindtdznzalphabetapgammatol);

% INPUT
% 利用对称分步傅立叶算法解决脉冲光信号在光纤中传输的非线性薛定谔方程
% Ain 初始脉冲的振幅(矢量)
% dt 取样周期
% dz 选择的初始步长
% nz 运算的总步数
% alpha 损耗系数
% betap 与频率有关的色散多项式
% gamma 非线性系数
% tol   local error method tolerance 

% OUTPUT
% Aout 输出信号的振幅
% number_off_ffts 传输过程中采用快速傅立叶变换算法的次数

N=length(Ain);                %采样的点数N
w=2*pi*(-N/2:(N/2)-1)/(dt*N); % 频率(取样频率的整数倍)                                                                                               
Fiberlength=dz*nz; % 光纤长度
proplength=0;      %传输长度
nf=0;              %记录调用ffts的次数
ln=1;              %计算相角色散用
% 线性算符
LinearOprator=-alpha/2;
for ii=1:length(betap);
    LinearOprator=LinearOprator+j*betap(ii)*(-w).^(ii)/factorial(ii);
end

Afft=fft(Ain); %傅立叶变换
nf=nf+1;       %累计
% LEM_SSFM
fprintf(‘\nSimulation running...      ‘);
while(proplength    if(dz+proplength)>Fiberlength
        dz=Fiberlength-proplength;
    end
    Halfstep=exp(LinearOprator*dz/2);
    Quarterstep=exp(LinearOprator*dz/4);
    Ahalf=ifft(Halfstep.*Afft);  %%%%%%%
    nf=nf+1;
    Aquarter=ifft(Quarterstep.*Afft);   %%%这是在Af计算中能用到的 
    nf=nf+1;
    Ac=Ahalf.*exp(-j*gamma*(abs(Ahalf.^2)*dz)); %%%非线性算子
    Afftc=Halfstep.*fft(Ac);
    nf=nf+1;
    Ac=ifft(Afftc);                %%%%Ac 粗略解
    nf=nf+1;
    
    Af=Aquarter.*exp(-j*gamma*(abs(Aquarter).^2)*dz/2);     %%%Af 精细解
    Afftf=Quarterstep.*fft(Af);
    nf=nf+1;
    Af=ifft(Afftf);
    nf=nf+1;
    Aquarter=ifft(Quarterstep.*Afftf);
    nf=nf+1;
    Af2=Aquarter.*exp(-j*gamma*(abs(Aquarter).^2)*dz/2);
    Afftf=Quarterstep.*fft(Af2);
    nf=nf+1;
    Af=ifft(Afftf);
    nf=nf+1;
    
    %通过分析误差选择合适的步长dz
    %参考Optimization of the Split-Step Fourier Method in Modeling
    %Optical-Fiber Communications Systems 2003 IEEE
    %Local-Error Method
    
    Delta=sqrt(sum((abs(Af-Ac)).^2))/sqrt(sum((abs(Af)).^2));  %%%%%%%????????????????
    
    if(Delta<(tol/2))
        Aout=(4/3)*Af-(1/3)*Ac;
        dd=atand((abs(imag(Aout)))/(abs(real(Aout))));    %反正切值并且结果用度数表示
        phadisp(ln)=dd;    %保存脉冲
        ln=ln+1;
        Afft=fft(Aout);
        nf=nf+1;
        proplength=proplength+dz;  %%%%%%%%
        dz=dz*(2^(1/3));
    elseif(tol<=Delta<=(2*tol))
        Aout=(4/3)*Af-(1/3)*Ac;
        dd=atand((abs(imag(Aout)))/(abs(real(Aout))));    %反正切值并且结果用度数表示
        phadisp(ln)=dd;    %保存脉冲
        ln=ln+1;
        Afft=fft(Aout);
        nf=nf+1;
        proplength=proplength+dz;
        dz=dz/(2^(1/3));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%后加%%%%%%%%%%%%%
    elseif((Delta>2*tol))
        Aout=(4/3)*Af-(1/3)*Ac;
        dd=atand((abs(imag(Aout)))/(abs(real(Aout))));    %反正切值并且结果用度数表示
        phadisp(ln)=dd;    %保存脉冲
        ln=ln+1;
        Afft=fft(Aout);
        nf=nf+1;
        proplength=proplength+dz;
        dz=1/2*dz
%%%%%%%%%%%%%%%%%%%%%%%%%%后加%%%%%%%%%%%%%%%
    else
        Aout=(4/3)*Af-(1/3)*Ac;
       

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     173288  2008-03-18 15:53  分布傅里叶\Optimization of the Split-Step Fourier Method in Modeling Optical-Fiber Communications Systems.pdf

     文件       3610  2008-06-05 22:57  分布傅里叶\分步傅里叶算法.m

     目录          0  2010-02-26 14:36  分布傅里叶

----------- ---------  ---------- -----  ----

               176898                    3


评论

共有 条评论