ГОСТ Р 53556.12-2014
liftBuffer[к] = -shiftRoundlNT32(liftBuffer!к J.shiftNormalize);
I
)
void liftingStep5and6{INT52
*
signal!. INTS2* liftBuffer, int N. int mono) {
соp\!NT32(signal
1.
liftBuffer. N/2):
shiftNormalize
=
DCTWsqrtl_fixpt(liftBuffer, N/2):
shiftRight!NT32{liftBuffer. N/2. shiftNormalize);
if(mono) {
for (k=0: k<N/2: k++)
1
1
liftBufferlk}
+=
multShifiINT32(-sineData_cslstep*(2*k
+
)l,
signal)IN/2
-1
■к l.(SHIFT
-
)):}
for (k=
0:
k<N/2: k++)
liftBuffer!к I
=
((liftBuffer!к)л-
1>» 1
);
/
void liftingStepl(INT22* signalO. INT32* liftBuffer. int N)
/
for(k=Q; k<N/2; k++)
liftBuffer!N/2-\-kl
=
multShiftRoundlNT32(sineData{(2*k+l)*SINE_DATA_SIZE/(2*N)J,
signalO!kj,SHIFT):
I
void liftingStep%(1N732* signal
1.
INTS2* liftBuffer. int N) {
for (k=0; k<N/2: k++)
liftBuffer!k]
=
multShiftRoundlNT22(-sineData_cs!(2*k+\)*SlNE_DATA_SlZE/(2*N)J.
1
signal\{N/2
-
-k],SHIFT);
}
Алгоритм для
SQRT(2)*DCT
-IV:
Как в прямом, так и в инверсном
Int-DCT
-IV требуется вычисление
SQRT(2)*DCT-\\.
Это вычисление выполняется детерминированным способом с фиксированной точкой:
int DCTl\sqrt2_fixpt(lN732 *data. int N) {
preShift
=
msbHeadroomlNTi2(data, N) -
1;
if(preShift
> 15
)preShift
= 15:
if(preShift
< 0)
preShift
= 0;
48