diff options
| author | erdgeist@erdgeist.org <erdgeist@bauklotz.fritz.box> | 2019-07-04 23:26:09 +0200 |
|---|---|---|
| committer | erdgeist@erdgeist.org <erdgeist@bauklotz.fritz.box> | 2019-07-04 23:26:09 +0200 |
| commit | f02dfce6e6c34b3d8a7b8a0e784b506178e331fa (patch) | |
| tree | 45556e6104242d4702689760433d7321ae74ec17 /codec2_internal.h | |
stripdown of version 0.9
Diffstat (limited to 'codec2_internal.h')
| -rw-r--r-- | codec2_internal.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/codec2_internal.h b/codec2_internal.h new file mode 100644 index 0000000..498a6c4 --- /dev/null +++ b/codec2_internal.h | |||
| @@ -0,0 +1,106 @@ | |||
| 1 | /*---------------------------------------------------------------------------*\ | ||
| 2 | |||
| 3 | FILE........: codec2_internal.h | ||
| 4 | AUTHOR......: David Rowe | ||
| 5 | DATE CREATED: April 16 2012 | ||
| 6 | |||
| 7 | Header file for Codec2 internal states, exposed via this header | ||
| 8 | file to assist in testing. | ||
| 9 | |||
| 10 | \*---------------------------------------------------------------------------*/ | ||
| 11 | |||
| 12 | /* | ||
| 13 | Copyright (C) 2012 David Rowe | ||
| 14 | |||
| 15 | All rights reserved. | ||
| 16 | |||
| 17 | This program is free software; you can redistribute it and/or modify | ||
| 18 | it under the terms of the GNU Lesser General Public License version 2.1, as | ||
| 19 | published by the Free Software Foundation. This program is | ||
| 20 | distributed in the hope that it will be useful, but WITHOUT ANY | ||
| 21 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 22 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public | ||
| 23 | License for more details. | ||
| 24 | |||
| 25 | You should have received a copy of the GNU Lesser General Public License | ||
| 26 | along with this program; if not, see <http://www.gnu.org/licenses/>. | ||
| 27 | */ | ||
| 28 | |||
| 29 | #ifndef __CODEC2_INTERNAL__ | ||
| 30 | #define __CODEC2_INTERNAL__ | ||
| 31 | |||
| 32 | #include "codec2_fft.h" | ||
| 33 | #include "newamp1.h" | ||
| 34 | #include "newamp2.h" | ||
| 35 | |||
| 36 | struct CODEC2 { | ||
| 37 | int mode; | ||
| 38 | C2CONST c2const; | ||
| 39 | int Fs; | ||
| 40 | int n_samp; | ||
| 41 | int m_pitch; | ||
| 42 | codec2_fft_cfg fft_fwd_cfg; /* forward FFT config */ | ||
| 43 | codec2_fftr_cfg fftr_fwd_cfg; /* forward real FFT config */ | ||
| 44 | float *w; /* [m_pitch] time domain hamming window */ | ||
| 45 | COMP W[FFT_ENC]; /* DFT of w[] */ | ||
| 46 | float *Pn; /* [2*n_samp] trapezoidal synthesis window */ | ||
| 47 | float *bpf_buf; /* buffer for band pass filter */ | ||
| 48 | float *Sn; /* [m_pitch] input speech */ | ||
| 49 | float hpf_states[2]; /* high pass filter states */ | ||
| 50 | void *nlp; /* pitch predictor states */ | ||
| 51 | int gray; /* non-zero for gray encoding */ | ||
| 52 | |||
| 53 | codec2_fftr_cfg fftr_inv_cfg; /* inverse FFT config */ | ||
| 54 | float *Sn_; /* [2*n_samp] synthesised output speech */ | ||
| 55 | float ex_phase; /* excitation model phase track */ | ||
| 56 | float bg_est; /* background noise estimate for post filter */ | ||
| 57 | float prev_f0_enc; /* previous frame's f0 estimate */ | ||
| 58 | MODEL prev_model_dec; /* previous frame's model parameters */ | ||
| 59 | float prev_lsps_dec[LPC_ORD]; /* previous frame's LSPs */ | ||
| 60 | float prev_e_dec; /* previous frame's LPC energy */ | ||
| 61 | |||
| 62 | int lpc_pf; /* LPC post filter on */ | ||
| 63 | int bass_boost; /* LPC post filter bass boost */ | ||
| 64 | float beta; /* LPC post filter parameters */ | ||
| 65 | float gamma; | ||
| 66 | |||
| 67 | float xq_enc[2]; /* joint pitch and energy VQ states */ | ||
| 68 | float xq_dec[2]; | ||
| 69 | |||
| 70 | int smoothing; /* enable smoothing for channels with errors */ | ||
| 71 | float *softdec; /* optional soft decn bits from demod */ | ||
| 72 | |||
| 73 | /* newamp1 states */ | ||
| 74 | |||
| 75 | float rate_K_sample_freqs_kHz[NEWAMP1_K]; | ||
| 76 | float prev_rate_K_vec_[NEWAMP1_K]; | ||
| 77 | float Wo_left; | ||
| 78 | int voicing_left; | ||
| 79 | codec2_fft_cfg phase_fft_fwd_cfg; | ||
| 80 | codec2_fft_cfg phase_fft_inv_cfg; | ||
| 81 | float se; /* running sum of squared error */ | ||
| 82 | unsigned int nse; /* number of terms in sum */ | ||
| 83 | float *user_rate_K_vec_no_mean_; /* optional, user supplied vector for quantisation experiments */ | ||
| 84 | int post_filter_en; | ||
| 85 | |||
| 86 | /*newamp2 states (also uses newamp1 states )*/ | ||
| 87 | float energy_prev; | ||
| 88 | float n2_rate_K_sample_freqs_kHz[NEWAMP2_K]; | ||
| 89 | float n2_prev_rate_K_vec_[NEWAMP2_K]; | ||
| 90 | float n2_pwb_rate_K_sample_freqs_kHz[NEWAMP2_16K_K]; | ||
| 91 | float n2_pwb_prev_rate_K_vec_[NEWAMP2_16K_K]; | ||
| 92 | |||
| 93 | /* used to dump features for deep learning experiments */ | ||
| 94 | FILE *fmlfeat; | ||
| 95 | |||
| 96 | /* encode/decode function pointers for the selected mode */ | ||
| 97 | void (*encode)(struct CODEC2 *c2, unsigned char * bits, short speech[]); | ||
| 98 | void (*decode)(struct CODEC2 *c2, short speech[], const unsigned char * bits); | ||
| 99 | void (*decode_ber)(struct CODEC2 *c2, short speech[], const unsigned char * bits, float ber_est); | ||
| 100 | }; | ||
| 101 | |||
| 102 | // test and debug | ||
| 103 | void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); | ||
| 104 | void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, | ||
| 105 | COMP Aw[], float gain); | ||
| 106 | #endif | ||
