首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想使用MATLAB fft2函数进行电磁波传播。

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

Stack Overflow用户
提问于 2013-02-27 15:35:13
回答 3查看 1.1K关注 0票数 2

我想做电磁波传播

  1. 平面z==d,A = fft2(F(x,y,d))中的场傅里叶变换
  2. PS(相移) kz = k^2 -(kx^2+ky^2),其中kx = 2*pi*1/dx ,ky = 2*pi*1/dy
  3. C = IFFT2(A*EXP(i*PS)

但是我没有得到预期的结果,我想我混淆了FFT的输出排列以及我定义kx和ky排列的方式。

任何线索都很感激。

流程图如下:1.在z==d上计算字段

2.取z ==d =====> F(Kx,Ky,d)场的Fourier二维变换,

代码语言:javascript
复制
 kx = 2*pi*fx , fx = 1/dx
 ky = 2*pi*fy , fy =1/dy
 kz = k^2 – (kx^2+ky^2)

3.取(F(Kx,Ky,d)*exp(i*kz*(Z-d))) @Z == d1的逆傅里叶变换,当d1 >d求z == d1中的总场时,z= d1,d1,…。..,dn

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

EN

回答 3

Stack Overflow用户

发布于 2013-04-15 20:12:11

看来你是在用夫琅和费近似传播波?虽然我不确定您的输出是什么样子,FFT通常会“分割”所需的信号,因此一半在窗口的右边,一半在左边。

试着使用:

代码语言:javascript
复制
fftshift(fft(yourstuff));

一定要在MATLAB中阅读fftshift帮助条目。

如果振幅是一个问题,请记住正确规范化FFT (除以最大值bin)。

票数 1
EN

Stack Overflow用户

发布于 2013-04-15 19:56:46

检查之前是否使用了i变量(例如,在for循环中)?有时会被改写..。(在使用j或普通sqrt(-1)的情况下)

票数 0
EN

Stack Overflow用户

发布于 2022-09-15 09:36:43

注意,kz = sqrt( k^2 - (kx^2+ky^2) )而不是kz = k^2 - (kx^2+ky^2)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15116011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档