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

流媒体/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_XITS.H                                      */
  30. /*      PACKAGE:        WDBxx                                           */
  31. /*      COMPONENT:      Subroutines for Excitation Modules              */
  32. /*                                                                      */
  33. /*======================================================================*/
  34. #ifndef _phi_xits_h_
  35. #define _phi_xits_h_
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39. /*======================================================================*/
  40. /* Function Prototype: perceptual_weighting                             */
  41. /*======================================================================*/
  42. void 
  43. PHI_perceptual_weighting
  44. (
  45. long  nos,              /* In:     Number of samples to be processed    */
  46. float *vi,              /* In:     Array of input samps to be processe  */
  47. float *vo,              /* Out:    Perceptually Weighted Output Speech  */ 
  48. long  order,            /* In:     LPC-Order of the weighting filter    */ 
  49. float *a_gamma,         /* In:     Array of the Weighting filter coeffs */
  50. float *vp1              /* In/Out: The delay line states                */
  51. );
  52. /*
  53. ------------------------------------------------------------------------
  54.   zero input response 
  55. ------------------------------------------------------------------------
  56. */
  57. void 
  58. PHI_calc_zero_input_response
  59. (
  60. long  nos,               /* In:     Number of samples to be processed   */
  61. float *vo,               /* Out:    The zero-input response             */ 
  62. long  order,             /* In:     Order of the Weighting filter       */
  63. float *a_gamma,          /* In:     Coefficients of the weighting filter*/
  64. float *vp                /* In:     Filter states                       */
  65. );
  66. /*
  67. ----------------------------------------------------------------------------
  68.   weighted target signal
  69. ----------------------------------------------------------------------------
  70. */
  71. void 
  72. PHI_calc_weighted_target
  73. (
  74. long nos,               /* In:     Number of samples to be processed    */
  75. float *v1,              /* In:     Array of Perceptually weighted speech*/ 
  76. float *v2,              /* In:     The zero-input response              */ 
  77. float *vd               /* Out:    Real Target signal for current frame */
  78. );
  79. /*
  80. ----------------------------------------------------------------------------
  81.   impulse response
  82. ----------------------------------------------------------------------------
  83. */
  84. void 
  85. PHI_calc_impulse_response
  86. (
  87. long  nos,              /* In:     Number of samples to be processed    */
  88. float *h,               /* Out:    Impulse response of the filter       */
  89. long  order,            /* In:     Order of the filter                  */ 
  90. float *a_gamma          /* In:     Array of the filter coefficients     */
  91. );
  92. /*
  93. ------------------------------------------------------------------------
  94.   backward filtering 
  95. ------------------------------------------------------------------------
  96. */
  97. void 
  98. PHI_backward_filtering
  99. (
  100. long  nos,              /* In:     Number of samples to be processed    */
  101. float *vi,              /* In:     Array of samples to be filtered      */ 
  102. float *vo,              /* Out:    Array of filtered samples            */ 
  103. float *h                /* In:     The filter coefficients              */
  104. );
  105. /*
  106. ----------------------------------------------------------------------------
  107.   adaptive codebook search
  108. ----------------------------------------------------------------------------
  109. */
  110. void 
  111. PHI_cba_search
  112. (
  113. long   nos,             /* In:     Number of samples to be processed    */
  114. long   max_lag,         /* In:     Maximum Permitted Adapt cbk Lag      */
  115. long   min_lag,         /* In:     Minimum Permitted Adapt cbk Lag      */
  116. float  *cb,             /* In:     Segment of Adaptive Codebook         */
  117. long   *pi,             /* In:     Array of preselected-lag indices     */
  118. long   n_lags,          /* In:     Number of lag candidates to be tried */
  119. float  *h,              /* In:     Impulse response of synthesis filter */ 
  120. float  *t,              /* In:     The real target signal               */ 
  121. float  *g,              /* Out:    Adapt-cbk gain(Quantised but uncoded)*/
  122. long   *vid,            /* Out:    The final adaptive cbk lag index     */ 
  123. long   *gid             /* Out:    The gain index                       */
  124. );
  125. /*
  126. ----------------------------------------------------------------------------
  127.   computes residual signal after adaptive codebook
  128. ----------------------------------------------------------------------------
  129. */
  130.     
  131. void 
  132. PHI_calc_cba_residual
  133. (
  134. long  nos,             /* In:     Number of samples to be processed    */
  135. float *vi,             /* In:     Succesful excitation candidate       */ 
  136. float gain,            /* In:     Gain of the adaptive codebook        */ 
  137. float *h,              /* In:     Impulse response of synthesis filt   */
  138. float *t,              /* In:     The real target signal               */
  139. float *e               /* Out:    Adapt-cbk residual: Target for f-cbk */
  140. );
  141. /*
  142. ----------------------------------------------------------------------------
  143.   determines phase of the local rpe codebook vectors
  144. ----------------------------------------------------------------------------
  145. */
  146. void 
  147. PHI_calc_cbf_phase
  148. (
  149. long  pulse_spacing,    /* In:    Regular Spacing Between Pulses        */
  150. long  nos,              /* In:    Number of samples to be processed     */
  151. float *tf,              /* In:    Backward filtered target signal       */ 
  152. long  *p                /* Out:   Phase of the local RPE codebook vector*/
  153. );
  154. /*
  155. ----------------------------------------------------------------------------
  156.   computes rpe pulse amplitude (Version 2:only computes amplitude)
  157. ----------------------------------------------------------------------------
  158. */
  159. void 
  160. PHI_CompAmpArray
  161. (
  162. long  num_of_pulses,    /* In:    Number of pulses in the sequence      */
  163. long  pulse_spacing,    /* In:    Regular Spacing Between Pulses        */
  164. float *tf,              /* In:    Backward filtered target signal       */ 
  165. long  p,                /* In:    Phase of the RPE codebook             */
  166. long  *amp             /* Out:   Pulse amplitudes  +/- 1               */ 
  167. );
  168. /*
  169. ----------------------------------------------------------------------------
  170.   computes pos array {extension to Vienna code which only fixed 1 amp
  171. ----------------------------------------------------------------------------
  172. */
  173. void 
  174. PHI_CompPosArray
  175. (
  176. long  num_of_pulses,    /* In:    Number of pulses in the sequence      */
  177. long  pulse_spacing,    /* In:    Regular Spacing Between Pulses        */
  178. long  num_fxd_amps,     /* IN:    Number of fixed amplitudes            */
  179. float *tf,              /* In:    Backward filtered target signal       */ 
  180. long  p,                /* In:    Phase of the RPE codebook             */
  181. long  *pos              /* Out:   Pulse amplitudes  +/- 1               */ 
  182. );
  183. /*
  184. ----------------------------------------------------------------------------
  185.   generates local fixed codebook
  186. ----------------------------------------------------------------------------
  187. */
  188. void 
  189. PHI_generate_cbf
  190. (
  191. long  num_of_pulses,    /* In:    Number of pulses in the sequence      */
  192. long  pulse_spacing,    /* In:    Regular Spacing Between Pulses        */
  193. long  num_fcbk_vecs,    /* In:    #Vectors in the fixed code book       */
  194. long  nos,              /* In:    Number of samples to be processed     */
  195. long  **cb,             /* Out:   Generated Local Fixed Codebook        */ 
  196. long  p,                /* In:    Phase of the codebook vector          */
  197. long  *amp,             /* In:    Pulse Amplitudes                      */ 
  198. long  *pos               /* In:    Index to non-zero codevector          */
  199. );
  200. /*
  201. ----------------------------------------------------------------------------
  202.   preselection of fixed codebook indices (Reduction from 16 to 5 WDBxx)
  203. ----------------------------------------------------------------------------
  204. */
  205. void 
  206. PHI_cbf_preselection
  207. (
  208. long  pulse_spacing,    /* In:   Regular Spacing Between Pulses         */
  209. long  num_fcbk_cands,   /* In:   #Preselected candidates for fixed cbk  */
  210. long  num_fcbk_vecs,    /* In:   #Vectors in the fixed code book        */
  211. long  nos,              /* In:    Number of samples to be processed     */
  212. long  **cb,             /* In:    Local fixed codebook,(Nf-1) by (nos-1)*/  
  213. long  p,                /* In:    Phase  of the RPE codebook            */
  214. float *tf,              /* In:    Backward-filtered target signal       */ 
  215. float a,                /* In:    LPC coeffs of the preselection filter */
  216. long  *pi               /* Out:   Result: Preselected Codebook Indices  */
  217. );
  218. /*
  219. ----------------------------------------------------------------------------
  220.   fixed codebook search
  221. ----------------------------------------------------------------------------
  222. */
  223. void 
  224. PHI_cbf_search(
  225. long  num_of_pulses,    /* In:  Number of pulses in the sequence        */
  226. long  pulse_spacing,    /* In:  Regular Spacing Between Pulses          */
  227. long  num_fcbk_cands,   /* In:  #Preselected candidates for fixed cbk   */
  228. long  nos,              /* In:  Number of samples to be processed       */       
  229. long  **cb,             /* In:  Local fixed codebook                    */ 
  230. long  p,                /* In:  Phase of the fixed codebook, 0 to D-1   */     
  231. long  *pi,              /* In:  Preselected codebook indices, p[0..Pf-1]*/ 
  232. float *h,               /* In:  Synthesis filter impulse response,      */ 
  233. float *e,               /* In:  Target residual signal, e[0..nos-1]     */
  234. float *gain,            /* Out: Selected Fixed Codebook gain (Uncoded)  */ 
  235. long  *gid,             /* Out: Selected Fixed Codebook gain index      */
  236. long  *amp,             /* Out: S rpe pulse amplitudes, amp[0..Np-1]    */
  237. long  n                 /* In:  Subframe index, 0 to n_subframes-1      */
  238. );
  239. /*
  240. ----------------------------------------------------------------------------
  241.   encodes rpe pulse amplitudes and phase into one index  
  242. ----------------------------------------------------------------------------
  243. */
  244. void 
  245. PHI_code_cbf_amplitude_phase
  246. (
  247. long num_of_pulses,      /* In:     Number of pulses in the sequence     */
  248. long pulse_spacing,      /* In:     Regular Spacing Between Pulses       */
  249. long *amp,               /* In:   Array of Pulse Amplitudes, amp[0..Np-1]*/             
  250. long phase,              /* In:   The Phase of the RPE sequence          */
  251. long *index              /* Out:  Coded Index: Fixed Codebook index      */
  252. );
  253. /*
  254. ----------------------------------------------------------------------------
  255.   Decodes the RPE amplitudes and phase from the cbk-index
  256. ----------------------------------------------------------------------------
  257. */
  258. void
  259. PHI_decode_cbf_amplitude_phase
  260. (
  261. const long    num_of_pulses,  /* In:     Number of pulses in the sequence     */
  262. const long    pulse_spacing,  /* In:     Regular Spacing Between Pulses       */
  263. long  * const amp,            /* Out:  The Array of pulse amplitudes          */
  264. long  * const phase,          /* Out:  The phase of the RPE sequence          */ 
  265. const  long    index           /* In:   Coded Fixed codebook index             */
  266. );
  267. /*
  268. ----------------------------------------------------------------------------
  269.   Decodes the Adaptive-Codebook Gain
  270. ----------------------------------------------------------------------------
  271. */
  272. void
  273. PHI_DecodeAcbkGain
  274. (
  275. long  acbk_gain_index,
  276. float *gain
  277. );
  278. /*
  279. ----------------------------------------------------------------------------
  280.   Decodes the Fixed-Codebook Gain
  281. ----------------------------------------------------------------------------
  282. */
  283. void
  284. PHI_DecodeFcbkGain
  285. (
  286. long  fcbk_gain_index,
  287. long  ctr,
  288. float prev_gain, 
  289. float *gain
  290. );
  291. /*
  292. ----------------------------------------------------------------------------
  293.   computes excitation of the adaptive codebook
  294. ----------------------------------------------------------------------------
  295. */
  296. void 
  297. PHI_calc_cba_excitation
  298. (
  299. long   nos,             /* In:     Number of samples to be updated      */
  300. long   max_lag,         /* In:     Maximum Permitted Adapt cbk Lag      */
  301. long   min_lag,         /* In:     Minimum Permitted Adapt cbk Lag      */
  302. float  *cb,             /* In:     The current Adaptive codebook content*/ 
  303. long   idx,             /* In:     The chosen lag candidate             */
  304. float  *v               /* Out:    The Adaptive Codebook contribution   */
  305. );
  306. /*
  307. ----------------------------------------------------------------------------
  308.   computes excitation of the fixed codebook
  309. ----------------------------------------------------------------------------
  310. */
  311. void 
  312. PHI_calc_cbf_excitation
  313. (
  314. long   nos,             /* In:     Number of samples to be updated      */
  315. long   num_of_pulses,   /* In:     Number of pulses in the sequence     */
  316. long   pulse_spacing,   /* In:     Regular Spacing Between Pulses       */
  317. long   *amp,            /* In:     Aray of RPE pulse amplitudes         */
  318. long   p,               /* In:     Phase of the RPE sequence            */
  319. float  *v               /* Out:    The fixed codebook contribution      */
  320. );
  321. /*
  322. ----------------------------------------------------------------------------
  323.   compute the sum of the excitations
  324. ----------------------------------------------------------------------------
  325. */
  326. void 
  327. PHI_sum_excitations 
  328. long  nos,             /* In:     Number of samples to be updated      */
  329. float again,           /* In:     Adaptive Codebook gain               */ 
  330. float *asig,           /* In:     Adaptive Codebook Contribution       */ 
  331. float fgain,           /* In:     Fixed Codebook gain                  */  
  332. float *fsig,           /* In:     Fixed Codebook Contribution          */ 
  333. float *sum_sig         /* Out:    The Excitation sequence              */
  334. );
  335. /*
  336. ----------------------------------------------------------------------------
  337.   update adaptive codebook with the total excitation computed
  338. ----------------------------------------------------------------------------
  339. */
  340. void 
  341. PHI_update_cba_memory
  342. (
  343. long   nos,             /* In:     Number of samples to be updated      */
  344. long   max_lag,         /* In:     Maximum Adaptive Codebook Lag        */
  345. float *cb,              /* In/Out: Adaptive Codebook                    */ 
  346. float *vi               /* In:     Sum of adaptive and fixed excitaion  */         
  347. );
  348. /*
  349. ---------------------------------------------------------------------------
  350.   update synthesis filter states
  351. ----------------------------------------------------------------------------
  352. */
  353. void 
  354. PHI_update_filter_states
  355. (
  356. long   nos,             /* In:     Number of samples                    */
  357. long   order,           /* In:     Order of the LPC                     */ 
  358. float *vi,              /* In:     Total Codebook contribution          */
  359. float *vp,              /* In/Out: Filter States, vp[0..order-1]        */ 
  360. float *a                /* In:     Lpc Coefficients, a[0..order-1]      */
  361. );
  362. #ifdef __cplusplus
  363. }
  364. #endif
  365. #endif  /* #ifndef _phi_xits_h_ */
  366. /*======================================================================*/
  367. /*      H I S T O R Y                                                   */
  368. /*======================================================================*/
  369. /* 17-04-96 R. Taori  Initial Version                                   */
  370. /* 13-08-96 R. Taori  Added 2 subroutines CompAmpArray CompPosArray     */
  371. /*                    Modified generate_cbf to reflect the above        */