?? g726.c
字號:
History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_adda(dqln, y, dql) short *dqln, *y, *dql;{ *dql = (*dqln + (*y >> 2)) & 4095;}/* ....................... end of G726_adda() ....................... *//* ---------------------------------------------------------------------- void G726_antilog (short *dql, short *dqs, short *dq); ~~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Convert quantized difference signal from the logarithmic to the linear domain. Inputs: dql, dqs Output: dq Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_antilog(dql, dqs, dq) short *dql, *dqs, *dq;{ long dqmag; long ds, dmn, dex, dqt; /* Extract 4-bit exponent */ ds = (*dql >> 11); dex = (*dql >> 7) & 15; /* Extract 7-bit mantissa */ dmn = *dql & 127; dqt = dmn + 128; /* Convert mantissa to linear using the approx. 2**x = 1+x */ dqmag = ds ? 0 : ((dqt << 7) >> (14 - dex)); /* Attach sign bit to signed mag. word */ *dq = (short) (*dqs << 15) + dqmag;}/* ..................... end of G726_antilog() ..................... *//* ---------------------------------------------------------------------- void G726_reconst (short rate, short *i, short *dqln, short *dqs); ~~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Reconstruction of quantized difference signal in the logarithmic domain. Inputs: i, rate Outputs: dqln, dqs Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_reconst(rate, i, dqln, dqs) short *i, *dqln, *dqs; short rate;{ if (rate == 4) { /* Initialized data */ static short tab[16] = {2048, 4, 135, 213, 273, 323, 373, 425, 425, 373, 323, 273, 213, 135, 4, 2048}; /* Extract sign */ *dqs = (*i >> 3); /* Table look-up */ *dqln = tab[*i]; } /* ............... end of 32 kbit part * ................. */ else if (rate == 3) { /* Initialized data */ static short tab[8] = {2048, 135, 273, 373, 373, 273, 135, 2048}; *dqs = (*i >> 2); /* Table look-up */ *dqln = tab[*i]; } /* ............... end of 24 kbit part * ................. */ else if (rate == 2) { /* Initialized data */ static short tab[4] = {116, 365, 365, 116}; *dqs = (*i >> 1); /* Table look-up */ *dqln = tab[*i]; } /* ............... end of 16 kbit part * ................. */ else { /* Initialized data */ static short tab[32] = {2048, 4030, 28, 104, 169, 224, 274, 318, 358, 395, 429, 459, 488, 514, 539, 566, 566, 539, 514, 488, 459, 429, 395, 358, 318, 274, 224, 169, 104, 28, 4030, 2048}; *dqs = (*i >> 4); /* Table look-up */ *dqln = tab[*i]; } /* ................ end of 40 kbit part * ................... */}/* ....................... end of G726_reconst() ....................... *//* ---------------------------------------------------------------------- void G726_delaya (short *r, short *x, short *y); ~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Memory block. Inputs: r, x Output: y Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_delaya(r, x, y) short *r, *x, *y;{ *y = (*r == 0) ? *x : 0;}/* ....................... end of G726_delaya() ....................... *//* ---------------------------------------------------------------------- void G726_delayb (short *r, short *x, short *y); ~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Memory block. Inputs: r, x Output: y Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_delayb(r, x, y) short *r, *x, *y;{ *y = (*r == 0) ? *x : 544;}/* ....................... end of G726_delayb() ....................... *//* ---------------------------------------------------------------------- void G726_delayc (short *r, long *x, long *y); ~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Memory block. Inputs: r, x Output: y Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_delayc(r, x, y) short *r; long *x, *y;{ *y = (*r == 0) ? *x : 34816;}/* ....................... end of G726_delayc() ....................... *//* ---------------------------------------------------------------------- void G726_delayd (short *r, short *x, short *y); ~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Memory block Inputs: r, x Output: y Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_delayd(r, x, y) short *r, *x, *y;{ *y = (*r == 0) ? *x : 32;}/* ....................... end of G726_delayd() ....................... *//* ---------------------------------------------------------------------- void G726_filtd (short *wi, short *y, short *yut); ~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Update of fast quantizer scale factor. Inputs: wi, y Output: yut Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_filtd(wi, y, yut) short *wi, *y, *yut;{ long difs, difsx; long y1; long wi1, dif; /* Compute difference */ wi1 = *wi; y1 = *y; dif = ((wi1 << 5) + 131072 - y1) & 131071; difs = (dif >> 16); /* Time constant is 1/32; sign extension */ difsx = (difs == 0) ? (dif >> 5) : ((dif >> 5) + 4096); *yut = (short) ((y1 + difsx) & 8191);}/* ....................... end of G726_filte() ....................... *//* ---------------------------------------------------------------------- void G726_filte (short *yup, long *yl, long *ylp); ~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Update of slow quantizer scale factor. Inputs: yup, yl Output: ylp Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_filte(yup, yl, ylp) short *yup; long *yl, *ylp;{ long difs, difsx; long dif, dif1, yup1; /* Compute difference */ yup1 = *yup; dif1 = 1048576 - *yl; dif = (yup1 + (dif1 >> 6)) & 16383; difs = (dif >> 13); /* Sign extension */ difsx = (difs == 0) ? dif : (dif + 507904); *ylp = (*yl + difsx) & 524287;}/* ....................... end of G726_filte() ....................... *//* ---------------------------------------------------------------------- void G726_functw (short rate, short *i, short *wi); ~~~~~~~~~~~~~~~~ Description: ~~~~~~~~~~~~ Map quantizer output into logarithmic version of scale factor multiplier. Inputs: i, rate Output: wi Return value: none. ~~~~~~~~~~~~~ Prototype: in g726.h ~~~~~~~~~~ History: ~~~~~~~~ 31.Jan.91 v1.0f Release of 1st Fortran version to UGST. <tdsindi@venus.cpqd.ansp.br> 13.Feb.92 v1.0c 1st version in C translated from Fortran (f2c) <tdsimao@venus.cpqd.ansp.br> ----------------------------------------------------------------------*/void G726_functw(rate, i, wi) short *i, *wi; short rate;{ if (rate == 4) { /* Initialized data */ static short tab[8] = {4084, 18, 41, 64, 112, 198, 355, 1122}; short im, is; is = (*i >> 3); im = (is == 0) ? (*i & 7) : ((15 - *i) & 7); /* Scale factor multiplier */ *wi = tab[im]; } /* ................. end of 32 kbit part * .............. */ else if (rate == 3) { /* Initialized data */ static short tab[4] = {4092, 30, 137, 582}; short im, is; is = (*i >> 2); im = (is == 0) ? (*i & 3) : ((7 - *i) & 3); *wi = tab[im]; } /* ................. end of 24 kbit part * .............. */ else if (rate == 2) { /* Initialized data */ static short tab[2] = {4074, 439}; short im, is; is = (*i >> 1); im = (is == 0) ? (*i & 1) : ((3 - *i) & 1); *wi = tab[im]; } /* ................. end of 16 kbit part * .............. */ else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -