VSTプラグインで線形畳み込みを実装する必要が出てきたので、 事前にPythonでC++ライクな実装を検証しました。
とりあえず、2つの入力信号の配列サイズ不明で、最適化していない実装です。
import numpy as np from numba import jit @jit def conv_linear(x1, x2, y, len_x1, len_x2, len_y): for k in range(0, len_y): y[k] = 0.0 for m in range(0, len_x1): n = k - m if n >= 0 and n < len_x2: y[k] += x1[m] * x2[n]
使い方
x1, x2 = np.array([1.0, 0.5, 0.1]), np.array([1.0, 0.5]) y = np.zeros(len(x1)+len(x2)-1) conv_linear(x1, x2, y, len(x1), len(x2), len(y)) _plot(x1, x2, y)