From 4816552845ceeb179f69908845cd7d83944caead Mon Sep 17 00:00:00 2001 From: drowe67 Date: Thu, 19 Aug 2010 00:15:12 +0000 Subject: [PATCH] testing MBE voicing estimator, sounds about the 1st order phase model, better for b0067, but still make a few errors, but much faster. git-svn-id: https://svn.code.sf.net/p/freetel/code@174 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2/TODO.txt | 12 ++++++++- codec2/octave/plphase.m | 17 ++++++++++--- codec2/raw/b0067.raw | Bin 0 -> 58482 bytes codec2/src/Makefile | 2 +- codec2/src/nlp.c | 18 +++++++++----- codec2/src/nlp.h | 1 + codec2/src/sinedec.c | 47 +++++++++++++++++++++++++++++++++-- codec2/unittest/tcontphase.c | 2 +- 8 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 codec2/raw/b0067.raw diff --git a/codec2/TODO.txt b/codec2/TODO.txt index dac0925d..fd5e2223 100644 --- a/codec2/TODO.txt +++ b/codec2/TODO.txt @@ -1,6 +1,16 @@ TODO for codec2 --------------- +Mysteries +--------- + +[ ] buzzy sound in bg noise ofr b0067 +[ ] LSP quantiser has problems for b0067 +[ ] synthetic sound for hts2a and to bg nouse on _uq models + + breakdown in sinusoidal model for noise + + MELP does better + + perhaps synth UV using white noise might work better + 29 July 2010, current status: - g729a is a bit better, but c2 is not put to shame - c2 betters GSM in some cases @@ -233,4 +243,4 @@ So todo: - \ No newline at end of file + diff --git a/codec2/octave/plphase.m b/codec2/octave/plphase.m index 82cf0f26..9e611856 100644 --- a/codec2/octave/plphase.m +++ b/codec2/octave/plphase.m @@ -15,6 +15,11 @@ function plphase(samname, f) model_name = strcat(samname,"_model.txt"); model = load(model_name); + sw__name = strcat(samname,"_sw_.txt"); + if (file_in_path(".",sw__name)) + Sw_ = load(sw__name); + endif + pw_name = strcat(samname,"_pw.txt"); if (file_in_path(".",pw_name)) Pw = load(pw_name); @@ -49,7 +54,7 @@ function plphase(samname, f) k = ' '; do figure(1); - clg; + clf; s = [ Sn(2*f-1,:) Sn(2*f,:) ]; plot(s); grid; @@ -63,12 +68,16 @@ function plphase(samname, f) Wo = model(f,1); L = model(f,2); Am = model(f,3:(L+2)); - plot((1:L)*Wo*4000/pi, 20*log10(Am),";Am;"); + plot((1:L)*Wo*4000/pi, 20*log10(Am),"r;Am;"); axis([1 4000 -10 80]); hold on; plot((0:255)*4000/256, Sw(f,:),";Sw;"); grid; + if (file_in_path(".",sw__name)) + plot((0:255)*4000/256, Sw_(f,:),"g;Sw_;"); + endif + if (file_in_path(".",pw_name)) plot((0:255)*4000/256, 10*log10(Pw(f,:)),";Pw;"); endif @@ -87,7 +96,7 @@ function plphase(samname, f) noise = (orig-synth) * (orig-synth)'; snr_phase = 10*log10(signal/noise); - phase_err_label = sprintf(";phase_err SNR %4.2f dB;",snr_phase); + phase_err_label = sprintf("g;phase_err SNR %4.2f dB;",snr_phase); plot((1:L)*Wo*4000/pi, 20*log10(orig-synth), phase_err_label); endif @@ -103,7 +112,7 @@ function plphase(samname, f) axis; if (file_in_path(".", phase_name_)) hold on; - plot((1:L)*Wo*4000/pi, phase_(f,1:L)*180/pi, ";phase_;"); + plot((1:L)*Wo*4000/pi, phase_(f,1:L)*180/pi, "g;phase_;"); grid hold off; endif diff --git a/codec2/raw/b0067.raw b/codec2/raw/b0067.raw new file mode 100644 index 0000000000000000000000000000000000000000..3aea9cdaaa2d6c9f09669e866350585929f6fd18 GIT binary patch literal 58482 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�bkW`Z&<9pReiZ)T3JDHa8c*NYlTw_ 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 R)J9Vcm`%JaHoNsa{eMo!x*Grh literal 0 HcmV?d00001 diff --git a/codec2/src/Makefile b/codec2/src/Makefile index 21643058..5b888cef 100644 --- a/codec2/src/Makefile +++ b/codec2/src/Makefile @@ -4,7 +4,7 @@ CFLAGS=-g -Wall -I. -I../src -Wall -g -DFLOATING_POINT -DVAR_ARRAYS SINENC_OBJ = sinenc.o globals.o initenc.o four1.o refine.o spec.o dump.o SINEDEC_OBJ = sinedec.o globals.o initenc.o initdec.o four1.o synth.o \ quantise.o lpc.o dump.o refine.o lsp.o phase.o postfilter.o \ - interp.o + interp.o nlp.o all: sinenc sinedec diff --git a/codec2/src/nlp.c b/codec2/src/nlp.c index d1077894..c7a3ed21 100644 --- a/codec2/src/nlp.c +++ b/codec2/src/nlp.c @@ -106,7 +106,6 @@ float nlp_fir[] = { -1.0818124e-03 }; -float test_candidate_mbe(COMP Sw[], float f0); float post_process_mbe(COMP Fw[], int pmin, int pmax, float gmax); float post_process_sub_multiples(COMP Fw[], int pmin, int pmax, float gmax, int gmax_bin, @@ -330,6 +329,7 @@ float post_process_mbe(COMP Fw[], int pmin, int pmax, float gmax) int bin; float f0_min, f0_max; float f0_start, f0_end; + COMP Sw_[FFT_ENC]; f0_min = (float)SAMPLE_RATE/pmax; f0_max = (float)SAMPLE_RATE/pmin; @@ -357,7 +357,7 @@ float post_process_mbe(COMP Fw[], int pmin, int pmax, float gmax) if (f0_end > f0_max) f0_end = f0_max; for(f0=f0_start; f0<=f0_end; f0+= 2.5) { - e = test_candidate_mbe(Sw, f0); + e = test_candidate_mbe(Sw, f0, Sw_); bin = floor(f0); assert((bin > 0) && (bin < F0_MAX)); e_hz[bin] = e; if (e < e_min) { @@ -387,11 +387,12 @@ float post_process_mbe(COMP Fw[], int pmin, int pmax, float gmax) float test_candidate_mbe( COMP Sw[], - float f0 + float f0, + COMP Sw_[] /* DFT of all voiced synthesised signal for f0 */ + /* useful for debugging/dump file */ ) { - COMP Sw_[FFT_ENC]; /* DFT of all voiced synthesised signal */ - int l,al,bl,m; /* loop variables */ + int i,l,al,bl,m; /* loop variables */ COMP Am; /* amplitude sample for this band */ int offset; /* centers Hw[] about current harmonic */ float den; /* denominator of Am expression */ @@ -399,6 +400,11 @@ float test_candidate_mbe( float Wo; /* current "test" fundamental freq. */ int L; + for(i=0; i f0_max) f0_end = f0_max; + e_min = 1E32; + + for(f0=f0_start; f0<=f0_end; f0+= 1) { + e = test_candidate_mbe(Sw, f0, Sw_); + if (e < e_min) { + e_min = e; + best_f0 = f0; + } + } + noise = test_candidate_mbe(Sw,best_f0, Sw_); + snr = sig/noise; + dump_Sw_(Sw_); + } + + phase_model_first_order(ak_phase, H, &n_min, &min_Am, &voiced); + if (snr > 4.0) + voiced = 1; + else + voiced = 0; + dump_snr(snr); if (phase_model == 0) { @@ -278,7 +321,7 @@ int main(int argc, char *argv[]) //dump_phase_(&model.phi[0]); } - /* optional LPC model amplitudes */ + /* optional LPC model amplitudes */ if (lpc_model) { snr = lpc_model_amplitudes(Sn, &model, order, lsp, ak); diff --git a/codec2/unittest/tcontphase.c b/codec2/unittest/tcontphase.c index 4c6c4aa2..8fefab93 100644 --- a/codec2/unittest/tcontphase.c +++ b/codec2/unittest/tcontphase.c @@ -170,7 +170,7 @@ char *argv[]; synthesise_continuous_phase(Pn, &model, Sn_, 1, &Wo_prev, phi_prev); #else phase_synth_zero_order(5.0, H, &Wo_prev, &ex_phase); - synthesise_mixed(Pn,&model,Sn_); + synthesise_mixed(Pn,&model,Sn_,1); #endif for(i=0; i