matlab中fft与fftshift,在matlab中使用fft,ifft和fftshift

我试图实现

split-step fourier方法来解决光学中的非线性薛定谔方程.它主要分别处理线性部分和非线性部分.它通过傅立叶变换和时域中的非线性部分来求解线性部分.

从书中复制以下代码:

alpha = 0

beta_2 = 1

gamma = 1

T = linspace(-5,5,2^13);

delta_T = T(2)-T(1);

L = max(size(A));

delta_omega = 1/L/delta_T*2*pi;

omega = (-L/2:1:L/2-1)*delta_omega;

A = 2*sech(T);

A_t = A;

step_num = 1000;

h = 0.5*pi/step_num;

results = zeros(L,step_num);

A_f = fftshift(fft(A_t));

for n=1:step_num

A_f = A_f.*exp(-alpha*(h/2)-1i*beta_2/2*omega.^2*(h/2));

A_t = ifft(A_f);

A_t = A_t.*exp(1i*gamma*(abs(A_t).^2*h));

A_f = fft(A_t);

A_f = A_f.*exp(-alpha*(h/2)-1i*beta_2/2*omega.^2*(h/2));

A_t = ifft(A_f);

results(:,n) = abs(A_t);

end

其中A_t是脉冲(要求解的函数).我不明白的是,在一开始它使用fftshift将零频率移动到中心,但是后来在循环中它没有ffthift.我尝试将fftshift添加到主循环中,或者在开始时将其删除.两者都给出了错误的结果,为什么呢?一般来说,我什么时候应该使用fftshift和ifftshift,特别是当我试图像这种情况那样解决微分方程时?

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值