public void ConvolutionContinuousFftTest() { var target = new WWConvolution(); var h = new WWComplex[256]; for (int i = 0; i < h.Length; ++i) { h[i] = new WWComplex(h.Length - i, 0); } var x = new WWComplex[65536]; for (int i = 0; i < x.Length; ++i) { x[i] = WWComplex.Unity(); } var time1 = DateTime.Now.Ticks; var expected = target.ConvolutionFft(h, x); var time2 = DateTime.Now.Ticks; var actual = target.ConvolutionContinuousFft(h, x, h.Length); var time3 = DateTime.Now.Ticks; double elapsed1 = (time2 - time1) * 0.0001 * 0.001; double elapsed2 = (time3 - time2) * 0.0001 * 0.001; Assert.IsTrue(Compare(actual, expected)); }
static void Ex02() { var h = new WWComplex[] { new WWComplex(1, 0), new WWComplex(-1, 0) }; var x = new WWComplex[] { new WWComplex(1, 0), new WWComplex(2, 0), new WWComplex(3, 0), new WWComplex(1, 0), new WWComplex(-2, 0), new WWComplex(1, 0), new WWComplex(-1, 0), new WWComplex(-2, 0), new WWComplex(1, 0), new WWComplex(3, 0), }; var conv = new WWConvolution(); var y = conv.ConvolutionBruteForce(h, x); Print("h ", h); Print("x ", x); Print("y ", y); var y2 = conv.ConvolutionFft(h, x); Print("y2", y2); Console.WriteLine("distance(y, y2)={0}", WWComplex.AverageDistance(y, y2)); var y3 = conv.ConvolutionContinuousFft(h, x); Print("y3", y3); Console.WriteLine("distance(y, y3)={0}", WWComplex.AverageDistance(y, y3)); }