Relations between DST_I and DST_II
Contents
Definitions
Result of transform is y=x*T, where y, x are row-vectors T is transform matrix
DST_I matrix definition
N=8; DST1=sin(pi/N*((0:N-2)+1)'*((0:N-2)+1))
DST1 = 0.3827 0.7071 0.9239 1.0000 0.9239 0.7071 0.3827 0.7071 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 0.9239 0.7071 -0.3827 -1.0000 -0.3827 0.7071 0.9239 1.0000 0.0000 -1.0000 -0.0000 1.0000 0.0000 -1.0000 0.9239 -0.7071 -0.3827 1.0000 -0.3827 -0.7071 0.9239 0.7071 -1.0000 0.7071 0.0000 -0.7071 1.0000 -0.7071 0.3827 -0.7071 0.9239 -1.0000 0.9239 -0.7071 0.3827
DST_II matrix definition
DST2=sin(pi/N*((0:N-1)+1)'*((0:N-1)+1/2))
DST2 = 0.1951 0.5556 0.8315 0.9808 0.9808 0.8315 0.5556 0.1951 0.3827 0.9239 0.9239 0.3827 -0.3827 -0.9239 -0.9239 -0.3827 0.5556 0.9808 0.1951 -0.8315 -0.8315 0.1951 0.9808 0.5556 0.7071 0.7071 -0.7071 -0.7071 0.7071 0.7071 -0.7071 -0.7071 0.8315 0.1951 -0.9808 0.5556 0.5556 -0.9808 0.1951 0.8315 0.9239 -0.3827 -0.3827 0.9239 -0.9239 0.3827 0.3827 -0.9239 0.9808 -0.8315 0.5556 -0.1951 -0.1951 0.5556 -0.8315 0.9808 1.0000 -1.0000 1.0000 -1.0000 1.0000 -1.0000 1.0000 -1.0000
Finding relations
From [1] we know that DSTI matrix can be expressed in terms of Tschebyshev polynomials
where
are roots of polynomial
DSTII matrix can be analogously expressed as
where
are roots of polynomial
Because there exist relation
and
we can express DSTII through DSTI
where
B=diag(ones(1,N))+diag(ones(1,N-1),1); B(end,:)=(-1).^(0:N-1); D1=diag([sin(pi/N*((0:N-2)+1)), 1]); D2=diag(sin(pi/2/N*((0:N-1)+1)));
Check expression of DST_I through DST_II
inv(D2)*D1*DST2*inv(B)
ans = 0.3827 0.7071 0.9239 1.0000 0.9239 0.7071 0.3827 -0.0000 0.7071 1.0000 0.7071 0.0000 -0.7071 -1.0000 -0.7071 0.0000 0.9239 0.7071 -0.3827 -1.0000 -0.3827 0.7071 0.9239 -0.0000 1.0000 0.0000 -1.0000 -0.0000 1.0000 0.0000 -1.0000 -0.0000 0.9239 -0.7071 -0.3827 1.0000 -0.3827 -0.7071 0.9239 -0.0000 0.7071 -1.0000 0.7071 0.0000 -0.7071 1.0000 -0.7071 0.0000 0.3827 -0.7071 0.9239 -1.0000 0.9239 -0.7071 0.3827 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 1.0000
Check computation of DSTI transform
x=randn(1,N-1) y=x*DST1 % true result y1=[x 0]*inv(D2)*D1*DST2*inv(B) % compute DSTI using DSTII transform
x = 0.2120 0.2379 -1.0078 -0.7420 1.0823 -0.1315 0.3899 y = -0.3676 -1.2343 1.3448 1.9122 -0.2897 -1.9730 0.9660 y1 = -0.3676 -1.2343 1.3448 1.9122 -0.2897 -1.9730 0.9660 -0.0000
Check expression of DST_II through DST_I
DST1a=eye(N);DST1a(1:end-1,1:end-1)=DST1; D2*inv(D1)*DST1a*B
ans = 0.1951 0.5556 0.8315 0.9808 0.9808 0.8315 0.5556 0.1951 0.3827 0.9239 0.9239 0.3827 -0.3827 -0.9239 -0.9239 -0.3827 0.5556 0.9808 0.1951 -0.8315 -0.8315 0.1951 0.9808 0.5556 0.7071 0.7071 -0.7071 -0.7071 0.7071 0.7071 -0.7071 -0.7071 0.8315 0.1951 -0.9808 0.5556 0.5556 -0.9808 0.1951 0.8315 0.9239 -0.3827 -0.3827 0.9239 -0.9239 0.3827 0.3827 -0.9239 0.9808 -0.8315 0.5556 -0.1951 -0.1951 0.5556 -0.8315 0.9808 1.0000 -1.0000 1.0000 -1.0000 1.0000 -1.0000 1.0000 -1.0000
Check computation of DSTII transform
x=randn(1,N) y=x*DST2 % true result y1=x*D2*inv(D1)*DST1a*B % compute DSTII using DSTI transform
x = 0.0880 -0.6355 -0.5596 0.4437 -0.9499 0.7812 0.5690 -0.8217 y = -0.5550 -0.9089 -0.8097 0.8994 -1.0737 3.2332 -1.4077 -0.4960 y1 = -0.5550 -0.9089 -0.8097 0.8994 -1.0737 3.2332 -1.4077 -0.4960
Reference
[1] Markus Pueschel, Jose M.F. Moura. The Algebraic Approach to the Discrete Cosine and Sine Transforms and their Fast Algorithms SIAM Journal of Computing 2003, Vol. 32, No. 5, pp. 1280-1316.