From 6a13d33b3261168b055c40a2dc4a37f0fe3c13c3 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Sat, 19 Nov 2011 22:47:17 +0000 Subject: [PATCH] tracking down some subtle differences between c2sim and enc/dec, making progres at 2500 bit/s git-svn-id: https://svn.code.sf.net/p/freetel/code@308 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/src/c2dec.c | 18 ++++----- codec2-dev/src/c2enc.c | 16 ++++---- codec2-dev/src/c2sim.c | 82 ++++++++++++++++++++++++++--------------- codec2-dev/src/codec2.c | 24 +++++++++++- 4 files changed, 93 insertions(+), 47 deletions(-) diff --git a/codec2-dev/src/c2dec.c b/codec2-dev/src/c2dec.c index bf3499e4..d8b4e3c3 100644 --- a/codec2-dev/src/c2dec.c +++ b/codec2-dev/src/c2dec.c @@ -44,30 +44,30 @@ int main(int argc, char *argv[]) unsigned char *bits; int nsam, nbit; - if (argc != 3) { - printf("usage: %s 2500|1400 InputBitFile OutputRawSpeechFile\n", argv[0]); - printf("e.g %s 1400 hts1a.c2 hts1a_1400.raw\n", argv[0]); + if (argc != 4) { + printf("usage: c2dec 2500|1400 InputBitFile OutputRawSpeechFile\n"); + printf("e.g c2dec 1400 hts1a.c2 hts1a_1400.raw\n"); exit(1); } if (strcmp(argv[1],"1400") == 0) - mode = CODEC2_MODE_2500; - else if (strcmp(argv[1],"2500") == 0) mode = CODEC2_MODE_1400; + else if (strcmp(argv[1],"2500") == 0) + mode = CODEC2_MODE_2500; else { fprintf(stderr, "Error in mode: %s. Must be 2500 or 1400\n", argv[1]); exit(1); } - + printf("mode: %d\n", mode); if (strcmp(argv[2], "-") == 0) fin = stdin; - else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { fprintf(stderr, "Error opening input bit file: %s: %s.\n", argv[1], strerror(errno)); exit(1); } if (strcmp(argv[3], "-") == 0) fout = stdout; - else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { fprintf(stderr, "Error opening output speech file: %s: %s.\n", argv[2], strerror(errno)); exit(1); @@ -77,7 +77,7 @@ int main(int argc, char *argv[]) nsam = codec2_samples_per_frame(codec2); nbit = codec2_bits_per_frame(codec2); buf = (short*)malloc(nsam*sizeof(short)); - bits = (char*)malloc(nbit*sizeof(char)); + bits = (unsigned char*)malloc(nbit*sizeof(char)); while(fread(bits, sizeof(char), nbit, fin) == nbit) { codec2_decode(codec2, buf, bits); diff --git a/codec2-dev/src/c2enc.c b/codec2-dev/src/c2enc.c index 5ca503f8..361f34c4 100644 --- a/codec2-dev/src/c2enc.c +++ b/codec2-dev/src/c2enc.c @@ -45,30 +45,30 @@ int main(int argc, char *argv[]) unsigned char *bits; int nsam, nbit; - if (argc != 3) { - printf("usage: %s 2500|1400 InputRawspeechFile OutputBitFile\n", argv[0]); - printf("e.g %s 1400 ../raw/hts1a.raw hts1a.c2\n", argv[0]); + if (argc != 4) { + printf("usage: c2enc 2500|1400 InputRawspeechFile OutputBitFile\n"); + printf("e.g c2enc 1400 ../raw/hts1a.raw hts1a.c2\n"); exit(1); } if (strcmp(argv[1],"1400") == 0) - mode = CODEC2_MODE_2500; - else if (strcmp(argv[1],"2500") == 0) mode = CODEC2_MODE_1400; + else if (strcmp(argv[1],"2500") == 0) + mode = CODEC2_MODE_2500; else { fprintf(stderr, "Error in mode: %s. Must be 2500 or 1400\n", argv[1]); exit(1); } if (strcmp(argv[2], "-") == 0) fin = stdin; - else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { fprintf(stderr, "Error opening input bit file: %s: %s.\n", argv[1], strerror(errno)); exit(1); } if (strcmp(argv[3], "-") == 0) fout = stdout; - else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { fprintf(stderr, "Error opening output speech file: %s: %s.\n", argv[2], strerror(errno)); exit(1); @@ -78,7 +78,7 @@ int main(int argc, char *argv[]) nsam = codec2_samples_per_frame(codec2); nbit = codec2_bits_per_frame(codec2); buf = (short*)malloc(nsam*sizeof(short)); - bits = (char*)malloc(nbit*sizeof(char)); + bits = (unsigned char*)malloc(nbit*sizeof(char)); while(fread(buf, sizeof(short), nsam, fin) == nsam) { codec2_encode(codec2, bits, buf); diff --git a/codec2-dev/src/c2sim.c b/codec2-dev/src/c2sim.c index a6eed4ae..b03f2029 100644 --- a/codec2-dev/src/c2sim.c +++ b/codec2-dev/src/c2sim.c @@ -103,6 +103,8 @@ int main(int argc, char *argv[]) float lsps__prev2[LPC_ORD]; float e, prev_e; float ak_interp[LPC_MAX]; + int lsp_indexes[LPC_MAX]; + float lsps_[LPC_ORD]; void *nlp_states; float hpf_states[2]; @@ -273,7 +275,7 @@ int main(int argc, char *argv[]) sum_snr = 0; while(fread(buf,sizeof(short),N,fin)) { frames++; - //printf("frame: %d", frames); + printf("frame: %d", frames); /* Read input speech */ @@ -340,8 +342,6 @@ int main(int argc, char *argv[]) /* optional LPC model amplitudes and LSP quantisation -----------------*/ if (lpc_model) { - int lsp_indexes[LPC_MAX]; - float lsps_[LPC_ORD]; e = speech_to_uq_lsps(lsps, ak, Sn, w, order); @@ -372,9 +372,9 @@ int main(int argc, char *argv[]) lsp_to_lpc(lsps_, ak, LPC_ORD); } - /* we need lsp__prev[] for lspdt. If no other - LSP quantisation is used we use original LSPs - as there is no quantised version available. */ + /* we need lsp__prev[] for lspdt and decimate. If no + other LSP quantisation is used we use original LSPs as + there is no quantised version available. */ if (!lsp && !lspd && !lspvq && !lspres) for(i=0; iSn, c2->w, LPC_ORD); encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); energy_index = encode_energy(e); + //for(i=0; iprev_lsps_[i]); + printf("ak: "); + for(i=0; iprev_model, &model, c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp); apply_lpc_correction(&model_interp); + printf("Wo: %1.5f L: %d prev_e: %3.2f\n", + model_interp.Wo, model_interp.L, c2->prev_energy ); + printf("ak_interp: "); + for(i=0; i