public static void IDCT(double[] data)
{
double[] result = new double[data.Length];
double c = Math.PI / (2.0 * data.Length);
double scale = Math.Sqrt(2.0 / data.Length);
for (int k = 0; k < data.Length; k++)
{
double sum = data[0] / Constants.Sqrt2;
for (int n = 1; n < data.Length; n++)
sum += data[n] * Math.Cos((2 * k + 1) * n * c);
result[k] = scale * sum;
}
for (int i = 0; i < data.Length; i++)
data[i] = result[i];
}