让我们考虑频率空间中的两个高斯函数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)
我有两个问题:
问题1
为什么我没有在剧情中获得高斯?我应该如何修改代码以便在图中获得高斯?
问题2
如何知道我在卷积过程中遇到锯齿现象?在这种情况下如何显示锯齿效果?
答案 0 :(得分:0)
由于您的fs
和gs
列表不是高斯,因此您没有获得高斯分布。
np.fft.fftfreq
返回以零开头的采样频率列表。因此,您的fs
和gs
列表会以值f(0)
和g(0)
开头。
进行简单的排序
zipped = zip(k,fs,gs)
zipped.sort()
k, fs, gs = zip(*zipped)
和情节
plt.plot(np.convolve(fs, gs))
给你一个高斯图:
你可能想要更加谨慎地构建高斯人。要查看采样的好坏,可以使用数据点(plt.plot(k,fs,'x'
)而不是线来绘制函数。