📄 g729ev_tdbwe_extract_time_envelope.c
字号:
/* ITU-T G.729EV Optimization/Characterization Candidate *//* Version: 1.0.a *//* Revision Date: June 28, 2006 *//* ITU-T G.729EV Optimization/Characterization Candidate ANSI-C Source Code Copyright (c) 2006 France Telecom, Matsushita Electric, Mindspeed, Siemens AG, ETRI, VoiceAge Corp. All rights reserved*/#include "G729EV_TDBWE_extract_time_envelope.h"#include "G729EV_MAIN_defines.h"#include "G729EV_MAIN_DSPFUNC.h"#include "G729EV_MAIN_OPER_32B.h"/*--------------------------------------------------------------------------* * Function G729EV_TDBWE_extract_time_envelope() * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * TDBWE time envelope (segment energy) computation * *--------------------------------------------------------------------------*/void G729EV_TDBWE_extract_time_envelope(Word16 * signal, /* (i) Q.nls, original highband input signal */ Word16 nls, /* (i) normalization of input signal */ Word16 * envelope, /* (o) Q.10, time envelope parameters */ Word16 number_subframes) /* (i) number of consecutive subframes in signal[] */{ Word32 ACC0; Word16 *ptr_signal; Word16 i, k; Word16 log_int, log_frac; Word16 norm; ptr_signal = signal; /* loop over all segments */ FOR(i = 0; i < number_subframes; i++) { ACC0 = (Word32) 0;#ifdef WMOPS move32();#endif /* accumulate square sample values */ FOR(k = 0; k < G729EV_TDBWE_SUBFRAME_SIZE; k++) { ACC0 = L_mac0(ACC0, *ptr_signal, *ptr_signal); ptr_signal++; } /* compute (1/2)log2 of segment energies */ /* Normalize ACC0 before Log2 for max precision */ norm = norm_l(ACC0); ACC0 = L_shl(ACC0, norm); Log2(ACC0, &log_int, &log_frac); norm = add(norm, shl(nls, 1)); ACC0 = L_Comp(sub(log_int, norm), log_frac); /* ACC0 = envelope[i] in Q17 */ envelope[i] = extract_h(L_shl(ACC0, 9)); /* envelope[i] in Q10 */ envelope[i] = sub(envelope[i], 0x6A4); /* log2(10)/2 = 0x6A4 in Q10 */#ifdef WMOPS move16(); move16();#endif }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -