public void FWT97Test()
{
double[] x = new double[32];
// Makes a fancy cubic signal
for (int i = 0; i < 32; i++)
x[i] = 5 + i + 0.4 * i * i - 0.02 * i * i * i;
double[] original =
{
5.000000, 6.380000, 8.440000, 11.060000,
14.120000, 17.500000, 21.080000, 24.740000,
28.360000, 31.820000, 35.000000, 37.780000,
40.040000, 41.660000, 42.520000, 42.500000,
41.480000, 39.340000, 35.960000, 31.220000,
25.000000, 17.180000, 7.640000, -3.740000,
-17.080000, -32.500000, -50.120000, -70.060000,
-92.440000, -117.380000, -145.000000, -175.420000
};
double[] wc =
{
7.752539, 12.210715, 20.072860, 29.837663,
40.055014, 49.367269, 56.416781, 59.845907,
58.297001, 50.412419, 34.834515, 10.205643,
-24.831840, -71.635579, -129.151279, -208.800687,
0.157752, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, 0.000000,
0.000000, 0.000000, 0.000000, -0.000000,
-0.000000, -0.000000, 4.114999, -19.449089
};
Assert.IsTrue(Matrix.IsEqual(x, original, 0.0001));
// Do the forward 9/7 transform
CDF97.FWT97(x);
Assert.IsTrue(Matrix.IsEqual(x, wc, 0.0001));
// Do the inverse 9/7 transform
CDF97.IWT97(x);
Assert.IsTrue(Matrix.IsEqual(x, original, 0.0001));
}