我想用MATLAB fft2函数进行电磁波传播

时间:2013-02-27 15:35:14

标签: matlab fft ifft

我希望通过

进行EM(电磁)波传播
  1. 在平面z == d,A = fft2(F(x,y,d))
  2. 中找到场傅里叶变换
  3. PS(phaseshift)kz = k^2 -(kx^2+ky^2)其中kx = 2*pi*1/dx ,ky = 2*pi*1/dy
  4. C = IFFT2(A*EXP(i*PS)
  5. 但我没有得到预期的结果,我认为我混淆了FFT输出排列和我定义kx和ky排列的方式

    任何线索都表示赞赏。

    流程图如下:    1.计算z == d

    上的字段

    2.在z == d =====>进行场的傅里叶2D变换。 F(Kx的,肯塔基州,d)  在哪里,

     kx = 2*pi*fx , fx = 1/dx
     ky = 2*pi*fy , fy =1/dy
     kz = k^2 – (kx^2+ky^2)
    

    3.当d1> d时,取(F(Kx,Ky,d)*exp(i*kz*(Z-d))) @ Z == d1的逆傅里叶变换,找到z == d1中的总场    这种情况发生在z = d1,d1,......,dn

    然而,我对fft输出的频率安排感到困惑,而我定义空间频率(kx和Ky)的方式是一致的。

2 个答案:

答案 0 :(得分:1)

看来你正在通过弗劳恩霍夫逼近传播波吗?虽然我不确定你的输出是什么样的,但FFT通常会“分割”所需的信号,使其中一半位于窗口右侧,一半位于左侧。

尝试使用:

fftshift(fft(yourstuff));

请务必阅读MATLAB中的fftshift帮助条目。

如果幅度有问题,请记住正确归一化FFT(除以最大值的bin)。

答案 1 :(得分:0)

您是否检查过之前是否使用过i变量(例如在for循环中?)有时会被覆盖...(在使用j或plain sqrt(-1)的情况下)