예제 #1
0
파일: g729codec.c 프로젝트: FreeMCU/freemcu
static void *create_decoder(const struct PluginCodec_Definition *codec)
{
	DecState *decoder;	

	decoder = Init_Decod_ld8a();
	Init_Post_Filter(decoder);
	Init_Post_Process(decoder);
	
	return (void *)decoder;
}
예제 #2
0
파일: entry.c 프로젝트: xyhGit/MTNN
void G729aDecoder_Init()
{
	extern Word16 *synth;
	  
    bad_lsf = 0;          /* Initialize bad LSF indicator */
    
    Init_Decod_ld8a();
    Init_Post_Filter();
    Init_Post_Process();
}
예제 #3
0
void InitG729D_decoder()
{

    Word16 i;
    CODEC_MODE = 1; //@6.4kps mode
    for ( i = 0; i < M; ++i)
        synth_buf[i] = 0;
    synth = synth_buf + M;

    Init_Decod_ld8k();
    Init_Post_Filter();
    Init_Post_Process();
    voicing = 60;
}
예제 #4
0
Flag   g729a_dec_init (void *decState)
{
  g729a_decode_frame_state *state;
  if (decState == NULL)
    return 0;

  state = (g729a_decode_frame_state *)decState;

  Set_zero(state->synth_buf, M);
  state->synth = state->synth_buf + M;

  Init_Decod_ld8a(&state->decoderState);
  Init_Post_Filter(&state->postFilterState);
  Init_Post_Process(&state->postProcessState);

  return 1;
}
예제 #5
0
static int tdav_codec_g729ab_open(tmedia_codec_t* self)
{
	tdav_codec_g729ab_t* g729a = (tdav_codec_g729ab_t*)self;

	// Initialize the decoder
	bad_lsf = 0;
	g729a->decoder.synth = (g729a->decoder.synth_buf + M);

	Init_Decod_ld8a();
	Init_Post_Filter();
	Init_Post_Process();
	/* for G.729B */
	Init_Dec_cng();
	
	// Initialize the encoder
	Init_Pre_Process();
	Init_Coder_ld8a();
	Set_zero(g729a->encoder.prm, PRM_SIZE + 1);
	/* for G.729B */
	Init_Cod_cng();
	

	return 0;
}
예제 #6
0
int main(int argc, char *argv[] )
{
    Word16 rate;
  Word16  synth_buf[L_ANA_BWD], *synth; /* Synthesis                   */
  Word16  parm[PRM_SIZE_E+2];             /* Synthesis parameters        */
  Word16  serial[SERIAL_SIZE_E];            /* Serial stream               */
  Word16  Az_dec[M_BWDP1*2], *ptr_Az;       /* Decoded Az for post-filter  */
  Word16  T0_first;                         /* Pitch lag in 1st subframe   */
  Word16  pst_out[L_FRAME];                 /* Postfilter output           */

  Word16  voicing;                          /* voicing from previous frame */
  Word16  sf_voic;                          /* voicing for subframe        */

  Word16  i, frame = 0;
  Word16  ga1_post, ga2_post, ga_harm;
  Word16  long_h_st, m_pst;
  Word16  serial_size;
  Word16  bwd_dominant;
  FILE    *f_syn, *f_serial;

  printf("\n");
  printf("*************************************************************************\n");
  printf("****  HIGHER BIT RATE EXTENSION OF ITU G.729 8 KBIT/S SPEECH DECODER ****\n");
  printf("****               MIXED BACKWARD / FORWARD LPC STRUCTURE            ****\n");
  printf("*************************************************************************\n");
  printf("\n");
  printf("------------------- Fixed point C simulation -----------------\n");
  printf("\n");
  printf("---------   Version 1.3 (Release 2, November 2006)   ---------\n");
  printf("\n");
  printf("                 Bit rates : 8.0 kb/s (G729) or 11.8 kb/s\n");
  printf("\n");

  /* Passed arguments */
  if ( argc != 3 ) {
    printf("Usage : decoder bitstream_file  output_file  \n");
    printf("\n");
    printf("Format for bitstream_file:\n");
    printf("  One (2-byte) synchronization word,\n");
    printf("  One (2-byte) bit-rate word,\n");
    printf("\n");
    printf("Format for outputspeech_file:\n");
    printf("  Output is written to a binary file of 16 bits data.\n");
    exit( 1 );
  }


  /* Open file for synthesis and packed serial stream */
  if( (f_serial = fopen(argv[1],"rb") ) == NULL ) {
    printf("%s - Error opening file  %s !!\n", argv[0], argv[1]);
    exit(0);
  }
  if( (f_syn = fopen(argv[2], "wb") ) == NULL ) {
    printf("%s - Error opening file  %s !!\n", argv[0], argv[2]);
    exit(0);
  }

  printf("Input bitstream file    :   %s\n\n",argv[1]);
  printf("Synthesis speech file   :   %s\n\n",argv[2]);

/*-----------------------------------------------------------------*
 *           Initialization of decoder                             *
 *-----------------------------------------------------------------*/

  for (i=0; i<L_ANA_BWD; i++) synth_buf[i] = 0;
  synth = synth_buf + MEM_SYN_BWD;

  Init_Decod_ld8e();
  Init_Post_Filter();
  Init_Post_Process();

  voicing = 60;

  ga1_post = GAMMA1_PST_E;
  ga2_post = GAMMA2_PST_E;
  ga_harm = GAMMA_HARM_E;

/*-----------------------------------------------------------------*
 *            Loop for each "L_FRAME" speech data                  *
 *-----------------------------------------------------------------*/

  while( fread(serial, sizeof(Word16), 2, f_serial) == 2) {

    if(serial[0] != SYNC_WORD ) {
        printf("error reading synchro word file %s frame %hd\n",
            argv[1], frame);
        exit(-1);
    }
    serial_size = serial[1];

    if( (serial_size != 118) && (serial_size != 80) ){
        printf("error uncorrect value of serial_size (%hd) in %s frame %hd\n",
            serial_size, argv[1], frame);
        exit(-1);
    }


    if (fread(&serial[2], sizeof(Word16), serial_size, f_serial) != (size_t)serial_size) {
        printf("error reading file %s frame %hd\n",
            argv[1], frame);
        exit(-1);
    }


    frame++;
#if defined(__BORLANDC__)
    printf("Frame : %4d\r", frame);
#endif
    if(serial_size == 118) rate = 1;
    else rate = 0;
    bits2prm_ld8e(&serial[2], &parm[1], rate);

    /* the hardware detects frame erasures by checking if all bits
       are set to zero
     */
    parm[0] = 0;           /* No frame erasure */
    for (i=2; i < serial_size; i++)
      if (serial[i] == 0 ) parm[0] = 1; /* frame erased     */

    if (parm[0] == 1) printf("Frame Erased : %d\n", frame);

    if(rate == 0) {
        parm[4] = Check_Parity_Pitch(parm[3], parm[4]);
    }
    else {
        /* ------------------------------------------------------------------ */
        /* check parity and put 1 in parm[5] if parity error in Forward mode  */
        /*                  put 1 in parm[3] if parity error in Backward mode */
        /* ------------------------------------------------------------------ */
        if (parm[1] == 0) {
            i = shr(parm[4], 1);
            i &= (Word16)1;
            parm[5] = add(parm[5], i);
            parm[5] = Check_Parity_Pitch(parm[4], parm[5]);
        }
        else {
            i = shr(parm[2], 1);
            i &= (Word16)1;
            parm[3] = add(parm[3], i);
            parm[3] = Check_Parity_Pitch(parm[2], parm[3]);
        }
    }

    /* ---------- */
    /*  Decoding  */
    /* ---------- */
    Decod_ld8e(parm, rate, voicing, synth_buf, Az_dec, &T0_first, &bwd_dominant,
        &m_pst);

    /* ---------- */
    /* Postfilter */
    /* ---------- */
    voicing = 0; 
    ptr_Az = Az_dec;

    /* Adaptive parameters for postfiltering */
    /* ------------------------------------- */
    if (serial_size == 80) {
        long_h_st = LONG_H_ST;
        ga1_post = GAMMA1_PST;
        ga2_post = GAMMA2_PST;
        ga_harm = GAMMA_HARM;
    }
    else {
        long_h_st = LONG_H_ST_E;
        /* If backward mode is dominant => progressively reduce postfiltering */
        if ((parm[1] == 1) && (bwd_dominant == 1)) {
            ga_harm = sub(ga_harm, 410);
            if (ga_harm < 0) ga_harm = 0;
            ga1_post = sub(ga1_post, 1147);
            if (ga1_post < 0) ga1_post = 0;
            ga2_post = sub(ga2_post, 1065);
            if (ga2_post < 0) ga2_post = 0;
        }
        else {
            ga_harm = add( ga_harm, 410);
            if (ga_harm > GAMMA_HARM_E) ga_harm = GAMMA_HARM_E;
            ga1_post = add(ga1_post, 1147);
            if (ga1_post > GAMMA1_PST_E) ga1_post = GAMMA1_PST_E;
            ga2_post = add(ga2_post, 1065);
            if (ga2_post > GAMMA2_PST_E) ga2_post = GAMMA2_PST_E;
        }
    }

    for(i=0; i<L_FRAME; i++) pst_out[i] = synth[i];

	for(i=0; i<L_FRAME; i+=L_SUBFR) {
	   Poste(T0_first, &synth[i], ptr_Az, &pst_out[i], &sf_voic,
		   ga1_post, ga2_post, ga_harm, long_h_st, m_pst);
	   if (sf_voic != 0) voicing = sf_voic;
	   ptr_Az += m_pst+1;
	}


#ifdef POSTPROC
  Post_Process(pst_out, L_FRAME);
#else
  for (i=0; i<L_FRAME; i++) pst_out[i] = shl(pst_out[i],1);
#endif

#ifdef HARDW
  {
  Word16 *my_pt;
  Word16 my_temp;
  int my_i;
  my_pt = pst_out;
       for(my_i=0; my_i < L_FRAME; my_i++) {
          my_temp = *my_pt;
          my_temp = add( my_temp, (Word16) 4); /* rounding on 13 bit */
          my_temp = my_temp & 0xFFF8; /* mask on 13 bit */
          *my_pt++ = my_temp;
       }
    }
#endif

    fwrite(pst_out, sizeof(Word16), L_FRAME, f_syn);
  }
  printf("\n");
  return(0);
}
예제 #7
0
//#if 0
int main(int argc, char *argv[] )
{
  Word16  synth_buf[L_FRAME+M], *synth; /* Synthesis                   */
  Word16  parm[PRM_SIZE+1];             /* Synthesis parameters        */
  Word16  serial[SERIAL_SIZE];          /* Serial stream               */
  Word16  Az_dec[MP1*2];                /* Decoded Az for post-filter  */
  Word16  T2[2];                        /* Pitch lag for 2 subframes   */
  Word16  i, frame;
  FILE   *f_syn, *f_serial;

  printf("\n");
  printf("************   G.729a 8.0 KBIT/S SPEECH DECODER  ************\n");
  printf("\n");
  printf("------------------- Fixed point C simulation ----------------\n");
  printf("\n");
  printf("-----------------          Version 1.1        ---------------\n");
  printf("\n");

   /* Passed arguments */
   argc = 3;
   strcpy(argv[1],"test.bit");
   strcpy(argv[2],"test.dec");

   if ( argc != 3)
     {
        printf("Usage :%s bitstream_file  outputspeech_file\n",argv[0]);
        printf("\n");
        printf("Format for bitstream_file:\n");
        printf("  One (2-byte) synchronization word \n");
        printf("  One (2-byte) size word,\n");
        printf("  80 words (2-byte) containing 80 bits.\n");
        printf("\n");
        printf("Format for outputspeech_file:\n");
        printf("  Synthesis is written to a binary file of 16 bits data.\n");
        exit( 1 );
     }

   /* Open file for synthesis and packed serial stream */

   if( (f_serial = fopen(argv[1],"rb") ) == NULL )
     {
        printf("%s - Error opening file  %s !!\n", argv[0], argv[1]);
        exit(0);
     }

   if( (f_syn = fopen(argv[2], "wb") ) == NULL )
     {
        printf("%s - Error opening file  %s !!\n", argv[0], argv[2]);
        exit(0);
     }

   printf("Input bitstream file  :   %s\n",argv[1]);
   printf("Synthesis speech file :   %s\n",argv[2]);

/*-----------------------------------------------------------------*
 *           Initialization of decoder                             *
 *-----------------------------------------------------------------*/

  for (i=0; i<M; i++) synth_buf[i] = 0;
  synth = synth_buf + M;

  bad_lsf = 0;          /* Initialize bad LSF indicator */
  Init_Decod_ld8a();
  Init_Post_Filter();
  Init_Post_Process();


/*-----------------------------------------------------------------*
 *            Loop for each "L_FRAME" speech data                  *
 *-----------------------------------------------------------------*/

  frame = 0;

  /* c code */

  while( fread(serial, sizeof(Word16), SERIAL_SIZE, f_serial) == SERIAL_SIZE)
  {
    //printf("Frame =%d\n", frame++);
	printf("Frame =%d \n", frame);
	frame = frame + 1;

    bits2prm_ld8k( &serial[2], &parm[1]);

    /* the hardware detects frame erasures by checking if all bits
       are set to zero
     */
    parm[0] = 0;           /* No frame erasure */
    for (i=2; i < SERIAL_SIZE; i++)
      if (serial[i] == 0 ) parm[0] = 1; /* frame erased     */

    /* check pitch parity and put 1 in parm[4] if parity error */

    parm[4] = Check_Parity_Pitch(parm[3], parm[4]);

    Decod_ld8a(parm, synth, Az_dec, T2);

    Post_Filter(synth, Az_dec, T2);        /* Post-filter */

    Post_Process(synth, L_FRAME);

    fwrite(synth, sizeof(short), L_FRAME, f_syn);

  }
  return(0);
}
예제 #8
0
int main(int argc, char *argv[] )
{
  Word16  synth_buf[L_FRAME+M], *synth; /* Synthesis                   */
  Word16  parm[PRM_SIZE+1];             /* Synthesis parameters        */
  Word16  serial[SERIAL_SIZE];          /* Serial stream               */
  Word16  Az_dec[MP1*2], *ptr_Az;       /* Decoded Az for post-filter  */
  Word16  T0_first;                     /* Pitch lag in 1st subframe   */
  Word16  pst_out[L_FRAME];             /* Postfilter output           */

  Word16  voicing;                      /* voicing from previous frame */
  Word16  sf_voic;                      /* voicing for subframe        */

  Word16  i, frame;
  FILE   *f_syn, *f_serial;

  printf("\n");
  printf("***********     ITU G.729 8 KBIT/S SPEECH CODER    ***********\n");
  printf("\n");
  printf("------------------- Fixed point C simulation -----------------\n");
  printf("\n");
  printf("-----------------          Version 3.3        ----------------\n");
  printf("\n");

   /* Passed arguments */

   if ( argc != 3 )
     {
        printf("Usage :%s bitstream_file  outputspeech_file\n",argv[0]);
        printf("\n");
        printf("Format for bitstream_file:\n");
        printf("  One (2-byte) synchronization word,\n");
        printf("  One (2-byte) size word,\n");
        printf("  80 words (2-byte) containing 80 bits.\n");
        printf("\n");
        printf("Format for outputspeech_file:\n");
        printf("  Output is written to a binary file of 16 bits data.\n");
        exit( 1 );
     }

   /* Open file for synthesis and packed serial stream */

   if( (f_serial = fopen(argv[1],"rb") ) == NULL )
     {
        printf("%s - Error opening file  %s !!\n", argv[0], argv[1]);
        exit(0);
     }

   if( (f_syn = fopen(argv[2], "wb") ) == NULL )
     {
        printf("%s - Error opening file  %s !!\n", argv[0], argv[2]);
        exit(0);
     }
   printf("Input bitstream file  :   %s\n",argv[1]);
   printf("Synthesis speech file :   %s\n",argv[2]);

/*-----------------------------------------------------------------*
 *           Initialization of decoder                             *
 *-----------------------------------------------------------------*/

  for (i=0; i<M; i++) synth_buf[i] = 0;
  synth = synth_buf + M;

  Init_Decod_ld8k();
  Init_Post_Filter();
  Init_Post_Process();
  voicing = 60;

/*-----------------------------------------------------------------*
 *            Loop for each "L_FRAME" speech data                  *
 *-----------------------------------------------------------------*/

  frame = 0;
  while( fread(serial, sizeof(Word16), SERIAL_SIZE, f_serial) == SERIAL_SIZE)
  {

    bits2prm_ld8k( &serial[2], &parm[1]);

    /* the hardware detects frame erasures by checking if all bits
       are set to zero
     */
    parm[0] = 0;           /* No frame erasure */
    for (i=2; i < SERIAL_SIZE; i++)
      if (serial[i] == 0 ) parm[0] = 1; /* frame erased     */

    /* check parity and put 1 in parm[4] if parity error */

    parm[4] = Check_Parity_Pitch(parm[3], parm[4]);

    Decod_ld8k(parm, voicing, synth, Az_dec, &T0_first);

    /* Postfilter */

    voicing = 0;
    ptr_Az = Az_dec;
    for(i=0; i<L_FRAME; i+=L_SUBFR) {
       Post(T0_first, &synth[i], ptr_Az, &pst_out[i], &sf_voic);
       if (sf_voic != 0) { voicing = sf_voic;}
       ptr_Az += MP1;
    }
    Copy(&synth_buf[L_FRAME], &synth_buf[0], M);

    Post_Process(pst_out, L_FRAME);

#ifdef HARDW
    {
       Word16 *my_pt;
       Word16 my_temp;
       int my_i;
       my_pt = pst_out;
       for(my_i=0; my_i < L_FRAME; my_i++) {
          my_temp = *my_pt;
          my_temp = add( my_temp, (Word16) 4); /* rounding on 13 bit */
          my_temp = my_temp & 0xFFF8; /* mask on 13 bit */
          *my_pt++ = my_temp;
       }
    }
#endif

    fwrite(pst_out, sizeof(Word16), L_FRAME, f_syn);
    frame++;
    printf("Frame =%d\r", frame);
  }
  return(0);
}