///|
pub fn fft_convolve(
signal : ArrayView[Double],
kernel : ArrayView[Double],
) -> Array[Double] raise SpectrumError {
if signal.length() == 0 || kernel.length() == 0 {
raise EmptySignal
}
let output_length = signal.length() + kernel.length() - 1
let fft_length = next_power_of_two(output_length)
let left = Array::make(fft_length, Complex::zero())
let right = Array::make(fft_length, Complex::zero())
for i in 0..