direct or pred at init time

pull/2/head
David 2019-04-02 20:00:51 +10:30
parent 2792e0d7cd
commit 15d4c62b2e
6 changed files with 31 additions and 35 deletions

View File

@ -44,14 +44,6 @@
#undef NB_FEATURES
#include "lpcnet.h"
// Two sorts of VQs available
extern int pred_num_stages;
extern float pred_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES];
extern int pred_m[MAX_STAGES];
extern int direct_split_num_stages;
extern float direct_split_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES];
extern int direct_split_m[MAX_STAGES];
void lpcnet_dec(LPCNET_QUANT *q, LPCNetState *net, char *frame, short* pcm)
{
float in_features[NB_TOTAL_FEATURES];
@ -90,9 +82,6 @@ int main(int argc, char **argv) {
int logmag = 0;
int direct_split = 0;
dec = 3; pred = 0.9; mbest_survivors = 5; weight = 1.0/sqrt(NB_BANDS); pitch_bits = 6; num_stages = pred_num_stages;
m = pred_m; vq = pred_vq; logmag = 0;
/* quantiser options */
static struct option long_options[] = {
@ -132,7 +121,7 @@ int main(int argc, char **argv) {
fprintf(stderr, "pred = %f\n", pred);
break;
case 's':
direct_split = 1;
direct_split = 1; m = direct_split_m; vq = direct_split_vq; pred = 0.0; logmag = 1; weight = 1.0;
fprintf(stderr, "split VQ\n");
break;
case 'v':
@ -149,15 +138,13 @@ int main(int argc, char **argv) {
exit(1);
}
}
if (direct_split) {
m = direct_split_m; vq = direct_split_vq; pred = 0.0; logmag = 1; weight = 1.0;
} else {
}
LPCNET_QUANT *q = lpcnet_quant_create(num_stages, m, vq);
LPCNET_QUANT *q = lpcnet_quant_create(direct_split);
// this program allows us to tweak params via command line
q->weight = weight; q->pred = pred; q->mbest = mbest_survivors;
q->pitch_bits = pitch_bits; q->dec = dec; q->logmag = logmag;
q->num_stages = num_stages; q->m = m; q->vq = vq;
lpcnet_quant_compute_bits_per_frame(q);
fprintf(stderr, "dec: %d pred: %3.2f num_stages: %d mbest: %d bits_per_frame: %d frame: %2d ms bit_rate: %5.2f bits/s",

View File

@ -39,14 +39,6 @@
#include "lpcnet_dump.h"
#include "lpcnet_quant.h"
// Two sorts of VQs available
extern int pred_num_stages;
extern float pred_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES];
extern int pred_m[MAX_STAGES];
extern int direct_split_num_stages;
extern float direct_split_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES];
extern int direct_split_m[MAX_STAGES];
int main(int argc, char **argv) {
FILE *fin, *fout;
@ -61,6 +53,7 @@ int main(int argc, char **argv) {
int *m = pred_m;
float *vq = pred_vq;
int logmag = 0;
int direct_split = 0;
/* quantiser options */
@ -96,6 +89,7 @@ int main(int argc, char **argv) {
fprintf(stderr, "pred = %f\n", pred);
break;
case 's':
direct_split = 1;
m = direct_split_m; vq = direct_split_vq; pred = 0.0; logmag = 1; weight = 1.0;
fprintf(stderr, "split VQ\n");
break;
@ -112,9 +106,9 @@ int main(int argc, char **argv) {
}
LPCNET_DUMP *d = lpcnet_dump_create();
LPCNET_QUANT *q = lpcnet_quant_create(num_stages, m, vq);
LPCNET_QUANT *q = lpcnet_quant_create(direct_split);
q->weight = weight; q->pred = pred; q->mbest = mbest_survivors;
q->pitch_bits = pitch_bits; q->dec = dec;
q->pitch_bits = pitch_bits; q->dec = dec; q->m = m; q->vq = vq; q->num_stages = num_stages;
lpcnet_quant_compute_bits_per_frame(q);
fprintf(stderr, "dec: %d pred: %3.2f num_stages: %d mbest: %d bits_per_frame: %d frame: %2d ms bit_rate: %5.2f bits/s",

View File

@ -28,12 +28,19 @@ int lpcnet_verbose = 0;
#define DEFAULT_PITCH_BITS 6
#define DEFAULT_DEC 3
LPCNET_QUANT *lpcnet_quant_create(int num_stages, int m[], float vq[]) {
LPCNET_QUANT *lpcnet_quant_create(int direct_split) {
LPCNET_QUANT *q = (LPCNET_QUANT*)malloc(sizeof(LPCNET_QUANT));
if (q == NULL) return NULL;
q->weight = DEFAULT_WEIGHT; q->pred = DEFAULT_PRED;
q->mbest = DEFAULT_MBEST; q->pitch_bits = DEFAULT_PITCH_BITS; q->dec = DEFAULT_DEC;
q->num_stages = num_stages; q->vq = vq; q->m = m; q->logmag = 0;
if (direct_split) {
q->weight = 1.0; q->pred = 0.0;
q->mbest = DEFAULT_MBEST; q->pitch_bits = DEFAULT_PITCH_BITS; q->dec = DEFAULT_DEC;
q->num_stages = direct_split_num_stages; q->vq = direct_split_vq; q->m = direct_split_m; q->logmag = 1;
}
else {
q->weight = DEFAULT_WEIGHT; q->pred = DEFAULT_PRED;
q->mbest = DEFAULT_MBEST; q->pitch_bits = DEFAULT_PITCH_BITS; q->dec = DEFAULT_DEC;
q->num_stages = pred_num_stages; q->vq = pred_vq; q->m = pred_m; q->logmag = 0;
}
lpcnet_quant_compute_bits_per_frame(q);
int i,d;

View File

@ -32,7 +32,15 @@ typedef struct {
float features_lin[2][NB_FEATURES]; /* adjacent frames features for linear interpolation */
} LPCNET_QUANT;
LPCNET_QUANT *lpcnet_quant_create(int num_stages, int m[], float vq[]);
// Two sorts of VQs available
extern int pred_num_stages;
extern float pred_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES];
extern int pred_m[MAX_STAGES];
extern int direct_split_num_stages;
extern float direct_split_vq[MAX_STAGES*NB_BANDS*MAX_ENTRIES];
extern int direct_split_m[MAX_STAGES];
LPCNET_QUANT *lpcnet_quant_create(int direct_split);
void lpcnet_quant_destroy(LPCNET_QUANT *q);
void lpcnet_quant_compute_bits_per_frame(LPCNET_QUANT *q);

View File

@ -81,7 +81,7 @@ int main(int argc, char *argv[]) {
}
}
LPCNET_QUANT *q = lpcnet_quant_create(num_stages, pred_m, pred_vq);
LPCNET_QUANT *q = lpcnet_quant_create(0);
q->weight = weight; q->pred = pred;
q->pitch_bits = pitch_bits; q->dec = dec;
lpcnet_quant_compute_bits_per_frame(q);

View File

@ -76,7 +76,7 @@ int main(int argc, char *argv[]) {
}
}
LPCNET_QUANT *q = lpcnet_quant_create(num_stages, pred_m, pred_vq);
LPCNET_QUANT *q = lpcnet_quant_create(0);
q->weight = weight; q->pred = pred; q->mbest = mbest_survivors;
q->pitch_bits = pitch_bits; q->dec = dec;
lpcnet_quant_compute_bits_per_frame(q);