⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ton_stab.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 C
字号:
/********************************************************************************      GSM AMR-NB speech codec   R98   Version 7.6.0   December 12, 2001*                                R99   Version 3.3.0                *                                REL-4 Version 4.1.0                ********************************************************************************      File             : ton_stab.c*******************************************************************************//*******************************************************************************                         MODULE INCLUDE FILE AND VERSION ID******************************************************************************/#include "ton_stab.h"const char ton_stab_id[] = "@(#)$Id $" ton_stab_h; /*******************************************************************************                         INCLUDE FILES******************************************************************************/#include <stdlib.h>#include <stdio.h>#include "typedef.h"#include "basic_op.h"#include "count.h"#include "oper_32b.h"#include "cnst.h"#include "set_zero.h"#include "copy.h"/*******************************************************************************                         LOCAL VARIABLES AND TABLES******************************************************************************//*******************************************************************************                         PUBLIC PROGRAM CODE******************************************************************************//************************************************************************* * *  Function:   ton_stab_init *  Purpose:    Allocates state memory and initializes state memory * ************************************************************************** */int ton_stab_init (tonStabState **state){    tonStabState* s;        if (state == (tonStabState **) NULL){        fprintf(stderr, "ton_stab_init: invalid parameter\n");        return -1;    }    *state = NULL;        /* allocate memory */    if ((s= (tonStabState *) malloc(sizeof(tonStabState))) == NULL){        fprintf(stderr, "ton_stab_init: can not malloc state structure\n");        return -1;    }        ton_stab_reset(s);        *state = s;        return 0;}/************************************************************************* * *  Function:   ton_stab_reset *  Purpose:    Initializes state memory to zero * ************************************************************************** */int ton_stab_reset (tonStabState *st){    if (st == (tonStabState *) NULL){        fprintf(stderr, "ton_stab_init: invalid parameter\n");        return -1;    }    /* initialize tone stabilizer state */     st->count = 0;    Set_zero(st->gp, N_FRAME);    /* Init Gp_Clipping */        return 0;}/************************************************************************* * *  Function:   ton_stab_exit *  Purpose:    The memory used for state memory is freed * ************************************************************************** */void ton_stab_exit (tonStabState **state){    if (state == NULL || *state == NULL)        return;    /* deallocate memory */    free(*state);    *state = NULL;        return;}/*************************************************************************** *                                                                          * *  Function:  check_lsp()                                                  * *  Purpose:   Check the LSP's to detect resonances                         * *                                                                          * **************************************************************************** */Word16 check_lsp(tonStabState *st, /* i/o : State struct            */                 Word16 *lsp       /* i   : unquantized LSP's       */){   Word16 i, dist, dist_min1, dist_min2, dist_th;    /* Check for a resonance:                             */   /* Find minimum distance between lsp[i] and lsp[i+1]  */    dist_min1 = MAX_16;                       move16 ();   for (i = 3; i < M-2; i++)   {      dist = sub(lsp[i], lsp[i+1]);      test ();      if (sub(dist, dist_min1) < 0)      {         dist_min1 = dist;                   move16 ();      }   }   dist_min2 = MAX_16;                       move16 ();   for (i = 1; i < 3; i++)   {      dist = sub(lsp[i], lsp[i+1]);      test ();      if (sub(dist, dist_min2) < 0)      {         dist_min2 = dist;                   move16 ();      }   }   if (test (), sub(lsp[1], 32000) > 0)   {      dist_th = 600;                         move16 ();   }   else if (test (), sub(lsp[1], 30500) > 0)   {      dist_th = 800;                         move16 ();   }   else   {      dist_th = 1100;                        move16 ();   }   test (); test ();   if (sub(dist_min1, 1500) < 0 ||       sub(dist_min2, dist_th) < 0)   {      st->count = add(st->count, 1);   }   else   {      st->count = 0;                         move16 ();   }      /* Need 12 consecutive frames to set the flag */   test ();   if (sub(st->count, 12) >= 0)   {      st->count = 12;                        move16 ();      return 1;   }   else   {      return 0;   }}/*************************************************************************** * *  Function:   Check_Gp_Clipping()                                           *  Purpose:    Verify that the sum of the last (N_FRAME+1) pitch   *              gains is under a certain threshold.               *                                                                          *************************************************************************** */ Word16 check_gp_clipping(tonStabState *st, /* i/o : State struct            */                         Word16 g_pitch    /* i   : pitch gain              */){   Word16 i, sum;      sum = shr(g_pitch, 3);          /* Division by 8 */   for (i = 0; i < N_FRAME; i++)   {      sum = add(sum, st->gp[i]);   }   test ();   if (sub(sum, GP_CLIP) > 0)   {      return 1;   }   else   {      return 0;   }}/*************************************************************************** * *  Function:  Update_Gp_Clipping()                                           *  Purpose:   Update past pitch gain memory *                                                                          *************************************************************************** */void update_gp_clipping(tonStabState *st, /* i/o : State struct            */                        Word16 g_pitch    /* i   : pitch gain              */){   Copy(&st->gp[1], &st->gp[0], N_FRAME-1);   st->gp[N_FRAME-1] = shr(g_pitch, 3);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -