我需要得到复域的傅里叶变换。我用的是python。在
我的输入是xy平面电场的二维快照。在
我现在有一个3D数组F[x][y][z],其中F[x][y][0]包含实际组件,F[x][y]1包含字段的复杂组件。在
我当前的代码非常简单,可以执行以下操作:
result=np.fft.fftn(F)
result=np.fft.fftshift(result)
我有以下问题:
1)这是否正确地计算了场的傅里叶变换,还是应该将该场作为二维矩阵输入,每个元素都包含实分量和虚分量?在
2)我只使用实数倍数输入字段的复合分量值(即,如果复数值是6i,我输入了6),这是正确的还是应该作为复数值输入(即输入为“6j”)?在
3)由于这在技术上是一个二维输入字段,我是否应该使用np.fft.fft2相反呢?这样做意味着输出不集中在中间。在
4)输出看起来不像我期望的F的fourier变换,我不确定我做错了什么。在
完整示例代码:
^{pr2}$这两个看起来都不像我期望的F的傅里叶变换。在
我在这里添加另一个答案,适合添加的代码。在
答案仍然是
np.fft.fft2()
。这里有一个例子。我稍微修改了代码。为了验证我们是否需要fft2
我丢弃了其中一个斑点,然后我们知道单个高斯斑点应该转换为高斯斑点(具有特定相位,在绘制绝对值时不会显示)。我还减小了标准差,这样频率响应会变宽一点。在代码:
结果:
为了回到原来的问题,我们只需要改变
positions = [ [150,100] , [150,200] ]
和sigma=.35
而不是sigma=.1
。在您应该使用复杂的numpy变量(通过使用
1j
)并使用fft2
。例如:在
x0
上使用fftn
将执行3D FFT,使用fft
将执行矢量1D FFT。在相关问题 更多 >
编程相关推荐