两个高斯函数的卷积

时间:2017-08-24 00:06:28

标签: python fft convolution

让我们考虑频率空间中的两个高斯函数f(k)g(k),其中k表示频率。我想对它们进行数值卷积。我们知道两个高斯函数的卷积是高斯函数。但是当我策划时,我不会得到高斯。我在Python中的代码如下。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as sty
sty.use(['seaborn-notebook', 'ggplot'])

L = 17.5
N = 48
dx = L/N
dk = 2*np.pi/L
x = np.arange(N)*dx - L/2
k = 2*np.pi * np.fft.fftfreq(N, dx)

alpha = 1
beta = 1

def f(k):
   return np.sqrt(np.pi/alpha) * np.exp(-k**2/(4*alpha))

def g(k):
   return np.sqrt(np.pi/beta) * np.exp(-k**2/(4*beta))

fs = np.array([f(k_) for k_ in k])
gs = np.array([g(k_) for k_ in k])
numconvfg = np.convolve(fs, gs)[:len(k)]

plt.plot(ks, numconvfg)

enter image description here

我有两个问题:

问题1

为什么我没有在剧情中获得高斯?我应该如何修改代码以便在图中获得高斯?

问题2

如何知道我在卷积过程中遇到锯齿现象?在这种情况下如何显示锯齿效果?

1 个答案:

答案 0 :(得分:0)

由于您的fsgs列表不是高斯,因此您没有获得高斯分布。
np.fft.fftfreq返回以零开头的采样频率列表。因此,您的fsgs列表会以值f(0)g(0)开头。

进行简单的排序

zipped = zip(k,fs,gs)
zipped.sort()
k, fs, gs = zip(*zipped)

和情节

plt.plot(np.convolve(fs, gs))

给你一个高斯图:

plot

你可能想要更加谨慎地构建高斯人。要查看采样的好坏,可以使用数据点(plt.plot(k,fs,'x')而不是线来绘制函数。