首页 > 解决方案 > 从numpy中的2d功率谱密度函数中检索完整的2d自相关函数

问题描述

我的问题是信号处理和 python 之间的边界。

我有一个 2d 功率谱密度函数 (PSDF),它构建在正空间频率点上Nx/2 + 1,并Ny/2 + 1与随机相位叠加(随机数来自均匀分布)。我想用它的二维傅里叶逆变换(在 python numpy 中numpy.fft.iff2())来检索它的(Nx,Ny))自相关函数。为此,我必须构建复杂 PSDF 的二维对称或镜像。

这就是我的问题所在,我如何构建镜子?fft我在 1d案例中发现了类似问题的语气,这很简单。事实证明,在 2d fft2中,镜子有不同的顺序;

第 1 象限[1:Nx/2+1,1:Ny/2+1]是第 4 象限的复共轭镜像,第[(Nx/2+2):Nx,(Ny/2+2):Ny]2 象限[1:(Nx/2 +1),(Ny/2+1):Ny]是第 3 象限的复共轭镜像[(Nx/2+2):Nx,1:(Ny/2+1)](切片的约定可能因不同语言而异,如果NxNy是偶数或奇数,请注意)。

鉴于第一和第三象限不是彼此的镜像(与第二和第四象限相同),这是否意味着您不能(Nx,Ny)使用第一个(Nx/2+1,Ny/2+1)PSDF 值重建完整的自相关函数?我在这里缺少什么吗?

下面是一个示例 python 代码,numpy.fft.fft2d用于显示这一点:

import numpy as np
x1 = np.arange(6)*1e-5
y1 = np.arange(6)*0.25
z = np.zeros( (len(x1),len(y1)) )
z = (x1[:,np.newaxis] + 2* y1[np.newaxis,:])  + 3
z_fft = np.fft.fft2(z)
np.set_printoptions(precision=3)
print(z_fft)

屏幕输出如下:

[[  1.530e+02 +0.000e+00j  -9.000e+00 +1.559e+01j  -9.000e+00 +5.196e+00j  -9.000e+00 +0.000e+00j  -9.000e+00 -5.196e+00j  -9.000e+00 -1.559e+01j]
 [ -1.800e-04 +3.118e-04j  -7.692e-16 -2.546e-15j   1.392e-15 -8.802e-16j  -1.776e-15 +0.000e+00j   2.161e-15 -6.582e-16j   7.692e-16 +1.007e-15j]
 [ -1.800e-04 +1.039e-04j  -3.251e-16 +1.776e-15j  -1.717e-15 +1.110e-16j   1.776e-15 +0.000e+00j  -9.477e-16 -1.110e-16j   1.213e-15 -1.776e-15j]
 [ -1.800e-04 +0.000e+00j  -8.882e-16 +0.000e+00j   8.882e-16 +8.882e-16j  -1.776e-15 +0.000e+00j   8.882e-16 -8.882e-16j  -8.882e-16 -0.000e+00j]
 [ -1.800e-04 -1.039e-04j   1.213e-15 +1.776e-15j  -9.477e-16 +1.110e-16j   1.776e-15 +0.000e+00j  -1.717e-15 -1.110e-16j  -3.251e-16 -1.776e-15j]
 [ -1.800e-04 -3.118e-04j   7.692e-16 -1.007e-15j   2.161e-15 +6.582e-16j  -1.776e-15 +0.000e+00j   1.392e-15 +8.802e-16j  -7.692e-16 +2.546e-15j]]

标签: pythonnumpyimage-processingscipysignal-processing

解决方案


推荐阅读