24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1088  |  回复: 1

hywdx510

木虫 (小有名气)

[交流] 【讨论】光纤中光信号非线性效应的传输方程仿真的有关讨论已有1人参与

Agrawal在其所著Nonlinear Fiber Optics(4ed)Appendix B中给出了该方程一个利用split-step解法Matlab程序。程序中按理用快速傅里叶变换fft处都用了反变换ifft,而应该用反变换ifft处都用了正变换fft(在程序中用黑体标注)。
讨论问题:
1. 这样反着用对结果有无影响?
2. 在理论层面分析为什么这样用?
% This code solves the NLS equation with the split-step method
% idu/dz - sgn(beta2)/2 d^2u/d(tau)^2 + N^2*|u|^2*u = 0
% Written by Govind P. Agrawal in March 2005 for the NLFO book
%---Specify input parameters
clear all; %
distance = input(’Enter fiber length (in units of L_D) =’); %
beta2 = input(’dispersion: 1 for normal, -1 for anomalous’);%
N = input(’Nonlinear parameter N = ’); % soliton order
mshape = input(’m = 0 for sech, m > 0 for super-Gaussian = ’);
chirp0 = 0; % input pulse chirp (default value)
%---set simulation parameters
nt = 1024; Tmax = 32; % FFT points and window size
step_num = round(20*distance*N^2); % No. of z steps to
deltaz = distance/step_num; % step size in z
dtau = (2*Tmax)/nt; % step size in tau
%---tau and omega arrays
tau = (-nt/2:nt/2-1)*dtau; % temporal grid
omega = (pi/Tmax)*[(0:nt/2-1) (-nt/2:-1)]; % frequency grid
%---Input Field profile
if mshape==0
uu = sech(tau).*exp(-0.5i*chirp0*tau.^2); % soliton
else % super-Gaussian
uu = exp(-0.5*(1+1i*chirp0).*tau.^(2*mshape));
end
%---Plot input pulse shape and spectrum
temp = fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi); % spectrum
figure;
subplot(2,1,1);
plot(tau, abs(uu).^2, ’--k’); hold on;
axis([-5 5 0 inf]);
xlabel(’Normalized Time’);
ylabel(’Normalized Power’);
title(’Input and Output Pulse Shape and Spectrum’);
subplot(2,1,2);
plot(fftshift(omega)/(2*pi), abs(temp).^2, ’--k’); hold on;
axis([-.5 .5 0 inf]);
xlabel(’Normalized Frequency’);
ylabel(’Spectral Power’);
%---store dispersive phase shifts to speedup code
dispersion = exp(i*0.5*beta2*omega.^2*deltaz); % phase factor
hhz = 1i*N^2*deltaz; % nonlinear phase factor
%*********[ Beginning of MAIN Loop]***********
% scheme: 1/2N -> D -> 1/2N; first half step nonlinear
temp = uu.*exp(abs(uu).^2.*hhz/2); % note hhz/2
for n=1:step_num
f_temp = ifft(temp).*dispersion;
uu = fft(f_temp);

temp = uu.*exp(abs(uu).^2.*hhz);
end
uu = temp.*exp(-abs(uu).^2.*hhz/2); % Final field
temp = fftshift(ifft(uu)).*(nt*dtau)/sqrt(2*pi); %Final spectrum
%***************[ End of MAIN Loop ]**************
%----Plot output pulse shape and spectrum
subplot(2,1,1)
plot(tau, abs(uu).^2, ’-k’)
subplot(2,1,2)
plot(fftshift(omega)/(2*pi), abs(temp).^2, ’-k’)

欢迎大家讨论!
我试过,在循环迭代过程中,交换FFT和IFFT对结果没任何影响,说明FFT和IFFT只是成对出现时随便那个都可以定义为FFT,另一个就成了IFFT
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hywdx510

木虫 (小有名气)

我自己坐沙发
2楼2010-12-23 17:17:17
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 hywdx510 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见