jni/gsm/lpc.c
author Nikita Kozlov <nikita@elyzion.net>
Wed, 06 Jun 2012 23:24:12 +0200
changeset 1005 a2cad81f348b
parent 823 2036ebfaccda
permissions -rw-r--r--
fix some bugs + update jingle code in asmack
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     1
/*
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     2
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     3
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     4
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     5
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     6
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     7
/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/lpc.c,v 1.5 1994/12/30 23:14:54 jutta Exp $ */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     8
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     9
#include <stdio.h>
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    10
#include <assert.h>
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    11
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    12
#include "private.h"
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    13
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    14
#include "gsm.h"
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    15
#include "proto.h"
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    16
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    17
#undef	P
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    18
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    19
/*
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    20
 *  4.2.4 .. 4.2.7 LPC ANALYSIS SECTION
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    21
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    22
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    23
/* 4.2.4 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    24
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    25
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    26
static void Autocorrelation P2((s, L_ACF),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    27
	word     * s,		/* [0..159]	IN/OUT  */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    28
 	longword * L_ACF)	/* [0..8]	OUT     */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    29
/*
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    30
 *  The goal is to compute the array L_ACF[k].  The signal s[i] must
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    31
 *  be scaled in order to avoid an overflow situation.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    32
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    33
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    34
	register int	k, i;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    35
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    36
	word		temp, smax, scalauto;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    37
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    38
#ifdef	USE_FLOAT_MUL
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    39
	float		float_s[160];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    40
#endif
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    41
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    42
	/*  Dynamic scaling of the array  s[0..159]
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    43
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    44
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    45
	/*  Search for the maximum.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    46
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    47
	smax = 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    48
	for (k = 0; k <= 159; k++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    49
		temp = GSM_ABS( s[k] );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    50
		if (temp > smax) smax = temp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    51
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    52
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    53
	/*  Computation of the scaling factor.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    54
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    55
	if (smax == 0) scalauto = 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    56
	else {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    57
		assert(smax > 0);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    58
		scalauto = 4 - gsm_norm( (longword)smax << 16 );/* sub(4,..) */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    59
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    60
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    61
	/*  Scaling of the array s[0...159]
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    62
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    63
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    64
	if (scalauto > 0) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    65
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    66
# ifdef USE_FLOAT_MUL
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    67
#   define SCALE(n)	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    68
	case n: for (k = 0; k <= 159; k++) \
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    69
			float_s[k] = (float)	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    70
				(s[k] = GSM_MULT_R(s[k], 16384 >> (n-1)));\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    71
		break;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    72
# else 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    73
#   define SCALE(n)	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    74
	case n: for (k = 0; k <= 159; k++) \
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    75
			s[k] = GSM_MULT_R( s[k], 16384 >> (n-1) );\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    76
		break;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    77
# endif /* USE_FLOAT_MUL */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    78
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    79
		switch (scalauto) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    80
		SCALE(1)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    81
		SCALE(2)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    82
		SCALE(3)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    83
		SCALE(4)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    84
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    85
# undef	SCALE
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    86
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    87
# ifdef	USE_FLOAT_MUL
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    88
	else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    89
