Relations between DCTVIII and DSTVII
Contents
- Definitions
- DCTVIII matrix definition
- DCTVIII in terms of Tschebyshev polynomials
- DSTVII matrix definition
- DSTVII in terms of Tschebyshev polynomials
- Finding relations
- Check expression of DCTVIII through DSTVII
- Check expression of DSTVII through DCTVIII
- Check computation of DCTVIII transform
- Check computation of DSTVII transform
Definitions
Transform matrix is defined for operating on column-vectors y=T*x, where y, x are column-vectors, T is transform matrix
DCTVIII matrix definition
N1=8; N=N1;
k=0:N1-1; l=0:N1-1;
DCT8=cos(pi/(N+1/2)*(k+1/2)'*(l+1/2)) % display DCTV matrix
DCT8 = Columns 1 through 7 0.9957 0.9618 0.8952 0.7980 0.6737 0.5264 0.3612 0.9618 0.6737 0.1837 -0.3612 -0.7980 -0.9957 -0.8952 0.8952 0.1837 -0.6737 -0.9957 -0.5264 0.3612 0.9618 0.7980 -0.3612 -0.9957 -0.1837 0.8952 0.6737 -0.5264 0.6737 -0.7980 -0.5264 0.8952 0.3612 -0.9618 -0.1837 0.5264 -0.9957 0.3612 0.6737 -0.9618 0.1837 0.7980 0.3612 -0.8952 0.9618 -0.5264 -0.1837 0.7980 -0.9957 0.1837 -0.5264 0.7980 -0.9618 0.9957 -0.8952 0.6737 Column 8 0.1837 -0.5264 0.7980 -0.9618 0.9957 -0.8952 0.6737 -0.3612
DCTVIII in terms of Tschebyshev polynomials
The DCTVIII matrix can be expressed in terms of Tschebyshev polynomials [1]
where
are roots of polynomial
alpha=sort([roots(TschebyshevV(N))],'descend'); DCT8t=zeros(N1); for l=0:N1-1, DCT8t(:,l+1)=polyval(TschebyshevV(l),alpha)'; end Da8=diag(cos(1/2*pi/(N+1/2)*(k+1/2))); DCT8t=Da8*DCT8t % display DCTV matrix % compare DCT8 and DCT8t matrices (show that both definitions above are equivalent) max(max(abs(DCT8-DCT8t)))
DCT8t = Columns 1 through 7 0.9957 0.9618 0.8952 0.7980 0.6737 0.5264 0.3612 0.9618 0.6737 0.1837 -0.3612 -0.7980 -0.9957 -0.8952 0.8952 0.1837 -0.6737 -0.9957 -0.5264 0.3612 0.9618 0.7980 -0.3612 -0.9957 -0.1837 0.8952 0.6737 -0.5264 0.6737 -0.7980 -0.5264 0.8952 0.3612 -0.9618 -0.1837 0.5264 -0.9957 0.3612 0.6737 -0.9618 0.1837 0.7980 0.3612 -0.8952 0.9618 -0.5264 -0.1837 0.7980 -0.9957 0.1837 -0.5264 0.7980 -0.9618 0.9957 -0.8952 0.6737 Column 8 0.1837 -0.5264 0.7980 -0.9618 0.9957 -0.8952 0.6737 -0.3612 ans = 2.3428e-13
DSTVII matrix definition
N2=8; N=N2;
k=0:N2-1; l=0:N2-1;
DST7=sin(pi/(N+1/2)*(k+1/2)'*(l+1)) % display DCTV matrix
DST7 = Columns 1 through 7 0.1837 0.3612 0.5264 0.6737 0.7980 0.8952 0.9618 0.5264 0.8952 0.9957 0.7980 0.3612 -0.1837 -0.6737 0.7980 0.9618 0.3612 -0.5264 -0.9957 -0.6737 0.1837 0.9618 0.5264 -0.6737 -0.8952 0.1837 0.9957 0.3612 0.9957 -0.1837 -0.9618 0.3612 0.8952 -0.5264 -0.7980 0.8952 -0.7980 -0.1837 0.9618 -0.6737 -0.3612 0.9957 0.6737 -0.9957 0.7980 -0.1837 -0.5264 0.9618 -0.8952 0.3612 -0.6737 0.8952 -0.9957 0.9618 -0.7980 0.5264 Column 8 0.9957 -0.9618 0.8952 -0.7980 0.6737 -0.5264 0.3612 -0.1837
DSTVII in terms of Tschebyshev polynomials
The DSTVII matrix can be expressed in terms of Tschebyshev polynomials [1]
where
are roots of polynomial
beta=sort([roots(TschebyshevV(N))],'descend'); DST7t=zeros(N); for l=0:N2-1, DST7t(:,l+1)=polyval(TschebyshevU(l),beta)'; end Db7=diag(sin(pi/(N+1/2)*(k+1/2))); DST7t=Db7*DST7t % display DCTV matrix % compare DST7 and DST7t matrices (show that both definitions above are equivalent) max(max(abs(DST7-DST7t)))
DST7t = Columns 1 through 7 0.1837 0.3612 0.5264 0.6737 0.7980 0.8952 0.9618 0.5264 0.8952 0.9957 0.7980 0.3612 -0.1837 -0.6737 0.7980 0.9618 0.3612 -0.5264 -0.9957 -0.6737 0.1837 0.9618 0.5264 -0.6737 -0.8952 0.1837 0.9957 0.3612 0.9957 -0.1837 -0.9618 0.3612 0.8952 -0.5264 -0.7980 0.8952 -0.7980 -0.1837 0.9618 -0.6737 -0.3612 0.9957 0.6737 -0.9957 0.7980 -0.1837 -0.5264 0.9618 -0.8952 0.3612 -0.6737 0.8952 -0.9957 0.9618 -0.7980 0.5264 Column 8 0.9957 -0.9618 0.8952 -0.7980 0.6737 -0.5264 0.3612 -0.1837 ans = 1.4100e-13
Finding relations
Because there exist relation
and
we can express DCTVIII through DSTVII
where
B=toeplitz([1 zeros(1,N-1)]',[1 -1 zeros(1,N-length([1 -1]))]);
Check expression of DCTVIII through DSTVII
DCT8a=Da8*inv(Db7)*DST7*B
% compare DCT8 and DCT8a matrices (show correctness of representation of DCTVIII through DSTVII)
max(max(abs(DCT8-DCT8a)))
DCT8a = Columns 1 through 7 0.9957 0.9618 0.8952 0.7980 0.6737 0.5264 0.3612 0.9618 0.6737 0.1837 -0.3612 -0.7980 -0.9957 -0.8952 0.8952 0.1837 -0.6737 -0.9957 -0.5264 0.3612 0.9618 0.7980 -0.3612 -0.9957 -0.1837 0.8952 0.6737 -0.5264 0.6737 -0.7980 -0.5264 0.8952 0.3612 -0.9618 -0.1837 0.5264 -0.9957 0.3612 0.6737 -0.9618 0.1837 0.7980 0.3612 -0.8952 0.9618 -0.5264 -0.1837 0.7980 -0.9957 0.1837 -0.5264 0.7980 -0.9618 0.9957 -0.8952 0.6737 Column 8 0.1837 -0.5264 0.7980 -0.9618 0.9957 -0.8952 0.6737 -0.3612 ans = 8.8818e-16
Check expression of DSTVII through DCTVIII
DST7a=Db7*inv(Da8)*DCT8*inv(B);
DST7a=DST7a(:,:)
% compare DST7 and DST7a matrices (show correctness of representation of DSTVII through DCTVIII)
max(max(abs(DST7-DST7a)))
DST7a = Columns 1 through 7 0.1837 0.3612 0.5264 0.6737 0.7980 0.8952 0.9618 0.5264 0.8952 0.9957 0.7980 0.3612 -0.1837 -0.6737 0.7980 0.9618 0.3612 -0.5264 -0.9957 -0.6737 0.1837 0.9618 0.5264 -0.6737 -0.8952 0.1837 0.9957 0.3612 0.9957 -0.1837 -0.9618 0.3612 0.8952 -0.5264 -0.7980 0.8952 -0.7980 -0.1837 0.9618 -0.6737 -0.3612 0.9957 0.6737 -0.9957 0.7980 -0.1837 -0.5264 0.9618 -0.8952 0.3612 -0.6737 0.8952 -0.9957 0.9618 -0.7980 0.5264 Column 8 0.9957 -0.9618 0.8952 -0.7980 0.6737 -0.5264 0.3612 -0.1837 ans = 3.1086e-15
Check computation of DCTVIII transform
x=randn(N1,1); disp('x''=');disp(x'); y=DCT8*x; % true result disp('y''=');disp(y'); y1=Da8*inv(Db7)*DST7*B*x; % compute DCTVIII using DSTVII transform disp('y1''=');disp(y1');
x'= Columns 1 through 7 -1.9609 -0.1977 -1.2078 2.9080 0.8252 1.3790 -1.0582 Column 8 -0.4686 y'= Columns 1 through 7 -0.0897 -4.1294 -5.2016 1.8504 0.7753 -0.2779 -1.5372 Column 8 -4.9734 y1'= Columns 1 through 7 -0.0897 -4.1294 -5.2016 1.8504 0.7753 -0.2779 -1.5372 Column 8 -4.9734
Check computation of DSTVII transform
x=randn(N2,1); disp('x''=');disp(x'); y=DST7*x; % true result disp('y''=');disp(y'); y1=Db7*inv(Da8)*DCT8*inv(B)*x; % compute DSTVII using DCTVIII transform disp('y1''=');disp(y1'); % Reference
x'= Columns 1 through 7 -0.2725 1.0984 -0.2779 0.7015 -2.0518 -0.3538 -0.8236 Column 8 -1.5771 y'= Columns 1 through 7 -3.6435 2.5185 1.0878 0.1070 -2.0081 1.1256 -0.7206 Column 8 -3.6206 y1'= Columns 1 through 7 -3.6435 2.5185 1.0878 0.1070 -2.0081 1.1256 -0.7206 Column 8 -3.6206