我在插值一组分段常数点时遇到麻烦。为了更好地解释,请考虑以下代码:
import numpy as np
from scipy.interpolate import UnivariateSpline
import matplotlib.pyplot as plt
N = 30
Ts = 0.2
times = np.arange(0.0, N * Ts, Ts)
signal = np.concatenate((1.5 * np.ones(10), -0.5 * np.ones(10), np.ones(10)))
interp = UnivariateSpline(times[::3], signal[::3])
signal_interp = interp(times)
plt.plot(times, signal)
plt.plot(times, signal_interp)
plt.show()
我预计 的情节signal_interp
会与 的情节重叠signal
,但这并没有发生。
我也尝试在这里查看,但找不到针对我的具体案例的任何指导。
interp
是时间的函数,而不是信号的函数。你的意思
signal_interp = interp(times)
不是
signal_interp = interp(signal)
这使
它仍然没有“重叠”初始信号。但样条曲线不能采用分段常数函数的形式。它们本质上是光滑的。这就是他们所做的。它们之所以被精确地使用,是因为它们不是分段常数。它们似乎能够用您的初始代码产生分段恒定行为的原因是,您绘制的只是样条线的 3 个点,每个点重复 10 次(因为使用的横坐标是 ,其中仅包含 3 个点
signal
)值,重复 10 次)。尽管如此,你还可以通过减少平滑因子来实现更多
s
np 插值
对于每对连续点之间的简单线性插值(因此可能不太平滑),