Я предполагаю, что ваша проблема связана с псевдонимами.
Что такое x
в вашем примере?
Если значения x
, которые вы интерполируете, расположены менее близко, чем ваши исходные точки, вы по своей природе потеряете информацию о частоте. Это полностью независимо от любого типа интерполяции. Это присуще понижающей выборке.
Не берите в голову вышеупомянутый бит о псевдонимах. Это не применимо в этом случае (хотя я все еще не знаю, что такое x
в вашем примере ...
Я только что понял, что вы оцениваете свои точки на исходных входных точках, когда вы используете ненулевой коэффициент сглаживания (s
).
По определению, сглаживание не будет точно соответствовать данным. Попробуйте вместо этого ввести s=0
.
В качестве быстрого примера:
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
x = np.linspace(0, 6.*np.pi, num=100) #interval (0,6*pi) in 10'000 steps
A = 1.e-4 # Amplitude of sine function
y = A*np.sin(x)
fig, axes = plt.subplots(nrows=2)
for ax, s, title in zip(axes, [2, 0], ['With', 'Without']):
yinterp = interpolate.UnivariateSpline(x, y, s=s)(x)
ax.plot(x, yinterp, label='Interpolated')
ax.plot(x, y, 'bo',label='Original')
ax.legend()
ax.set_title(title + ' Smoothing')
plt.show()
Причина того, что вы четко видите эффекты сглаживания с низкой амплитудой, заключается в способе определения коэффициента сглаживания. См. Документацию для scipy.interpolate.UnivariateSpline
для более подробной информации.
Даже с более высокой амплитудой интерполированные данные не будут соответствовать исходным данным, если вы используете сглаживание.
Например, если мы просто изменим амплитуду (A
) на 1.0
в примере кода выше, мы все равно увидим эффекты сглаживания ...