phi_lpc.h
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:14k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*====================================================================*/
  2. /*         MPEG-4 Audio (ISO/IEC 14496-3) Copyright Header            */
  3. /*====================================================================*/
  4. /*
  5. This software module was originally developed by Rakesh Taori and Andy
  6. Gerrits (Philips Research Laboratories, Eindhoven, The Netherlands) in
  7. the course of development of the MPEG-4 Audio (ISO/IEC 14496-3). This
  8. software module is an implementation of a part of one or more MPEG-4
  9. Audio (ISO/IEC 14496-3) tools as specified by the MPEG-4 Audio
  10. (ISO/IEC 14496-3). ISO/IEC gives users of the MPEG-4 Audio (ISO/IEC
  11. 14496-3) free license to this software module or modifications thereof
  12. for use in hardware or software products claiming conformance to the
  13. MPEG-4 Audio (ISO/IEC 14496-3). Those intending to use this software
  14. module in hardware or software products are advised that its use may
  15. infringe existing patents. The original developer of this software
  16. module and his/her company, the subsequent editors and their
  17. companies, and ISO/IEC have no liability for use of this software
  18. module or modifications thereof in an implementation. Copyright is not
  19. released for non MPEG-4 Audio (ISO/IEC 14496-3) conforming products.
  20. CN1 retains full right to use the code for his/her own purpose, assign
  21. or donate the code to a third party and to inhibit third parties from
  22. using the code for non MPEG-4 Audio (ISO/IEC 14496-3) conforming
  23. products.  This copyright notice must be included in all copies or
  24. derivative works. Copyright 1996.
  25. */
  26. /*====================================================================*/
  27. /*======================================================================*/
  28. /*                                                                      */
  29. /*      INCLUDE_FILE:   PHI_LPC.H                                       */
  30. /*      PACKAGE:        WDBxx                                           */
  31. /*      COMPONENT:      Prototypes of Linear Prediction Subroutines     */
  32. /*                                                                      */
  33. /*======================================================================*/
  34. #ifndef _phi_lpc_h_
  35. #define _phi_lpc_h_
  36. #include "phi_priv.h" /* PRIV */
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40. /*======================================================================*/
  41. /*   Function Prototype: celp_lpc_analysis                              */
  42. /*======================================================================*/
  43. void celp_lpc_analysis
  44. (
  45. float PP_InputSignal[],         /* In:  Input Signal                    */
  46. float lpc_coefficients[],       /* Out: LPC Coefficients[0..lpc_order-1]*/
  47. float *first_order_lpc_par,     /* Out: a_parameter for 1st-order fit   */
  48. long  frame_size,               /* In:  Number of samples in frame      */
  49. long  window_offsets[],         /* In:  offset for window w.r.t curr. fr*/
  50. long  window_sizes[],           /* In:  LPC Analysis-Window Size        */
  51. float *windows[],               /* In:  Array of LPC Analysis windows   */
  52. float gamma_be[],               /* In:  Bandwidth expansion coefficients*/
  53. long  lpc_order,                /* In:  Order of LPC                    */
  54. long  n_lpc_analysis            /* In:  Number of LP analysis/frame     */
  55. ); 
  56. /*======================================================================*/
  57. /*   Function Prototype: VQ_celp_lpc_decode                             */
  58. /*======================================================================*/
  59. void VQ_celp_lpc_decode
  60. (
  61. unsigned long  lpc_indices[],  /* In: Received Packed LPC Codes         */
  62. float int_Qlpc_coefficients[], /* Out: Qaunt/interpolated a-pars        */
  63. long  lpc_order,               /* In:  Order of LPC                     */
  64. long  num_lpc_indices,         /* In:  Number of packes LPC codes       */
  65. long  n_subframes,             /* In:  Number of subframes              */
  66. unsigned long interpolation_flag, /* In:  Was interpolation done?          */
  67. long  Wideband_VQ,             /* In:  Wideband VQ switch               */
  68. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  69. );
  70. /*======================================================================*/
  71. /*   Function Prototype: VQ_celp_lpc_quantizer                          */
  72. /*======================================================================*/
  73. void VQ_celp_lpc_quantizer
  74. (
  75. float lpc_coefficients[],      /* In:  Current unquantised a-pars       */
  76. float lpc_coefficients_8[],    /* In:  Current unquantised a-pars(8 kHz)*/
  77. float int_Qlpc_coefficients[], /* Out: Qaunt/interpolated a-pars        */
  78. long  lpc_indices[],           /* Out: Codes thar are transmitted       */
  79. long  lpc_order,               /* In:  Order of LPC                     */
  80. long  num_lpc_indices,         /* In:  Number of packes LPC codes       */
  81. long  n_lpc_analysis,          /* In:  Number of LPC/frame              */
  82. long  n_subframes,             /* In:  Number of subframes              */
  83. long  *interpolation_flag,     /* Out: Interpolation Flag               */
  84. long  *send_lpc_flag,          /* Out: Send LPC flag                    */
  85. long  Wideband_VQ,
  86. PHI_PRIV_TYPE *PHI_Priv        /* In/Out: PHI private data (instance context) */
  87. );
  88. /*======================================================================*/
  89. /*   Function Prototype: celp_lpc_analysis_filter                       */
  90. /*======================================================================*/
  91. void celp_lpc_analysis_filter
  92. (
  93. float PP_InputSignal[],         /* In:  Input Signal [0..sbfrm_size-1]  */
  94. float lpc_residual[],           /* Out: LPC residual [0..sbfrm_size-1]  */
  95. float int_Qlpc_coefficients[],  /* In:  LPC Coefficients[0..lpc_order-1]*/
  96. long  lpc_order,                /* In:  Order of LPC                    */
  97. long  sbfrm_size,               /* In:  Number of samples in subframe   */
  98. PHI_PRIV_TYPE *PHI_Priv         /* In/Out: PHI private data (instance context) */
  99. );
  100. /*======================================================================*/
  101. /*   Function Prototype: celp_lpc_synthesis_filter                      */
  102. /*======================================================================*/
  103. void celp_lpc_synthesis_filter
  104. (
  105. float excitation[],             /* In:  Input Signal [0..sbfrm_size-1]  */
  106. float synth_signal[],           /* Out: LPC residual [0..sbfrm_size-1]  */
  107. float int_Qlpc_coefficients[],  /* In:  LPC Coefficients[0..lpc_order-1]*/
  108. long  lpc_order,                /* In:  Order of LPC                    */
  109. long  sbfrm_size,               /* In:  Number of samples in subframe   */
  110. PHI_PRIV_TYPE *PHI_Priv         /* In/Out: PHI private data (instance context) */
  111. );
  112. /*======================================================================*/
  113. /*   Function Prototype: celp_weighting_module                          */
  114. /*======================================================================*/
  115. void celp_weighting_module
  116. (
  117. float lpc_coefficients[],       /* In:  LPC Coefficients[0..lpc_order-1]*/
  118. long  lpc_order,                /* In:  Order of LPC                    */
  119. float Wnum_coeff[],             /* Out: num. coeffs[0..Wnum_order-1]    */
  120. float Wden_coeff[],             /* Out: den. coeffs[0..Wden_order-1]    */
  121. float gamma_num,                /* In:  Weighting factor: numerator     */
  122. float gamma_den                 /* In:  Weighting factor: denominator   */
  123. );
  124.    
  125. /*======================================================================*/
  126. /*   Function Prototype: PHI_InitLpcAnalysisEncoder                     */
  127. /*======================================================================*/
  128. void PHI_InitLpcAnalysisEncoder
  129. (
  130. long  win_size[],               /* In:  LPC Analysis-Window Size        */
  131. long  n_lpc_analysis,           /* In:  Numberof LPC Analysis Frame     */
  132. long  order,                    /* In:  Order of LPC                    */
  133. long  order_8,                  /* In:  Order of LPC                    */
  134. float gamma_be,                 /* In:  Bandwidth Expansion Coefficient */
  135. long  bit_rate,                 /* In:  Bit Rate                        */
  136. long  sampling_frequency,       /* In:  Sampling Frequency              */
  137. long  SampleRateMode,           /* In:  SampleRateMode                  */
  138. long  frame_size,               /* In:  Frame Size                      */
  139. long  num_lpc_indices,          /* In:  Number of LPC indices           */  
  140. long  n_subframes,              /* In:  Number of subframes             */
  141. long  num_shape_cbks,           /* In:  Number of Shape Codebooks       */
  142. long  num_gain_cbks,            /* In:  Number of Gain Codebooks        */
  143. long  frame_bit_allocation[],   /* In:  Frame bit allocation            */
  144. long  num_indices,
  145. long  QuantizationMode,
  146. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  147. );
  148. /*======================================================================*/
  149. /*   Function Prototype: PAN_InitLpcAnalysisEncoder                     */
  150. /*======================================================================*/
  151. void PAN_InitLpcAnalysisEncoder
  152. (
  153. long  win_size[],               /* In:  LPC Analysis-Window Size        */
  154. long  n_lpc_analysis,           /* In:  Number of LP analysis/frame     */
  155. long  order,                    /* In:  Order of LPC                    */
  156. float gamma_be,                 /* In:  Bandwidth Expansion Coefficient */
  157. long  bit_rate ,                /* In:  Bit Rate                        */
  158. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  159. );
  160. /*======================================================================*/
  161. /*   Function Prototype: PHI_InitLpcAnalysisDecoder                     */
  162. /*======================================================================*/
  163. void PHI_InitLpcAnalysisDecoder
  164. (
  165. long  order,                    /* In:  Order of LPC                    */
  166. long  order_8,                  /* In:  Order of LPC                    */
  167. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  168. );
  169. /*======================================================================*/
  170. /* Function Prototype: PHI_FreeLpcAnalysisEncoder                       */
  171. /*======================================================================*/
  172. void PHI_FreeLpcAnalysisEncoder
  173. (
  174. long n_lpc_analysis,             /* In: Number of LP analysis/frame */
  175. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  176. );
  177. /*======================================================================*/
  178. /* Function Prototype: PAN_FreeLpcAnalysisEncoder                       */
  179. /*======================================================================*/
  180. void PAN_FreeLpcAnalysisEncoder
  181. (
  182. long n_lpc_analysis,             /* In: Number of LP analysis/frame */
  183. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  184. );
  185. /*======================================================================*/
  186. /* Function Prototype: PHI_FreeLpcAnalysisDecoder                       */
  187. /*======================================================================*/
  188. void PHI_FreeLpcAnalysisDecoder
  189. (
  190. PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
  191. );
  192. /*======================================================================*/
  193. /* Function Prototype: PHI_Adjust_bit_rate                              */
  194. /*======================================================================*/
  195. long PHI_Adjust_bit_rate(
  196.   const long offset);
  197. /*======================================================================*/
  198. /*   Function Prototype: PHI_Interpolation                              */
  199. /*======================================================================*/
  200. void PHI_Interpolation
  201. (
  202.     const long flag,                  /* In: Interpoaltion     flag  */
  203.     PHI_PRIV_TYPE *PHI_Priv       /* In/Out: PHI private data (instance context) */
  204. );
  205. /*======================================================================*/
  206. /*   Function Prototype: celp_lpc_analysis_lag                          */
  207. /*======================================================================*/
  208. void celp_lpc_analysis_lag
  209. (
  210. float PP_InputSignal[],         /* In:  Input Signal                    */
  211. float lpc_coefficients[],       /* Out: LPC Coefficients[0..lpc_order-1]*/
  212. float *first_order_lpc_par,     /* Out: a_parameter for 1st-order fit   */
  213. long  frame_size,               /* In:  Number of samples in frame      */
  214. long  window_offsets[],         /* In:  offset for window w.r.t curr. fr*/
  215. long  window_sizes[],           /* In:  LPC Analysis-Window Size        */
  216. float *windows[],               /* In:  Array of LPC Analysis windows   */
  217. float gamma_be[],               /* In:  Bandwidth expansion coefficients*/
  218. long  lpc_order,                /* In:  Order of LPC                    */
  219. long  n_lpc_analysis            /* In:  Number of LP analysis/frame     */
  220. );
  221. /*======================================================================*/
  222. /*   Function Prototype: PHI_lpc_analysis_lag                           */
  223. /*======================================================================*/
  224. void PHI_lpc_analysis_lag
  225. (
  226. float PP_InputSignal[],         /* In:  Input Signal                    */
  227. float lpc_coefficients[],       /* Out: LPC Coefficients[0..lpc_order-1]*/
  228. float *first_order_lpc_par,     /* Out: a_parameter for 1st-order fit   */
  229. long  frame_size,               /* In:  Number of samples in frame      */
  230. float HamWin[],                 /* In:  Hamming Window                  */
  231. long  window_offset,            /* In:  offset for window w.r.t curr. fr*/
  232. long  window_size,              /* In:  LPC Analysis-Window Size        */
  233. float gamma_be[],               /* In:  Bandwidth expansion coeffs.     */
  234. long  lpc_order                 /* In:  Order of LPC                    */
  235. );
  236. #ifdef __cplusplus
  237. }
  238. #endif
  239. #endif  /* #ifndef _phi_lpc_h_ */
  240. /*======================================================================*/
  241. /*      H I S T O R Y                                                   */
  242. /*======================================================================*/
  243. /* 17-04-96 R. Taori  Initial Version                                   */
  244. /* 30-07-96 R. Taori  Modified interface  to meet the MPEG-4 requirement*/
  245. /* 30-08-96 R. Taori  Prefixed "PHI_" to several subroutines(MPEG req.) */
  246. /* 07-11-96 N. Tanaka (Panasonic)                                       */
  247. /*                    Added several modules for narrowband coder (PAN_) */