private static void TestConvolution(int size) { Complex[] input0vector = RandomComplexes(size); Complex[] input1vector = RandomComplexes(size); Complex[] refoutvector = new Complex[size]; NaiveConvolve(input0vector, input1vector, refoutvector); Complex[] actualoutvector = new Complex[size]; Fft.Convolve(input0vector, input1vector, actualoutvector); Console.WriteLine("convsize={0,4} logerr={1,5:F1}", size, Log10RmsErr(refoutvector, actualoutvector)); }
private static void TestFft(int size) { Complex[] inputvector = RandomComplexes(size); Complex[] refoutvector = new Complex[size]; NaiveDft(inputvector, refoutvector, false); Complex[] actualoutvector = (Complex[])inputvector.Clone(); Fft.Transform(actualoutvector, false); double err = Log10RmsErr(refoutvector, actualoutvector); Complex[] actualinvector = new Complex[size]; for (int i = 0; i < size; i++) { actualinvector[i] = refoutvector[i] / size; } Fft.Transform(actualinvector, true); err = Math.Max(Log10RmsErr(inputvector, actualinvector), err); Console.WriteLine("fftsize={0,4} logerr={1,5:F1}", size, err); }