blob: 36debbdd85598288712023b3b9d7ab1dd8d19c3f [file] [log] [blame]
Benny Prijonoeb30bf52006-03-04 20:43:52 +00001/* Copyright (C) 2002 Jean-Marc Valin */
2/**
3 @file ltp.h
4 @brief Long-Term Prediction functions
5*/
6/*
7 Redistribution and use in source and binary forms, with or without
8 modification, are permitted provided that the following conditions
9 are met:
10
11 - Redistributions of source code must retain the above copyright
12 notice, this list of conditions and the following disclaimer.
13
14 - Redistributions in binary form must reproduce the above copyright
15 notice, this list of conditions and the following disclaimer in the
16 documentation and/or other materials provided with the distribution.
17
18 - Neither the name of the Xiph.org Foundation nor the names of its
19 contributors may be used to endorse or promote products derived from
20 this software without specific prior written permission.
21
22 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
26 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33*/
34
35#include <speex/speex_bits.h>
36#include "misc.h"
37
38/** LTP parameters. */
39typedef struct {
40 const signed char *gain_cdbk;
41 int gain_bits;
42 int pitch_bits;
43} ltp_params;
44
45#ifdef FIXED_POINT
46#define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -SHR16(g[0],1)) + (g[2]>0 ? g[2] : -SHR16(g[2],1)))
47#else
48#define gain_3tap_to_1tap(g) (ABS(g[1]) + (g[0]>0 ? g[0] : -.5*g[0]) + (g[2]>0 ? g[2] : -.5*g[2]))
49#endif
50
51void open_loop_nbest_pitch(spx_sig_t *sw, int start, int end, int len, int *pitch, spx_word16_t *gain, int N, char *stack);
52
53
54/** Finds the best quantized 3-tap pitch predictor by analysis by synthesis */
55int pitch_search_3tap(
56spx_sig_t target[], /* Target vector */
57spx_sig_t *sw,
58spx_coef_t ak[], /* LPCs for this subframe */
59spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */
60spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */
61spx_sig_t exc[], /* Overlapping codebook */
62const void *par,
63int start, /* Smallest pitch value allowed */
64int end, /* Largest pitch value allowed */
65spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */
66int p, /* Number of LPC coeffs */
67int nsf, /* Number of samples in subframe */
68SpeexBits *bits,
69char *stack,
70spx_sig_t *exc2,
71spx_word16_t *r,
72int complexity,
73int cdbk_offset,
74int plc_tuning
75);
76
77/*Unquantize adaptive codebook and update pitch contribution*/
78void pitch_unquant_3tap(
79spx_sig_t exc[], /* Excitation */
80int start, /* Smallest pitch value allowed */
81int end, /* Largest pitch value allowed */
82spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */
83const void *par,
84int nsf, /* Number of samples in subframe */
85int *pitch_val,
86spx_word16_t *gain_val,
87SpeexBits *bits,
88char *stack,
89int lost,
90int subframe_offset,
91spx_word16_t last_pitch_gain,
92int cdbk_offset
93);
94
95/** Forced pitch delay and gain */
96int forced_pitch_quant(
97spx_sig_t target[], /* Target vector */
98spx_sig_t *sw,
99spx_coef_t ak[], /* LPCs for this subframe */
100spx_coef_t awk1[], /* Weighted LPCs #1 for this subframe */
101spx_coef_t awk2[], /* Weighted LPCs #2 for this subframe */
102spx_sig_t exc[], /* Excitation */
103const void *par,
104int start, /* Smallest pitch value allowed */
105int end, /* Largest pitch value allowed */
106spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */
107int p, /* Number of LPC coeffs */
108int nsf, /* Number of samples in subframe */
109SpeexBits *bits,
110char *stack,
111spx_sig_t *exc2,
112spx_word16_t *r,
113int complexity,
114int cdbk_offset,
115int plc_tuning
116);
117
118/** Unquantize forced pitch delay and gain */
119void forced_pitch_unquant(
120spx_sig_t exc[], /* Excitation */
121int start, /* Smallest pitch value allowed */
122int end, /* Largest pitch value allowed */
123spx_word16_t pitch_coef, /* Voicing (pitch) coefficient */
124const void *par,
125int nsf, /* Number of samples in subframe */
126int *pitch_val,
127spx_word16_t *gain_val,
128SpeexBits *bits,
129char *stack,
130int lost,
131int subframe_offset,
132spx_word16_t last_pitch_gain,
133int cdbk_offset
134);