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