資源簡介
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
評論
共有 條評論