/// <summary> /// Backward cosine transform. /// </summary> /// <param name="B">Array</param> /// <returns>Array</returns> public float[] Backward(float[] B) { int N = B.Length; float[,] U = CosineTransform.Matrix(N); return(Matrice.Dot(B, U.Transponate())); }
/// <summary> /// Forward cosine transform. /// </summary> /// <param name="A">Array</param> /// <returns>Array</returns> public float[] Forward(float[] A) { int N = A.Length; float[,] U = CosineTransform.Matrix(N); return(Matrice.Dot(A, U)); }
/// <summary> /// Backward cosine transform. /// </summary> /// <param name="B">Matrix</param> /// <returns>Matrix</returns> public Complex32[,] Backward(Complex32[,] B) { int N = B.GetLength(0), M = B.GetLength(1); float[,] U = CosineTransform.Matrix(N); float[,] V = CosineTransform.Matrix(M); if (direction == Direction.Both) { return(U.Transponate().Dot(B).Dot(V)); } else if (direction == Direction.Vertical) { return(U.Transponate().Dot(B)); } return(B.Dot(V)); }
/// <summary> /// Forward cosine transform. /// </summary> /// <param name="A">Matrix</param> /// <returns>Matrix</returns> public Complex32[,] Forward(Complex32[,] A) { int N = A.GetLength(0), M = A.GetLength(1); float[,] U = CosineTransform.Matrix(N); float[,] V = CosineTransform.Matrix(M); if (direction == Direction.Both) { return(U.Dot(A).Dot(V.Transponate())); } else if (direction == Direction.Vertical) { return(U.Dot(A)); } return(A.Dot(V.Transponate())); }