我有一个数据集,其配置文件会随着时间的推移而变化。它的形状似乎总是大致呈高斯分布,但高斯“指向”的方式(高斯分布是先上升然后下降,还是先下降然后上升)随时间而变化。每个信号都不是纯高斯信号,而是有噪声......我在这里使用高斯信号进行说明。可以使用以下命令生成两条样本曲线:
import numpy as np
from scipy.stats import norminvgauss
numargs = norminvgauss.numargs
a, b = 20.32, 5.18
rv = norminvgauss(a, b)
dist_1 = np.linspace(0, np.minimum(rv.dist.b, 2))
a2, b2 = 10.32, 10.18
rv2 = norminvgauss(a2,b2)
dist_2 = np.linspace(0, np.minimum(rv2.dist.b, 15))
plt.figure()
plt.plot(rv.pdf(dist_1))
plt.plot(-rv.pdf(dist_2),'--r')
plt.show()
如果没有先验知道高斯点的走向,我如何才能始终确定主要极值索引和值(例如,青色图的最大值点和红色虚线图的最小值点的位置和大小) )?
假设峰值是幅度的绝对最大值或最小值,那么您可以取信号的绝对值并找到它的
argmax
。
import numpy as np
from scipy.stats import norminvgauss
numargs = norminvgauss.numargs
a, b = 20.32, 5.18
rv = norminvgauss(a, b)
dist_1 = np.linspace(0, np.minimum(rv.dist.b, 2))
a2, b2 = 10.32, 10.18
rv2 = norminvgauss(a2,b2)
dist_2 = np.linspace(0, np.minimum(rv2.dist.b, 15))
y1 = rv.pdf(dist_1)
y2 = -rv.pdf(dist_2)
max1 = np.argmax(np.abs(y1))
max2 = np.argmax(np.abs(y2))
peak1 = y1[max1]
peak2 = y2[max2]
print(peak1, peak2) # 1.7462235049271382 -1.6829064093546884