资源简介
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
相关资源
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
评论
共有 条评论