preemph.c revision 41050cdb033641ddf26831d9272c0930f7b40a2d
1/*
2 ** Copyright 2003-2010, VisualOn, Inc.
3 **
4 ** Licensed under the Apache License, Version 2.0 (the "License");
5 ** you may not use this file except in compliance with the License.
6 ** You may obtain a copy of the License at
7 **
8 **     http://www.apache.org/licenses/LICENSE-2.0
9 **
10 ** Unless required by applicable law or agreed to in writing, software
11 ** distributed under the License is distributed on an "AS IS" BASIS,
12 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 ** See the License for the specific language governing permissions and
14 ** limitations under the License.
15 */
16
17/***********************************************************************
18*      File: preemph.c                                                *
19*                                                                     *
20*      Description: Preemphasis: filtering through 1 - g z^-1         *
21*	           Preemph2 --> signal is multiplied by 2             *
22*                                                                     *
23************************************************************************/
24
25#include "typedef.h"
26#include "basic_op.h"
27
28void Preemph(
29		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
30		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
31		Word16 lg,                            /* (i)     : lenght of filtering                    */
32		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
33	    )
34{
35	Word16 temp;
36	Word32 i, L_tmp;
37
38	temp = x[lg - 1];
39
40	for (i = lg - 1; i > 0; i--)
41	{
42		L_tmp = L_deposit_h(x[i]);
43		L_tmp -= (x[i - 1] * mu)<<1;
44		x[i] = (L_tmp + 0x8000)>>16;
45	}
46
47	L_tmp = L_deposit_h(x[0]);
48	L_tmp -= ((*mem) * mu)<<1;
49	x[0] = (L_tmp + 0x8000)>>16;
50
51	*mem = temp;
52
53	return;
54}
55
56
57void Preemph2(
58		Word16 x[],                           /* (i/o)   : input signal overwritten by the output */
59		Word16 mu,                            /* (i) Q15 : preemphasis coefficient                */
60		Word16 lg,                            /* (i)     : lenght of filtering                    */
61		Word16 * mem                          /* (i/o)   : memory (x[-1])                         */
62	     )
63{
64	Word16 temp;
65	Word32 i, L_tmp;
66
67	temp = x[lg - 1];
68
69	for (i = (Word16) (lg - 1); i > 0; i--)
70	{
71		L_tmp = L_deposit_h(x[i]);
72		L_tmp -= (x[i - 1] * mu)<<1;
73		L_tmp = (L_tmp << 1);
74		x[i] = (L_tmp + 0x8000)>>16;
75	}
76
77	L_tmp = L_deposit_h(x[0]);
78	L_tmp -= ((*mem) * mu)<<1;
79	L_tmp = (L_tmp << 1);
80	x[0] = (L_tmp + 0x8000)>>16;
81
82	*mem = temp;
83
84	return;
85}
86
87
88
89