Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 如何进行FFT卷积?如何进行规范化?_Numpy_Fft_Convolution_Fftw - Fatal编程技术网

Numpy 如何进行FFT卷积?如何进行规范化?

Numpy 如何进行FFT卷积?如何进行规范化?,numpy,fft,convolution,fftw,Numpy,Fft,Convolution,Fftw,在Python中,我们可以通过numpy.fft进行卷积。例如,如果我们试图计算SIS模型的引力透镜信号,我们可以将$\kappa$定义为 $\kappa=\frac{\theta{\rm E}}{2}\theta}$, 然后,我们可以通过卷积计算偏转角$\alpha$,作为$\alpha=\frac{1}{\pi}\int d\theta'^2\kappa(\theta)\frac{\theta-\theta'}{{124;\ theta-\theta'}$。理论上,偏转为$\alpha(\t

在Python中,我们可以通过numpy.fft进行卷积。例如,如果我们试图计算SIS模型的引力透镜信号,我们可以将$\kappa$定义为 $\kappa=\frac{\theta{\rm E}}{2}\theta}$, 然后,我们可以通过卷积计算偏转角$\alpha$,作为$\alpha=\frac{1}{\pi}\int d\theta'^2\kappa(\theta)\frac{\theta-\theta'}{{124;\ theta-\theta'}$。理论上,偏转为$\alpha(\theta)=\theta{\rm E}\frac{\theta}{{124;\ theta}$。但当我试图用numpy.fft计算时,我对一些归一化因子感到困惑。比如说,

npix   = 2048        #mesh grid number
thetaE = 0.5         #a constant
dtheta = thetaE/10   #grid resolution
theta_x, theta_y, theta = mesh_theta(npix, dtheta)  #assign grid position for calculation, theta will be an array of 2048*2048

kappa = thetaE/2./theta   #define kappa mesh, 2048*2048
kern_alpha_x, kern_alpha_y = kernal_alpha(theta_x, theta_y)    #define kernal mesh, 2048*2048

###zero padding should be used###

kappa_fft = np.fft.fft2(kappa)
kern_alpha_x_fft = np.fft.fft2(kern_alpha_x)
kern_alpha_y_fft = np.fft.fft2(kern_alpha_y)

alpha_x = np.fft.fftshift(np.fft.ifft2(kappa_fft*kern_alpha_x_fft)).real
alpha_y = np.fft.fftshift(np.fft.ifft2(kappa_fft*kern_alpha_y_fft)).real

如上所示,$\alpha{\rm x}$,$\alpha{\rm y}$可以通过$\kappa$和$K{\alpha{\rm x}$,$K{\alpha{\rm y}$$之间的卷积来计算,这意味着偏转$\124;\ alpha}=\sqrt{\alpha{\rm x}^2+\alpha{\rm y}$。然而,当我检查来自
alpha_x,alpha_y
的结果时,似乎应该乘以一个标准化。如果我将一个因子乘以
np.sqrt(alpha_x**2+alpha_y**2)*dtheta*dtheta
,那么结果似乎是正确的。我不知道该不该使用规范化
dtheta*dtheta
,为什么?Thx.

让我们在
{'auto','direct','fft'}
中选择卷积方法。您还可以使用.justice检查哪种方法(可能)最快。卷积可以直接用于计算卷积,事实上,我已经手动将其与fft进行了比较。但是,在卷积.np.fft.fft2具有
norm
关键字参数后,还应手动乘以标准化,因此应为您处理所有标准化。在我看来,无论是卷积核还是信号数据都没有正确地标准化。很难解析latex,因为出于某种原因,它没有为我格式化。