📄 phi_lpc.c
字号:
else
PHI_Priv->blsp_previous[i][j]=(float)0.0;
}
}
/* -----------------------------------------------------------------*/
/* Create Array for Quantiser (narrowband) */
/* -----------------------------------------------------------------*/
if((PHI_Priv->previous_q_lsf_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->previous_q_lsf_8+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->current_q_lsf_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->current_q_lsf_8+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->next_q_lsf_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->next_q_lsf_8+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->previous_uq_lsf_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->previous_uq_lsf_8+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->current_uq_lsf_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->current_uq_lsf_8+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->next_uq_lsf_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->next_uq_lsf_8+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->previous_q_lsf_int_8=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->previous_q_lsf_int_8+i) = ((i+1)/(float)((order_8)+1)) * PAN_PI;
/* -----------------------------------------------------------------*/
/* Create Array for Quantiser (wideband) */
/* -----------------------------------------------------------------*/
if((PHI_Priv->previous_q_lsf_int_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->previous_q_lsf_int_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
if((PHI_Priv->previous_q_lsf_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->previous_q_lsf_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
if((PHI_Priv->current_q_lsf_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->current_q_lsf_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
if((PHI_Priv->next_q_lsf_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->next_q_lsf_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
if((PHI_Priv->previous_uq_lsf_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->previous_uq_lsf_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
if((PHI_Priv->current_uq_lsf_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->current_uq_lsf_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
if((PHI_Priv->next_uq_lsf_16=(float *)calloc(order, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order;i++)
*(PHI_Priv->next_uq_lsf_16+i) = ((i+1)/(float)((order)+1)) * PAN_PI;
/* -----------------------------------------------------------------*/
/* Initialise arrays */
/* -----------------------------------------------------------------*/
for(x=0; x < (int)order; x++)
{
PHI_Priv->PHI_mem_i[x] = PHI_Priv->PHI_prev_lar[x] = PHI_Priv->PHI_current_lar[x] = (float)0.0;
PHI_Priv->PHI_prev_indices[x] = (long)(21 - PHI_tbl_rfc_range[0][x]);
}
/* -----------------------------------------------------------------*/
/* Initialise variables for dynamic threshold */
/* -----------------------------------------------------------------*/
{
long bits_frame;
float per_lpc;
long k;
/* ------------------------------------------------------------*/
/* Determine length of LPC frames and no LPC frames */
/* ------------------------------------------------------------*/
PHI_Priv->PHI_MAX_BITS = 0;
for (k = 0; k < (2 + num_lpc_indices + n_subframes*(num_shape_cbks+num_gain_cbks)); k++)
{
PHI_Priv->PHI_MAX_BITS += frame_bit_allocation[k];
}
PHI_Priv->PHI_MIN_BITS = PHI_Priv->PHI_MAX_BITS;
for (k = 0; k < num_lpc_indices; k++)
{
PHI_Priv->PHI_MIN_BITS -= frame_bit_allocation[k+2];
}
PHI_Priv->PHI_FR = ((float)frame_size / (float)sampling_frequency);
/*-------------------------------------------------------------*/
/* How many bits per frame are needed to achieve fixed bit rate*/
/* equal to what user has input */
/*-------------------------------------------------------------*/
bits_frame = (long)((float)bit_rate * PHI_Priv->PHI_FR + 0.5F);
/* ------------------------------------------------------------*/
/* Store desired bit rate */
/* ------------------------------------------------------------*/
PHI_Priv->PHI_desired_bit_rate = (long) ((float) bits_frame / PHI_Priv->PHI_FR + 0.5F);
PHI_Priv->PHI_actual_bits = 0;
/*-------------------------------------------------------------*/
/* Needed %-lpc to get the desired bit rate */
/*-------------------------------------------------------------*/
per_lpc = ((float)(bits_frame-PHI_Priv->PHI_MIN_BITS))/((float)(PHI_Priv->PHI_MAX_BITS-PHI_Priv->PHI_MIN_BITS));
/*-------------------------------------------------------------*/
/* Choose initial value for distance threshold */
/*-------------------------------------------------------------*/
if (per_lpc < 0.51F)
{
PHI_Priv->PHI_dyn_lpc_thresh = 1.0F;
}
else
if (per_lpc < 0.6F)
{
PHI_Priv->PHI_dyn_lpc_thresh = 0.25F;
}
else
if (per_lpc < 0.75F)
{
PHI_Priv->PHI_dyn_lpc_thresh = 0.15F;
}
else
if (per_lpc < 0.85F)
{
PHI_Priv->PHI_dyn_lpc_thresh = 0.1F;
}
else
if (per_lpc < 0.97F)
{
PHI_Priv->PHI_dyn_lpc_thresh = 0.05F;
}
else
{
PHI_Priv->PHI_dyn_lpc_thresh = 0.0F;
}
/*-------------------------------------------------------------*/
/* Compute number of frames per second */
/*-------------------------------------------------------------*/
PHI_Priv->PHI_FRAMES = (long)((float)sampling_frequency/(float)frame_size + 0.5F);
/*-------------------------------------------------------------*/
/* Determine the stop threshold */
/*-------------------------------------------------------------*/
PHI_Priv->PHI_stop_threshold = (float)0.35;
}
}
/*======================================================================*/
/* Function Definition:PAN_InitLpcAnalysisEncoder */
/* Nov. 07 96 - Added for narrowband coder */
/*======================================================================*/
void PAN_InitLpcAnalysisEncoder
(
long win_size[], /* In: LPC Analysis-Window Size */
long n_lpc_analysis, /* In: Numberof LPC Analysis Frame */
long order, /* In: Order of LPC */
float gamma_be, /* In: Bandwidth Expansion Coefficient */
long bit_rate, /* In: Bit Rate */
PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
)
{
/* -----------------------------------------------------------------*/
/* Create Arrays for Hamming Window and gamma array */
/* -----------------------------------------------------------------*/
if
(
(( PHI_Priv->PHI_mem_i = (float *)malloc((unsigned int)order * sizeof(float))) == NULL)
)
{
printf("MALLOC FAILURE in Routine InitLpcAnalysis \n");
exit(1);
}
}
/*======================================================================*/
/* Function Definition:PHI_InitLpcAnalysisDecoder */
/*======================================================================*/
void PHI_InitLpcAnalysisDecoder
(
long order, /* In: Order of LPC */
long order_8, /* In: Order of LPC */
PHI_PRIV_TYPE *PHI_Priv /* In/Out: PHI private data (instance context) */
)
{
int x;
int i,j ;
/* -----------------------------------------------------------------*/
/* Create Arrays for lars in the decoder */
/* -----------------------------------------------------------------*/
if
(
(( PHI_Priv->PHI_mem_s = (float *)malloc((unsigned int)order * sizeof(float))) == NULL ) ||
(( PHI_Priv->PHI_dec_current_lar = (float *)malloc((unsigned int)order * sizeof(float))) == NULL )||
(( PHI_Priv->PHI_dec_prev_lar = (float *)malloc((unsigned int)order * sizeof(float))) == NULL )
)
{
printf("MALLOC FAILURE in Routine InitLpcAnalysis \n");
exit(1);
}
/* -----------------------------------------------------------------*/
/* Create Array for Quantiser BLSP */
/* -----------------------------------------------------------------*/
for ( i = 0; i < NEC_LSPPRDCT_ORDER; i++ )
{
for ( j = 0; j < (int)order; j++ )
{
if ( j >= (int)(order/2) )
PHI_Priv->blsp_dec[i][j]=(float)NEC_PAI/(float)(order+1)*(j+1);
else
PHI_Priv->blsp_dec[i][j]=(float)0.0;
}
}
/* -----------------------------------------------------------------*/
/* Create Array for Quantiser (narrowband) */
/* -----------------------------------------------------------------*/
if((PHI_Priv->previous_q_lsf_8_dec=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->previous_q_lsf_8_dec+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->current_q_lsf_8_dec=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->current_q_lsf_8_dec+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
if((PHI_Priv->next_q_lsf_8_dec=(float *)calloc(order_8, sizeof(float)))==NULL) {
printf("\n memory allocation error in initialization_encoder\n");
exit(1);
}
for(i=0;i<order_8;i++)
*(PHI_Priv->next_q_lsf_8_dec+i) = ((i+1)/(float)((order_8)+1))*PAN_PI;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -