convolveComplex function

void convolveComplex(
  1. List<double> xreal,
  2. List<double> ximag,
  3. List<double> yreal,
  4. List<double> yimag,
  5. List<double> outreal,
  6. List<double> outimag,
)

Implementation

void convolveComplex(List<double> xreal, List<double> ximag, List<double> yreal,
    List<double> yimag, List<double> outreal, List<double> outimag) {
  var n = xreal.length;
  if (n != ximag.length ||
      n != yreal.length ||
      n != yimag.length ||
      n != outreal.length ||
      n != outimag.length) throw new RangeError("长度不匹配");

  xreal = xreal.toList();
  ximag = ximag.toList();
  yreal = yreal.toList();
  yimag = yimag.toList();
  transform(xreal, ximag);
  transform(yreal, yimag);

  for (var i = 0; i < n; i++) {
    var temp = xreal[i] * yreal[i] - ximag[i] * yimag[i];
    ximag[i] = ximag[i] * yreal[i] + xreal[i] * yimag[i];
    xreal[i] = temp;
  }
  inverseTransform(xreal, ximag);

  for (var i = 0; i < n; i++) {
    outreal[i] = xreal[i] / n;
    outimag[i] = ximag[i] / n;
  }
}