public static void IDST(double[] data)
{
double[] result = new double[data.Length];
double inverse = 2.0 / (data.Length + 1);
for (int k = 1; k < result.Length + 1; k++)
{
double sum = 0;
for (int i = 1; i < data.Length + 1; i++)
sum += data[i - 1] * Math.Sin(Math.PI * ((k * i) / (data.Length + 1.0)));
result[k - 1] = sum * inverse;
}
for (int i = 0; i < data.Length; i++)
data[i] = result[i];
}