daniele@160: function D = dctmatrix(N,K,type) daniele@160: daniele@160: error(nargchk(1,3,nargin,'struct')); daniele@160: if ~exist('type','var') || isempty(type), type='II'; end daniele@160: if ~exist('K','var') || isempty(K), K=N; end daniele@160: daniele@160: [c r] = meshgrid(0:K-1,0:N-1); daniele@160: switch type daniele@160: case 'I' daniele@160: D = cos(pi*c.*r/(K-1)); daniele@160: D(1,:) = D(1,:)/sqrt(2); daniele@160: D(end,:) = D(end,:)/sqrt(2); daniele@160: case 'II' daniele@160: D = cos(pi*(2*c+1).*r/(2*K)); daniele@160: D(1,:) = D(1,:)/sqrt(2); daniele@160: case 'III' daniele@160: D = cos(pi*(2*r+1).*c/(2*K)); daniele@160: D(:,1) = D(:,1)/sqrt(2); daniele@160: case 'IV' daniele@160: D = cos(pi*(2*r+1+2*c+4*c.*r)/(4*K)); daniele@160: otherwise daniele@160: error('unsupported dct type'); daniele@160: end daniele@160: D = normcol(D);