sp_enc.h
上传用户:mony888
上传日期:2022-07-26
资源大小:1247k
文件大小:7k
源码类别:

Windows CE

开发平台:

Visual C++

  1. /*************************************************************************/
  2. /*                                                                       */
  3. /* Copyright (c) 2000-2004 Linuos Design                                 */
  4. /*                                     领驰设计中心  版权所有 2000-2004  */
  5. /*                                                                       */
  6. /* PROPRIETARY RIGHTS of Linuos Design  are involved in the subject      */
  7. /* matter of this material.  All manufacturing, reproduction, use, and   */
  8. /* sales rights pertaining to this subject matter are governed by the    */
  9. /* license agreement.  The recipient of this software implicitly accepts */ 
  10. /* the terms of the license.                                             */
  11. /* 本软件文档资料是领驰设计中心的资产,任何人士阅读和使用本资料必须获得   */
  12. /* 相应的书面授权,承担保密责任和接受相应的法律约束.                      */
  13. /*                                                                       */
  14. /*************************************************************************/
  15. /*
  16.  * ===================================================================
  17.  *  TS 26.104
  18.  *  REL-5 V5.4.0 2004-03
  19.  *  REL-6 V6.1.0 2004-03
  20.  *  3GPP AMR Floating-point Speech Codec
  21.  * ===================================================================
  22.  *
  23.  */
  24. /*
  25.  * sp_enc.h
  26.  *
  27.  *
  28.  * Project:
  29.  *    AMR Floating-Point Codec
  30.  *
  31.  * Contains:
  32.  *    Defines interface to AMR encoder
  33.  *
  34.  */
  35. #ifndef _SP_ENC_H
  36. #define _SP_ENC_H
  37. /*
  38.  * include files
  39.  */
  40. //#include "typedef.h"
  41. #include "rom_enc.h"
  42. #define ABSTOR( x ) ( ( INT32 )( ( (x)>0 ) ? (x) : -(x) ) )
  43. #define LABSTOR( x ) ( ( INT32 )( ( (x)>0 ) ? (x) : -(x) ) )
  44. /*
  45. * Definition of structures used in encoding process
  46. */
  47. typedef struct
  48. {
  49. float y2;
  50. float y1;
  51. float x0;
  52. float x1;
  53. }Pre_ProcessState;
  54. typedef struct
  55. {
  56. float bckr_est[NB_SUBBDS_VAD];   /* background noise estimate */
  57. float ave_level[NB_SUBBDS_VAD];
  58. /* averaged input components for stationary estimation */
  59. float old_level[NB_SUBBDS_VAD];   /* input levels of the previous frame */
  60. float sub_level[NB_SUBBDS_VAD];
  61. /* input levels calculated at the end of a frame (lookahead) */
  62. float a_data5[3][2];   /* memory for the filter bank */
  63. float a_data3[5];   /* memory for the filter bank */
  64. float best_corr_hp;   /* FIP filtered value */
  65. /* counts length of a speech burst incl HO addition */
  66. float corr_hp_fast;   /* filtered value */
  67. INT32 vadreg;   /* flags for intermediate VAD decisions */
  68. INT32 pitch;   /* flags for pitch detection */
  69. INT32 oldlag_count;
  70. INT32 oldlag;   /* variables for pitch detection */
  71. INT32 complex_high;   /* flags for complex detection */
  72. INT32 complex_low;   /* flags for complex detection */
  73. INT32 complex_warning;   /* complex background warning */
  74. INT32 tone;   /* flags for tone detection */
  75. INT16 burst_count;   /* counts length of a speech burst */
  76. INT16 hang_count;   /* hangover counter */
  77. INT16 stat_count;   /* stationary counter */
  78. INT16 complex_hang_count;   /* complex hangover counter, used by VAD */
  79. INT16 complex_hang_timer;   /* hangover initiator, used by CAD */
  80. INT16 speech_vad_decision;   /* final decision */
  81. INT16 sp_burst_count;
  82. }vadState;
  83. //#endif
  84. #define DTX_HIST_SIZE 8
  85. #define DTX_ELAPSED_FRAMES_THRESH (24 + 7 -1)
  86. #define DTX_HANG_CONST 7   /* yields eight frames of SP HANGOVER */
  87. typedef struct
  88. {
  89. float lsp_hist[LP_ORDER * DTX_HIST_SIZE];
  90. float log_en_hist[DTX_HIST_SIZE];
  91. INT32 init_lsf_vq_index;
  92. INT16 hist_ptr;
  93. INT16 log_en_index;
  94. INT16 lsp_index[3];
  95. /* DTX handler stuff */
  96. INT16 dtxHangoverCount;
  97. INT16 decAnaElapsedCount;
  98. }dtx_encState;
  99. typedef struct
  100. {
  101. /* gain history */
  102. float gp[AVG_PITGAN];
  103. /* counters */
  104. INT16 count;
  105. }tonStabState;
  106. typedef struct
  107. {
  108. INT32 past_qua_en[4];
  109. /* normal MA predictor memory, (contains 20*log10(qua_err)) */
  110. }gc_predState;
  111. typedef struct
  112. {
  113. float prev_alpha;   /* previous adaptor output, */
  114. float prev_gc;   /* previous code gain, */
  115. float ltpg_mem[LTPG_MEM_SIZE];   /* LTP coding gain history, */
  116. INT16 onset;   /* onset state, */
  117. /* (ltpg_mem[0] not used for history) */
  118. }gain_adaptState;
  119. typedef struct
  120. {
  121. float sf0_target_en;
  122. float sf0_coeff[5];
  123. INT32 sf0_gcode0_exp;
  124. INT32 sf0_gcode0_fra;
  125. INT16 *gain_idx_ptr;
  126. gc_predState gc_predSt;
  127. gc_predState gc_predUncSt;
  128. gain_adaptState adaptSt;
  129. }gainQuantState;
  130. typedef struct
  131. {
  132. INT32 T0_prev_subframe;   /* integer pitch lag of previous sub-frame */
  133. }Pitch_frState;
  134. typedef struct
  135. {
  136. Pitch_frState pitchSt;
  137. }clLtpState;
  138. typedef struct
  139. {
  140. float ada_w;
  141. INT32 old_T0_med;
  142. INT16 wght_flg;
  143. }pitchOLWghtState;
  144. typedef struct
  145. {
  146. float past_rq[LP_ORDER];   /* Past quantized prediction error */
  147. }Q_plsfState;
  148. typedef struct
  149. {
  150. /* Past LSPs */
  151. float lsp_old[LP_ORDER];
  152. float lsp_old_q[LP_ORDER];
  153. /* Quantization state */
  154. Q_plsfState qSt;
  155. }lspState;
  156. typedef struct
  157. {
  158. float old_A[LP_ORDER + 1];   /* Last A(z) for case of unstable filter */
  159. }LevinsonState;
  160. typedef struct
  161. {
  162. LevinsonState LevinsonSt;
  163. }lpcState;
  164. typedef struct
  165. {
  166. /* Speech vector */
  167. float old_speech[SPCH_BUF_SIZE];
  168. float *speech;
  169. float *p_window;
  170. float *p_window_12k2;
  171. float *new_speech;   /* Global variable */
  172. /* Weight speech vector */
  173. float old_wsp[FRAME_SIZE + PIT_MAX];
  174. float *wsp;
  175. /* OL LTP states */
  176. INT32 old_lags[5];
  177. float ol_gain_flg[2];
  178. /* Excitation vector */
  179. float old_exc[FRAME_SIZE + PIT_MAX + INTERPOL_LEN];
  180. float *exc;
  181. /* Zero vector */
  182. float ai_zero[SUBFRM_SIZE + LP_ORDER_PLUS];
  183. float *zero;
  184. /* Impulse response vector */
  185. float *h1;
  186. float hvec[SUBFRM_SIZE * 2];
  187. /* Substates */
  188. lpcState lpcSt;
  189. lspState lspSt;
  190. clLtpState clLtpSt;
  191. gainQuantState gainQuantSt;
  192. pitchOLWghtState pitchOLWghtSt;
  193. tonStabState tonStabSt;
  194. vadState vadSt;
  195. INT32 dtx;
  196. dtx_encState dtxEncSt;
  197. /* Filter's memory */
  198. float mem_syn[LP_ORDER];
  199. float mem_w0[LP_ORDER];
  200. float mem_w[LP_ORDER];
  201. float mem_err[LP_ORDER + SUBFRM_SIZE];
  202. float *error;
  203. float sharp;
  204. }cod_amrState;
  205. typedef struct
  206. {
  207. cod_amrState cod_amr_state;
  208. Pre_ProcessState pre_state;
  209. INT32 dtx;
  210. }Speech_Encode_FrameState;
  211. /*
  212.  * definition of modes for encoder
  213.  */
  214. enum Mode { MR475 = 0,
  215.             MR515,
  216.             MR59,
  217.             MR67,
  218.             MR74,
  219.             MR795,
  220.             MR102,
  221.             MR122,
  222.             MRDTX
  223. };
  224. /*
  225.  * Function prototypes
  226.  */
  227. /*
  228.  * initialize one instance of the speech encoder
  229.  * Stores pointer to filter status struct in *st. This pointer has to
  230.  * be passed to Speech_Encode_Frame in each call.
  231.  * returns 0 on success
  232.  */
  233. void *Speech_Encode_Frame_init (INT32 dtx);
  234. /*
  235.  * reset speech encoder (i.e. set state memory to zero)
  236.  * returns 0 on success
  237.  */
  238. INT32 Speech_Encode_Frame_reset(void *st, INT32 dtx);
  239. /*
  240.  * de-initialize speech encoder (i.e. mcFree status struct)
  241.  * stores NULL in *st
  242.  */
  243.  
  244. //void Speech_Encode_Frame_exit (void **st); 
  245. /*
  246.  * Encodes one speech frame
  247.  * Returns analysis parameters
  248.  */
  249. void Speech_Encode_Frame (void *st, enum Mode mode, INT16 *newSpeech,
  250.                           INT16 *prm, enum Mode *usedMode);
  251. #endif