Calculation of DCT_II using DST_II
Contents
Definitions
Result of transform is y=x*T, where y, x are row-vectors T is transform matrix
DCT_II matrix definition
N=8; DCT2=cos(pi/N*(0:N-1)'*((0:N-1)+1/2))
DCT2 = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.9808 0.8315 0.5556 0.1951 -0.1951 -0.5556 -0.8315 -0.9808 0.9239 0.3827 -0.3827 -0.9239 -0.9239 -0.3827 0.3827 0.9239 0.8315 -0.1951 -0.9808 -0.5556 0.5556 0.9808 0.1951 -0.8315 0.7071 -0.7071 -0.7071 0.7071 0.7071 -0.7071 -0.7071 0.7071 0.5556 -0.9808 0.1951 0.8315 -0.8315 -0.1951 0.9808 -0.5556 0.3827 -0.9239 0.9239 -0.3827 -0.3827 0.9239 -0.9239 0.3827 0.1951 -0.5556 0.8315 -0.9808 0.9808 -0.8315 0.5556 -0.1951
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
We will use transposition relations
and
for substituting DST_III and DCT_III trnasform matrices in dual transform relation
where
Applying relation between DCT_III and DCT_II matrix
After substitution we will get
K=diag((-1).^(0:N-1)); J=rot90(eye(N));
Check expression of DCT_II through DST_II
Check DCTII matrix
J*DST2*K
ans = 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 0.9808 0.8315 0.5556 0.1951 -0.1951 -0.5556 -0.8315 -0.9808 0.9239 0.3827 -0.3827 -0.9239 -0.9239 -0.3827 0.3827 0.9239 0.8315 -0.1951 -0.9808 -0.5556 0.5556 0.9808 0.1951 -0.8315 0.7071 -0.7071 -0.7071 0.7071 0.7071 -0.7071 -0.7071 0.7071 0.5556 -0.9808 0.1951 0.8315 -0.8315 -0.1951 0.9808 -0.5556 0.3827 -0.9239 0.9239 -0.3827 -0.3827 0.9239 -0.9239 0.3827 0.1951 -0.5556 0.8315 -0.9808 0.9808 -0.8315 0.5556 -0.1951
Check computation of DCTII transform
x=randn(1,N) y=x*DCT2 % true result y1=x*J*DST2*K % compute DCTII using DSTII transform
x = 1.0668 0.0593 -0.0956 -0.8323 0.2944 -1.3362 0.7143 1.6236 y = 0.4004 0.7822 3.4937 -1.1394 3.3193 -0.3834 -0.4581 2.5195 y1 = 0.4004 0.7822 3.4937 -1.1394 3.3193 -0.3834 -0.4581 2.5195
Check expression of DST_II through DCT_II
J*DCT2*K
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
y=x*DST2 % true result y1=x*J*DCT2*K % compute DSTII using DCTII transform
y = 0.9236 -1.6837 3.7547 -1.0968 3.3968 -1.8018 1.6084 1.2772 y1 = 0.9236 -1.6837 3.7547 -1.0968 3.3968 -1.8018 1.6084 1.2772
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.