# endif
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    90
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    91
	/*  Compute the L_ACF[..].
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    92
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    93
	{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    94
# ifdef	USE_FLOAT_MUL
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    95
		register float * sp = float_s;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    96
		register float   sl = *sp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    97
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    98
#		define STEP(k)	 L_ACF[k] += (longword)(sl * sp[ -(k) ]);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    99
# else
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   100
		word  * sp = s;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   101
		word    sl = *sp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   102
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   103
#		define STEP(k)	 L_ACF[k] += ((longword)sl * sp[ -(k) ]);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   104
# endif
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   105
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   106
#	define NEXTI	 sl = *++sp
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   107
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   108
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   109
	for (k = 9; k--; L_ACF[k] = 0) ;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   110
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   111
	STEP (0);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   112
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   113
	STEP(0); STEP(1);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   114
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   115
	STEP(0); STEP(1); STEP(2);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   116
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   117
	STEP(0); STEP(1); STEP(2); STEP(3);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   118
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   119
	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   120
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   121
	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   122
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   123
	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   124
	NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   125
	STEP(0); STEP(1); STEP(2); STEP(3); STEP(4); STEP(5); STEP(6); STEP(7);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   126
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   127
	for (i = 8; i <= 159; i++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   128
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   129
		NEXTI;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   130
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   131
		STEP(0);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   132
		STEP(1); STEP(2); STEP(3); STEP(4);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   133
		STEP(5); STEP(6); STEP(7); STEP(8);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   134
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   135
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   136
	for (k = 9; k--; L_ACF[k] <<= 1) ; 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   137
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   138
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   139
	/*   Rescaling of the array s[0..159]
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   140
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   141
	if (scalauto > 0) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   142
		assert(scalauto <= 4); 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   143
		for (k = 160; k--; *s++ <<= scalauto) ;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   144
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   145
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   146
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   147
#if defined(USE_FLOAT_MUL) && defined(FAST)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   148
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   149
static void Fast_Autocorrelation P2((s, L_ACF),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   150
	word * s,		/* [0..159]	IN/OUT  */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   151
 	longword * L_ACF)	/* [0..8]	OUT     */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   152
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   153
	register int	k, i;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   154
	float f_L_ACF[9];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   155
	float scale;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   156
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   157
	float          s_f[160];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   158
	register float *sf = s_f;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   159
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   160
	for (i = 0; i < 160; ++i) sf[i] = s[i];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   161
	for (k = 0; k <= 8; k++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   162
		register float L_temp2 = 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   163
		register float *sfl = sf - k;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   164
		for (i = k; i < 160; ++i) L_temp2 += sf[i] * sfl[i];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   165
		f_L_ACF[k] = L_temp2;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   166
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   167
	scale = MAX_LONGWORD / f_L_ACF[0];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   168
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   169
	for (k = 0; k <= 8; k++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   170
		L_ACF[k] = f_L_ACF[k] * scale;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   171
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   172
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   173
#endif	/* defined (USE_FLOAT_MUL) && defined (FAST) */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   174
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   175
/* 4.2.5 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   176
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   177
static void Reflection_coefficients P2( (L_ACF, r),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   178
	longword	* L_ACF,		/* 0...8	IN	*/
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   179
	register word	* r			/* 0...7	OUT 	*/
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   180
)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   181
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   182
	register int	i, m, n;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   183
	register word	temp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   184
	register longword ltmp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   185
	word		ACF[9];	/* 0..8 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   186
	word		P[  9];	/* 0..8 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   187
	word		K[  9]; /* 2..8 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   188
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   189
	/*  Schur recursion with 16 bits arithmetic.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   190
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   191
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   192
	if (L_ACF[0] == 0) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   193
		for (i = 8; i--; *r++ = 0) ;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   194
		return;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   195
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   196
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   197
	assert( L_ACF[0] != 0 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   198
	temp = gsm_norm( L_ACF[0] );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   199
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   200
	assert(temp >= 0 && temp < 32);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   201
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   202
	/* ? overflow ? */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   203
	for (i = 0; i <= 8; i++) ACF[i] = SASR( L_ACF[i] << temp, 16 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   204
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   205
	/*   Initialize array P[..] and K[..] for the recursion.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   206
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   207
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   208
	for (i = 1; i <= 7; i++) K[ i ] = ACF[ i ];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   209
	for (i = 0; i <= 8; i++) P[ i ] = ACF[ i ];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   210
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   211
	/*   Compute reflection coefficients
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   212
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   213
	for (n = 1; n <= 8; n++, r++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   214
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   215
		temp = P[1];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   216
		temp = GSM_ABS(temp);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   217
		if (P[0] < temp) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   218
			for (i = n; i <= 8; i++) *r++ = 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   219
			return;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   220
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   221
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   222
		*r = gsm_div( temp, P[0] );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   223
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   224
		assert(*r >= 0);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   225
		if (P[1] > 0) *r = -*r;		/* r[n] = sub(0, r[n]) */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   226
		assert (*r != MIN_WORD);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   227
		if (n == 8) return; 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   228
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   229
		/*  Schur recursion
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   230
		 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   231
		temp = GSM_MULT_R( P[1], *r );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   232
		P[0] = GSM_ADD( P[0], temp );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   233
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   234
		for (m = 1; m <= 8 - n; m++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   235
			temp     = GSM_MULT_R( K[ m   ],    *r );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   236
			P[m]     = GSM_ADD(    P[ m+1 ],  temp );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   237
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   238
			temp     = GSM_MULT_R( P[ m+1 ],    *r );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   239
			K[m]     = GSM_ADD(    K[ m   ],  temp );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   240
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   241
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   242
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   243
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   244
/* 4.2.6 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   245
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   246
static void Transformation_to_Log_Area_Ratios P1((r),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   247
	register word	* r 			/* 0..7	   IN/OUT */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   248
)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   249
/*
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   250
 *  The following scaling for r[..] and LAR[..] has been used:
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   251
 *
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   252
 *  r[..]   = integer( real_r[..]*32768. ); -1 <= real_r < 1.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   253
 *  LAR[..] = integer( real_LAR[..] * 16384 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   254
 *  with -1.625 <= real_LAR <= 1.625
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   255
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   256
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   257
	register word	temp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   258
	register int	i;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   259
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   260
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   261
	/* Computation of the LAR[0..7] from the r[0..7]
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   262
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   263
	for (i = 1; i <= 8; i++, r++) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   264
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   265
		temp = *r;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   266
		temp = GSM_ABS(temp);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   267
		assert(temp >= 0);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   268
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   269
		if (temp < 22118) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   270
			temp >>= 1;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   271
		} else if (temp < 31130) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   272
			assert( temp >= 11059 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   273
			temp -= 11059;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   274
		} else {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   275
			assert( temp >= 26112 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   276
			temp -= 26112;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   277
			temp <<= 2;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   278
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   279
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   280
		*r = *r < 0 ? -temp : temp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   281
		assert( *r != MIN_WORD );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   282
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   283
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   284
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   285
/* 4.2.7 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   286
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   287
static void Quantization_and_coding P1((LAR),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   288
	register word * LAR    	/* [0..7]	IN/OUT	*/
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   289
)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   290
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   291
	register word	temp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   292
	longword	ltmp;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   293
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   294
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   295
	/*  This procedure needs four tables; the following equations
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   296
	 *  give the optimum scaling for the constants:
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   297
	 *  
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   298
	 *  A[0..7] = integer( real_A[0..7] * 1024 )
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   299
	 *  B[0..7] = integer( real_B[0..7] *  512 )
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   300
	 *  MAC[0..7] = maximum of the LARc[0..7]
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   301
	 *  MIC[0..7] = minimum of the LARc[0..7]
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   302
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   303
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   304
#	undef STEP
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   305
#	define	STEP( A, B, MAC, MIC )		\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   306
		temp = GSM_MULT( A,   *LAR );	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   307
		temp = GSM_ADD(  temp,   B );	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   308
		temp = GSM_ADD(  temp, 256 );	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   309
		temp = SASR(     temp,   9 );	\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   310
		*LAR  =  temp>MAC ? MAC - MIC : (temp<MIC ? 0 : temp - MIC); \
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   311
		LAR++;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   312
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   313
	STEP(  20480,     0,  31, -32 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   314
	STEP(  20480,     0,  31, -32 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   315
	STEP(  20480,  2048,  15, -16 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   316
	STEP(  20480, -2560,  15, -16 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   317
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   318
	STEP(  13964,    94,   7,  -8 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   319
	STEP(  15360, -1792,   7,  -8 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   320
	STEP(   8534,  -341,   3,  -4 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   321
	STEP(   9036, -1144,   3,  -4 );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   322
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   323
#	undef	STEP
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   324
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   325
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   326
void Gsm_LPC_Analysis P3((S, s,LARc),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   327
	struct gsm_state *S,
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   328
	word 		 * s,		/* 0..159 signals	IN/OUT	*/
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   329
        word 		 * LARc)	/* 0..7   LARc's	OUT	*/
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   330
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   331
	longword	L_ACF[9];
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   332
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   333
// Wirlab
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   334
	(void)S;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   335
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   336
	
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   337
#if defined(USE_FLOAT_MUL) && defined(FAST)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   338
	if (S->fast) Fast_Autocorrelation (s,	  L_ACF );
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   339
	else
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   340
#endif
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   341
	Autocorrelation			  (s,	  L_ACF	);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   342
	Reflection_coefficients		  (L_ACF, LARc	);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   343
	Transformation_to_Log_Area_Ratios (LARc);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   344
	Quantization_and_coding		  (LARc);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   345
}