【问题标题】:use of fft, ifft and fftshift in matlabmatlab中fft、ifft和fftshift的使用
【发布时间】:2017-08-20 01:48:19
【问题描述】:

我正在尝试实现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 将零频率移到中心,但后来在循环中它没有fftshift。我尝试将fftshift 添加到主循环中,或者从一开始就将其删除。两者都给出错误的结果,这是为什么呢?一般来说,我什么时候应该使用fftshiftifftshift,尤其是当我试图解决这种情况下的微分方程时?

谢谢

【问题讨论】:

  • 我们需要看看omega 是什么——通常你需要fftshift 等。当您假设您的频率以零为中心时,因为fftifft 假设输入/输出从零开始。你能发布一个简短但完整的例子吗?
  • 编辑了代码

标签: matlab fft numerical-methods ode ifft


【解决方案1】:

您可以通过将信号绘制为图像并注意明显的差异来部分澄清您的疑问,就像我尝试相同时所做的那样。

首先,是否使用 fftshift 和 ifftshift 取决于您正在处理的信号类型。

  1. fft 函数认为您的信号从 0 开始,这与我们通常在信号处理中使用的大多数情况不同。与 ifft 相同。

  2. 您的实际负侧被认为是倒置的并移到了极右端,基本上使您的实际绘图从示例 -5 到 5 变为 0 到 10。

  3. 这就是我们使用 fftshift 重新排列数据以将其返回的地方 以 0 为中心。

  4. 如果您想将信号转换回无序形式以计算 fft 或 ifft(您基本上应该这样做),您应该使用 ifftshift。 它没有变化。它与 fftshift 相反。

    好的,为了简单起见,请按照这个 switch case-

开关(信号): {

大小写(信号有 -ve 和 +ve 部分,以零为中心):

  • 应用 ifftshift 使其在 fft 或 ifft 之前无序
  • 将 fftshift 应用于结果以返回与信号形式相同的输出。

案例(信号已经无序):

  • 直接应用fft或ifft。
  • 如果您想以自然类型查看结果,请将 fftshift 应用于结果。

案例(同时应用fft和ifft):

  • 继续,没关系。执行单个操作时担心信号

}

【讨论】:

  • 谢谢,但在我的例子中,为什么一开始就使用了fftshift,但在主循环中却没有?
  • 这对于一些简单的代码示例非常有帮助(OP 中的代码,带有 for 循环,只是不是很清楚)。例如,案例 3 仅“继续就好”是什么意思?同时应用 fft 和 ifft 是什么意思?令人愤怒的是,在 Matlab 中 fft() 的实现和记录是多么糟糕。互联网上充斥着如何正确使用它的困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多