comparison spandsp-0.0.3/spandsp-0.0.3/src/spandsp/lpc10.h @ 5:f762bf195c4b

import spandsp-0.0.3
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Fri, 25 Jun 2010 16:00:21 +0200
parents
children
comparison
equal deleted inserted replaced
4:26cd8f1ef0b1 5:f762bf195c4b
1 /*
2 * SpanDSP - a series of DSP components for telephony
3 *
4 * lpc10.h - LPC10 low bit rate speech codec.
5 *
6 * Written by Steve Underwood <steveu@coppice.org>
7 *
8 * Copyright (C) 2006 Steve Underwood
9 *
10 * All rights reserved.
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2, as
14 * published by the Free Software Foundation.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, write to the Free Software
23 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 *
25 * $Id: lpc10.h,v 1.10 2006/11/21 13:57:40 steveu Exp $
26 */
27
28 #if !defined(_LPC10_H_)
29 #define _LPC10_H_
30
31 /*! \page lpc10_page LPC10 encoding and decoding
32 \section lpc10_page_sec_1 What does it do?
33 The LPC10 module implements the US Department of Defense LPC10
34 codec. This codec produces compressed data at 2400bps. At such
35 a low rate high fidelity cannot be expected. However, the speech
36 clarity is quite good, and this codec is unencumbered by patent
37 or other restrictions.
38
39 \section lpc10_page_sec_2 How does it work?
40 ???.
41 */
42
43 #define LPC10_SAMPLES_PER_FRAME 180
44 #define LPC10_BITS_IN_COMPRESSED_FRAME 54
45
46 /*!
47 LPC10 codec unpacked frame.
48 */
49 typedef struct
50 {
51 int32_t ipitch;
52 int32_t irms;
53 int32_t irc[10];
54 } lpc10_frame_t;
55
56 /*!
57 LPC10 codec encoder state descriptor. This defines the state of
58 a single working instance of the LPC10 encoder.
59 */
60 typedef struct
61 {
62 int error_correction;
63
64 /* State used only by function high_pass_100hz */
65 float z11;
66 float z21;
67 float z12;
68 float z22;
69
70 /* State used by function lpc10_analyse */
71 float inbuf[LPC10_SAMPLES_PER_FRAME*3];
72 float pebuf[LPC10_SAMPLES_PER_FRAME*3];
73 float lpbuf[696];
74 float ivbuf[312];
75 float bias;
76 int32_t osbuf[10]; /* No initial value necessary */
77 int32_t osptr; /* Initial value 1 */
78 int32_t obound[3];
79 int32_t vwin[3][2]; /* Initial value vwin[2][0] = 307; vwin[2][1] = 462; */
80 int32_t awin[3][2]; /* Initial value awin[2][0] = 307; awin[2][1] = 462; */
81 int32_t voibuf[4][2];
82 float rmsbuf[3];
83 float rcbuf[3][10];
84 float zpre;
85
86 /* State used by function onset */
87 float n;
88 float d__; /* Initial value 1.0f */
89 float fpc; /* No initial value necessary */
90 float l2buf[16];
91 float l2sum1;
92 int32_t l2ptr1; /* Initial value 1 */
93 int32_t l2ptr2; /* Initial value 9 */
94 int32_t lasti; /* No initial value necessary */
95 int hyst; /* Initial value FALSE */
96
97 /* State used by function lpc10_voicing */
98 float dither; /* Initial value 20.0f */
99 float snr;
100 float maxmin;
101 float voice[3][2]; /* Initial value is probably unnecessary */
102 int32_t lbve;
103 int32_t lbue;
104 int32_t fbve;
105 int32_t fbue;
106 int32_t ofbue;
107 int32_t sfbue;
108 int32_t olbue;
109 int32_t slbue;
110
111 /* State used by function dynamic_pitch_tracking */
112 float s[60];
113 int32_t p[2][60];
114 int32_t ipoint;
115 float alphax;
116
117 /* State used by function lpc10_pack */
118 int32_t isync;
119 } lpc10_encode_state_t;
120
121 /*!
122 LPC10 codec decoder state descriptor. This defines the state of
123 a single working instance of the LPC10 decoder.
124 */
125 typedef struct
126 {
127 int error_correction;
128
129 /* State used by function decode */
130 int32_t iptold; /* Initial value 60 */
131 int first; /* Initial value TRUE */
132 int32_t ivp2h;
133 int32_t iovoic;
134 int32_t iavgp; /* Initial value 60 */
135 int32_t erate;
136 int32_t drc[10][3];
137 int32_t dpit[3];
138 int32_t drms[3];
139
140 /* State used by function synths */
141 float buf[LPC10_SAMPLES_PER_FRAME*2];
142 int32_t buflen; /* Initial value LPC10_SAMPLES_PER_FRAME */
143
144 /* State used by function pitsyn */
145 int32_t ivoico; /* No initial value necessary as long as first_pitsyn is initially TRUE_ */
146 int32_t ipito; /* No initial value necessary as long as first_pitsyn is initially TRUE_ */
147 float rmso; /* Initial value 1.0f */
148 float rco[10]; /* No initial value necessary as long as first_pitsyn is initially TRUE_ */
149 int32_t jsamp; /* Nno initial value necessary as long as first_pitsyn is initially TRUE_ */
150 int first_pitsyn; /* Initial value TRUE */
151
152 /* State used by function bsynz */
153 int32_t ipo;
154 float exc[166];
155 float exc2[166];
156 float lpi[3];
157 float hpi[3];
158 float rmso_bsynz;
159
160 /* State used by function random */
161 int32_t j;
162 int32_t k;
163 int16_t y[5];
164
165 /* State used by function deemp */
166 float dei[2];
167 float deo[3];
168 } lpc10_decode_state_t;
169
170 #ifdef __cplusplus
171 extern "C" {
172 #endif
173
174 /*! Initialise an LPC10e encode context.
175 \param s The LPC10e context
176 \param error_correction ???
177 \return A pointer to the LPC10e context, or NULL for error. */
178 lpc10_encode_state_t *lpc10_encode_init(lpc10_encode_state_t *s, int error_correction);
179
180 int lpc10_encode_release(lpc10_encode_state_t *s);
181
182 /*! Encode a buffer of linear PCM data to LPC10e.
183 \param s The LPC10e context.
184 \param ima_data The LPC10e data produced.
185 \param amp The audio sample buffer.
186 \param len The number of samples in the buffer.
187 \return The number of bytes of LPC10e data produced. */
188 int lpc10_encode(lpc10_encode_state_t *s, uint8_t code[], const int16_t amp[], int quant);
189
190 /*! Initialise an LPC10e decode context.
191 \param s The LPC10e context
192 \param error_correction ???
193 \return A pointer to the LPC10e context, or NULL for error. */
194 lpc10_decode_state_t *lpc10_decode_init(lpc10_decode_state_t *st, int error_correction);
195
196 int lpc10_decode_release(lpc10_decode_state_t *s);
197
198 /*! Decode a buffer of LPC10e data to linear PCM.
199 \param s The LPC10e context.
200 \param amp The audio sample buffer.
201 \param code The LPC10e data.
202 \param quant The number of frames of LPC10e data to be decoded.
203 \return The number of samples returned. */
204 int lpc10_decode(lpc10_decode_state_t *s, int16_t amp[], const uint8_t code[], int quant);
205
206
207 #ifdef __cplusplus
208 }
209 #endif
210
211 #endif
212 /*- End of include ---------------------------------------------------------*/

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.