///|
pub fn convolve(
  signal : ArrayView[Double],
  kernel : ArrayView[Double],
) -> Array[Double] raise SpectrumError {
  let n = signal.length()
  let m = kernel.length()
  if n == 0 || m == 0 {
    raise EmptySignal
  }
  let out = Array::make(n + m - 1, 0.0)
  for i in 0.. Array[Double] raise SpectrumError {
  let n = signal.length()
  let m = kernel.length()
  if n == 0 || m == 0 {
    raise EmptySignal
  }
  let len = if n > m { n } else { m }
  let out = Array::make(len, 0.0)
  for i in 0..