考虑频率空间中的两个高斯函数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
我怎么知道在卷积过程中我有混叠伪影?在这种情况下,怎样才能显示混叠效应呢?
发布于 2017-08-24 01:22:22
您不会得到高斯,因为您的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))给出一个高斯图:

。
不过,你可能会想要更小心地构造高斯人。要查看采样效果如何,可以用数据点( data,plt.plot(k,fs,'x')而不是行来绘制函数。
https://stackoverflow.com/questions/45850988
复制相似问题