補間を使用する必要があります。これには常にある程度の不確実性が伴いますが (サンプリング ポイントの間に何があるかは決してわかりません)、サンプリング レートが十分に高い限り、安全な側にいることができます。
import numpy as np
import pylab as plt
from scipy.interpolate import interp1d
CapturedSignal = [[1.0, 1.9, 2.0, 3.0, 3.1, 4.0], [0.0, 0.0, 1.0, 1.0, 0.0, 0.0]]
ReferenceSignal = [[0.5, 2.4, 2.5, 2.7, 2.8, 4.5], [1.2, 1.2, 0.4, 0.4, 1.2, 1.2]]
representation_captured = interp1d(CapturedSignal[0], CapturedSignal[1], kind="linear")
representation_reference = interp1d(ReferenceSignal[0], ReferenceSignal[1], kind="linear")
min_x = max(min(CapturedSignal[0]), min(ReferenceSignal[0]))
max_x = min(max(CapturedSignal[0]), max(ReferenceSignal[0]))
xs = np.linspace(min_x, max_x, 100, False)
captured_interpolated = representation_captured(xs)
reference_interpolated = representation_reference(xs)
captured_signal_in_bounds = np.all(captured_interpolated<reference_interpolated)
plt.plot(xs, captured_interpolated, "r-", label="Captured")
plt.plot(CapturedSignal[0], CapturedSignal[1], "rD")
plt.plot(xs, reference_interpolated, "b-", label="Reference")
plt.plot(ReferenceSignal[0], ReferenceSignal[1], "bD")
plt.title("Signal below reference" if captured_signal_in_bounds else "Signal exceeds bounds")
plt.legend(loc='best')
plt.show()
このプロットの結果:
