146 lines
3.3 KiB
C
146 lines
3.3 KiB
C
/*
|
|
ITU-T G.729A Speech Coder ANSI-C Source Code
|
|
Version 1.1 Last modified: September 1996
|
|
|
|
Copyright (c) 1996,
|
|
AT&T, France Telecom, NTT, Universite de Sherbrooke
|
|
All rights reserved.
|
|
*/
|
|
|
|
/*-------------------------------------------------------------------*
|
|
* Function Set zero() *
|
|
* ~~~~~~~~~~ *
|
|
* Set vector x[] to zero *
|
|
*-------------------------------------------------------------------*/
|
|
|
|
#include "typedef.h"
|
|
#include "basic_op.h"
|
|
#include "ld8a.h"
|
|
#include "tab_ld8a.h"
|
|
|
|
void
|
|
Set_zero (Word16 x[], Word16 L)
|
|
{
|
|
Word16 i;
|
|
|
|
for (i = 0; i < L; i++)
|
|
x[i] = 0;
|
|
|
|
return;
|
|
}
|
|
|
|
/*-------------------------------------------------------------------*
|
|
* Function Copy: *
|
|
* ~~~~~ *
|
|
* Copy vector x[] to y[] *
|
|
*-------------------------------------------------------------------*/
|
|
|
|
void
|
|
Copy (Word16 x[], Word16 y[], Word16 L)
|
|
{
|
|
Word16 i;
|
|
|
|
for (i = 0; i < L; i++)
|
|
y[i] = x[i];
|
|
|
|
return;
|
|
}
|
|
|
|
/* Random generator */
|
|
|
|
Word16
|
|
Random_16 (Word16* seed)
|
|
{
|
|
/* seed = seed*31821 + 13849; */
|
|
*seed = extract_l (L_add (L_shr (L_mult (*seed, 31821), 1), 13849L));
|
|
|
|
return (*seed);
|
|
}
|
|
|
|
|
|
/*----------------------------------------------------------------------------
|
|
* Store_Param - converts encoder parameter vector into frame
|
|
* Restore_Params - converts serial received frame to encoder parameter vector
|
|
*
|
|
* The transmitted parameters are:
|
|
*
|
|
* LPC: 1st codebook 7+1 bit
|
|
* 2nd codebook 5+5 bit
|
|
*
|
|
* 1st subframe:
|
|
* pitch period 8 bit
|
|
* parity check on 1st period 1 bit
|
|
* codebook index1 (positions) 13 bit
|
|
* codebook index2 (signs) 4 bit
|
|
* pitch and codebook gains 4+3 bit
|
|
*
|
|
* 2nd subframe:
|
|
* pitch period (relative) 5 bit
|
|
* codebook index1 (positions) 13 bit
|
|
* codebook index2 (signs) 4 bit
|
|
* pitch and codebook gains 4+3 bit
|
|
*----------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
void
|
|
Store_Params(Word16 * parm, void *to)
|
|
{
|
|
int i, j;
|
|
unsigned char mask, *to_b;
|
|
Word16 value, val_mask;
|
|
|
|
to_b = (unsigned char *)to;
|
|
mask = 0x80;
|
|
for (i = 0; i < PRM_SIZE; i++) {
|
|
value = parm[i];
|
|
val_mask = 1 << (bitsno[i] - 1);
|
|
for (j = 0; j < bitsno[i]; j++) {
|
|
|
|
if (value & val_mask)
|
|
*to_b |= mask;
|
|
else
|
|
*to_b &= ~mask;
|
|
|
|
value = value << 1;
|
|
mask = mask >> 1;
|
|
|
|
if (mask == 0) {
|
|
mask = 0x80;
|
|
to_b++;
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
void Restore_Params(const void *from, Word16 * parm)
|
|
{
|
|
int i, j;
|
|
unsigned char mask, *from_b;
|
|
Word16 value;
|
|
|
|
mask = 0x80;
|
|
from_b = (unsigned char *)from;
|
|
|
|
for (i = 0; i < PRM_SIZE; i++) {
|
|
value = 0;
|
|
for (j = 0; j < bitsno[i]; j++) {
|
|
|
|
value = value << 1;
|
|
|
|
if (mask & (*from_b))
|
|
value += 1;
|
|
|
|
mask = mask >> 1;
|
|
if (mask == 0) {
|
|
mask = 0x80;
|
|
from_b++;
|
|
}
|
|
}
|
|
parm[i] = value;
|
|
}
|
|
return;
|
|
}
|
|
|