Digital Signal Processing Reference
In-Depth Information
xrblock_DCT(j) ¼ biqtdec(nbits,-1,1,DCT_coefR(j));
end
xrblock ¼ idct(xrblock_DCT.*scalef(iscale(i)));
xx ¼ [xx xrblock];
end
% Transform coding using MDCT
xm ¼ [zeros(1,8) we zeros(1,8-mod(length(we),8)), zeros(1,8)];
Nsubblock
¼
length(x)/8;
MDCT_code
¼
[];
% Encoder
for i
1:Nsubblock
xsubblock_DCT
¼
¼
wmdct(xm((i-1)*8
þ
1:(i
þ
1)*8));
abs(scalef-max(abs(xsubblock_DCT)));
iscale(i) ¼ min(find(diff< ¼ min(diff))); % find a scale factor
xsubblock_DCT ¼ xsubblock_DCT/scalef(iscale(i)); % scale the input vector
for j ¼ 1:8
[MDCT_coeff(j) pp] ¼ biquant(nbits,-1,1,xsubblock_DCT(j));
end
MDCT_code ¼ [MDCT_code MDCT_coeff];
end
% Decoder
% Recover the first subblock
Nsubblock ¼ length(MDCT_code)/8;
xxm ¼ [];
MDCT_coeffR ¼ MDCT_code(1:8);
for j ¼ 1:8
xmrblock_DCT(j) ¼ biqtdec(nbits,-1,1,MDCT_coeffR(j));
end
xmrblock ¼ wimdct(xmrblock_DCT*scalef(iscale(1)));
xxr_pre ¼ xmrblock(9:16) % recovered first block for overlap and add
for i ¼ 2:Nsubblock
MDCT_coeffR
diff
¼
¼
MDCT_code((i-1)*8
þ
1:i*8);
for j
1:8
xmrblock_DCT(j)
¼
¼
biqtdec(nbits,-1,1,MDCT_coeffR(j));
end
xmrblock
¼
wimdct(xmrblock_DCT*scalef(iscale(i)));
xxr_cur
¼
xxr_pre
þ
xmrblock(1:8); % overlap and add
xxm
[xxm xxr_cur];
xxr_pre ¼ xmrblock(9:16);
¼
% set for the next overlap
end
subplot(3,1,1);plot(x, ' k ' );grid; axis([0 length(x) -10000 10000])
ylabel( ' Original signal ' );
subplot(3,1,2);plot(xx, ' k ' );grid;axis([0 length(xx) -10000 10000]);
ylabel( ' DCT coding ' )
subplot(3,1,3);plot(xxm, ' k ' );grid;axis([0 length(xxm) -10000 10000]);
ylabel( ' W-MDCT coding ' );
xlabel( ' Sample number ' );
Search WWH ::




Custom Search