Calculation of DCT_IV using DCT_II (alternative)
Contents
Definitions
Result of transform is y=x*T, where y, x are row-vectors T is transform matrix
DCT_IV matrix definition
N=8; DCT4=cos(pi/N*[(0:N-1)+1/2]'*[(0:N-1)+1/2])
DCT4 = 0.9952 0.9569 0.8819 0.7730 0.6344 0.4714 0.2903 0.0980 0.9569 0.6344 0.0980 -0.4714 -0.8819 -0.9952 -0.7730 -0.2903 0.8819 0.0980 -0.7730 -0.9569 -0.2903 0.6344 0.9952 0.4714 0.7730 -0.4714 -0.9569 0.0980 0.9952 0.2903 -0.8819 -0.6344 0.6344 -0.8819 -0.2903 0.9952 -0.0980 -0.9569 0.4714 0.7730 0.4714 -0.9952 0.6344 0.2903 -0.9569 0.7730 0.0980 -0.8819 0.2903 -0.7730 0.9952 -0.8819 0.4714 0.0980 -0.6344 0.9569 0.0980 -0.2903 0.4714 -0.6344 0.7730 -0.8819 0.9569 -0.9952
DCT_II matrix definition
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
Finding relations
We will base our derivation on already existing relations between DCT_IV and DCT_III transforms
where
Applying relation between DCT_III and DCT_II matrix
we will get
B=diag(ones(1,N))+diag(ones(1,N-1),1);
D=2*diag(cos(pi/2/N*((0:N-1)+1/2)));
% K=diag((-1).^(0:N-1));
J=rot90(eye(N));
Check expression of DCT_II through DCT_IV
Check DCTIII matrix
J*inv(B')*J*DCT4*D
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*inv(B')*J*DCT4*D % compute DCTII using DCTIV transform
x = -2.1707 -0.0592 -1.0106 0.6145 0.5077 1.6924 0.5913 -0.6436 y = -1.2515 -4.9342 -2.4372 0.5813 -2.7897 -0.7562 -1.9913 -3.7866 y1 = -1.2515 -4.9342 -2.4372 0.5813 -2.7897 -0.7562 -1.9913 -3.7866
Check expression of DCT_IV through DCT_II
J*B'*J*DCT2*inv(D)
ans = 0.9952 0.9569 0.8819 0.7730 0.6344 0.4714 0.2903 0.0980 0.9569 0.6344 0.0980 -0.4714 -0.8819 -0.9952 -0.7730 -0.2903 0.8819 0.0980 -0.7730 -0.9569 -0.2903 0.6344 0.9952 0.4714 0.7730 -0.4714 -0.9569 0.0980 0.9952 0.2903 -0.8819 -0.6344 0.6344 -0.8819 -0.2903 0.9952 -0.0980 -0.9569 0.4714 0.7730 0.4714 -0.9952 0.6344 0.2903 -0.9569 0.7730 0.0980 -0.8819 0.2903 -0.7730 0.9952 -0.8819 0.4714 0.0980 -0.6344 0.9569 0.0980 -0.2903 0.4714 -0.6344 0.7730 -0.8819 0.9569 -0.9952
Check computation of DCTIV transform
y=x*DCT4 % true result y1=x*J*B'*J*DCT2*inv(D) % compute DCTIV using DCTII transform
y = -1.4047 -4.9058 -0.5156 0.2607 -2.3081 0.0208 -2.7178 -0.9556 y1 = -1.4047 -4.9058 -0.5156 0.2607 -2.3081 0.0208 -2.7178 -0.9556
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.