diff options
Diffstat (limited to 'src/dump.c')
| -rw-r--r-- | src/dump.c | 669 |
1 files changed, 669 insertions, 0 deletions
diff --git a/src/dump.c b/src/dump.c new file mode 100644 index 0000000..ff1977d --- /dev/null +++ b/src/dump.c @@ -0,0 +1,669 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: dump.c + AUTHOR......: David Rowe + DATE CREATED: 25/8/09 + + Routines to dump data to text files for Octave analysis. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "defines.h" +#include "comp.h" +#include "dump.h" +#include <assert.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <math.h> + +#ifdef DUMP +static int dumpon = 0; + +static FILE *fsn = NULL; +static FILE *fsw = NULL; +static FILE *few = NULL; +static FILE *fsw_ = NULL; +static FILE *fsoftdec = NULL; +static FILE *fmodel = NULL; +static FILE *fqmodel = NULL; +static FILE *fpwb = NULL; +static FILE *fpw = NULL; +static FILE *frw = NULL; +static FILE *flsp = NULL; +static FILE *fweights = NULL; +static FILE *flsp_ = NULL; +static FILE *fmel = NULL; +static FILE *fmel_indexes = NULL; +static FILE *fphase = NULL; +static FILE *fphase_ = NULL; +static FILE *ffw = NULL; +static FILE *fe = NULL; +static FILE *fsq = NULL; +static FILE *fdec = NULL; +static FILE *fsnr = NULL; +static FILE *flpcsnr = NULL; +static FILE *fak = NULL; +static FILE *fak_ = NULL; +static FILE *fbg = NULL; +static FILE *fE = NULL; +static FILE *frk = NULL; +static FILE *fhephase = NULL; + +static char prefix[MAX_STR]; + +void dump_on(char p[]) { + dumpon = 1; + strcpy(prefix, p); +} + +void dump_off(){ + if (fsn != NULL) + fclose(fsn); + if (fsw != NULL) + fclose(fsw); + if (fsw_ != NULL) + fclose(fsw_); + if (few != NULL) + fclose(few); + if (fmodel != NULL) + fclose(fmodel); + if (fsoftdec != NULL) + fclose(fsoftdec); + if (fqmodel != NULL) + fclose(fqmodel); + if (fpwb != NULL) + fclose(fpwb); + if (fpw != NULL) + fclose(fpw); + if (frw != NULL) + fclose(frw); + if (flsp != NULL) + fclose(flsp); + if (fweights != NULL) + fclose(fweights); + if (flsp_ != NULL) + fclose(flsp_); + if (fmel != NULL) + fclose(fmel); + if (fmel_indexes != NULL) + fclose(fmel_indexes); + if (fphase != NULL) + fclose(fphase); + if (fphase_ != NULL) + fclose(fphase_); + if (ffw != NULL) + fclose(ffw); + if (fe != NULL) + fclose(fe); + if (fsq != NULL) + fclose(fsq); + if (fdec != NULL) + fclose(fdec); + if (fsnr != NULL) + fclose(fsnr); + if (flpcsnr != NULL) + fclose(flpcsnr); + if (fak != NULL) + fclose(fak); + if (fak_ != NULL) + fclose(fak_); + if (fbg != NULL) + fclose(fbg); + if (fE != NULL) + fclose(fE); + if (frk != NULL) + fclose(frk); + if (fhephase != NULL) + fclose(fhephase); +} + +void dump_Sn(int m_pitch, float Sn[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (fsn == NULL) { + sprintf(s,"%s_sn.txt", prefix); + fsn = fopen(s, "wt"); + assert(fsn != NULL); + } + + /* split across two lines to avoid max line length problems */ + /* reconstruct in Octave */ + + for(i=0; i<m_pitch/2; i++) + fprintf(fsn,"%f\t",Sn[i]); + fprintf(fsn,"\n"); + for(i=m_pitch/2; i<m_pitch; i++) + fprintf(fsn,"%f\t",Sn[i]); + fprintf(fsn,"\n"); +} + +void dump_Sw(COMP Sw[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (fsw == NULL) { + sprintf(s,"%s_sw.txt", prefix); + fsw = fopen(s, "wt"); + assert(fsw != NULL); + } + + for(i=0; i<FFT_ENC/2; i++) + fprintf(fsw,"%f\t", + 10.0*log10(Sw[i].real*Sw[i].real + Sw[i].imag*Sw[i].imag)); + fprintf(fsw,"\n"); +} + +void dump_Sw_(COMP Sw_[]) { + int i; + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (fsw_ == NULL) { + sprintf(s,"%s_sw_.txt", prefix); + fsw_ = fopen(s, "wt"); + assert(fsw_ != NULL); + } + + for(i=0; i<FFT_ENC/2; i++) + fprintf(fsw_,"%f\t", + 10.0*log10(Sw_[i].real*Sw_[i].real + Sw_[i].imag*Sw_[i].imag)); + fprintf(fsw_,"\n"); +} + +void dump_Ew(COMP Ew[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (few == NULL) { + sprintf(s,"%s_ew.txt", prefix); + few = fopen(s, "wt"); + assert(few != NULL); + } + + for(i=0; i<FFT_ENC/2; i++) + fprintf(few,"%f\t", + 10.0*log10(Ew[i].real*Ew[i].real + Ew[i].imag*Ew[i].imag)); + fprintf(few,"\n"); +} + +void dump_softdec(float *softdec, int n) +{ + int i; + char s[MAX_STR + 12]; + + if (!dumpon) return; + + if (fsoftdec == NULL) { + sprintf(s,"%s_softdec.txt", prefix); + fsoftdec = fopen(s, "wt"); + assert(fsoftdec != NULL); + } + + for(i=0; i<n; i++) + fprintf(fsoftdec,"%f\t", softdec[i]); + fprintf(fsoftdec,"\n"); +} + +void dump_model(MODEL *model) { + int l; + char s[MAX_STR + 10]; + char line[MAX_STR*10]; + + if (!dumpon) return; + + if (fmodel == NULL) { + sprintf(s,"%s_model.txt", prefix); + fmodel = fopen(s, "wt"); + assert(fmodel != NULL); + } + + sprintf(line,"%12f %12d ", model->Wo, model->L); + for(l=1; l<=model->L; l++) { + sprintf(s,"%12f ",model->A[l]); + strcat(line, s); + assert(strlen(line) < MAX_STR*10); + } + for(l=model->L+1; l<=MAX_AMP; l++) { + sprintf(s,"%12f ", 0.0); + strcat(line,s); + assert(strlen(line) < MAX_STR*10); + } + + sprintf(s,"%d\n",model->voiced); + strcat(line,s); + fprintf(fmodel,"%s",line); +} + +void dump_quantised_model(MODEL *model) { + int l; + char s[MAX_STR + 11]; + char line[4096]; + + if (!dumpon) return; + + if (fqmodel == NULL) { + sprintf(s,"%s_qmodel.txt", prefix); + fqmodel = fopen(s, "wt"); + assert(fqmodel != NULL); + } + + sprintf(line,"%12f %12d ", model->Wo, model->L); + for(l=1; l<=model->L; l++) { + sprintf(s,"%12f ",model->A[l]); + strcat(line, s); + assert(strlen(line) < 4096); + } + for(l=model->L+1; l<=MAX_AMP; l++) { + sprintf(s,"%12f ", 0.0); + strcat(line, s); + assert(strlen(line) < 4096); + } + + sprintf(s,"%d\n",model->voiced); + strcat(line, s); + fprintf(fqmodel, "%s", line); +} + +void dump_phase(float phase[], int L) { + int l; + char s[MAX_STR + 10]; + + if (!dumpon) return; + + if (fphase == NULL) { + sprintf(s,"%s_phase.txt", prefix); + fphase = fopen(s, "wt"); + assert(fphase != NULL); + } + + for(l=1; l<=L; l++) + fprintf(fphase,"%f\t",phase[l]); + for(l=L+1; l<=MAX_AMP; l++) + fprintf(fphase,"%f\t",0.0); + fprintf(fphase,"\n"); +} + +void dump_phase_(float phase_[], int L) { + int l; + char s[MAX_STR + 11]; + + if (!dumpon) return; + + if (fphase_ == NULL) { + sprintf(s,"%s_phase_.txt", prefix); + fphase_ = fopen(s, "wt"); + assert(fphase_ != NULL); + } + + for(l=1; l<=L; l++) + fprintf(fphase_,"%f\t",phase_[l]); + for(l=L+1; l<MAX_AMP; l++) + fprintf(fphase_,"%f\t",0.0); + fprintf(fphase_,"\n"); +} + + +void dump_hephase(int ind[], int dim) { + int m; + char s[MAX_STR + 12]; + + if (!dumpon) return; + + if (fhephase == NULL) { + sprintf(s,"%s_hephase.txt", prefix); + fhephase = fopen(s, "wt"); + assert(fhephase != NULL); + } + + for(m=0; m<dim; m++) + fprintf(fhephase,"%d\t",ind[m]); + fprintf(fhephase,"\n"); +} + + +void dump_snr(float snr) { + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (fsnr == NULL) { + sprintf(s,"%s_snr.txt", prefix); + fsnr = fopen(s, "wt"); + assert(fsnr != NULL); + } + + fprintf(fsnr,"%f\n",snr); +} + +void dump_lpc_snr(float snr) { + char s[MAX_STR + 12]; + + if (!dumpon) return; + + if (flpcsnr == NULL) { + sprintf(s,"%s_lpc_snr.txt", prefix); + flpcsnr = fopen(s, "wt"); + assert(flpcsnr != NULL); + } + + fprintf(flpcsnr,"%f\n",snr); +} + +/* Pw "before" post filter so we can plot before and after */ + +void dump_Pwb(float Pwb[]) { + int i; + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (fpwb == NULL) { + sprintf(s,"%s_pwb.txt", prefix); + fpwb = fopen(s, "wt"); + assert(fpwb != NULL); + } + + for(i=0; i<FFT_ENC/2; i++) + fprintf(fpwb,"%f\t",Pwb[i]); + fprintf(fpwb,"\n"); +} + +void dump_Pw(float Pw[]) { + int i; + char s[MAX_STR +7]; + + if (!dumpon) return; + + if (fpw == NULL) { + sprintf(s,"%s_pw.txt", prefix); + fpw = fopen(s, "wt"); + assert(fpw != NULL); + } + + for(i=0; i<FFT_ENC/2; i++) + fprintf(fpw,"%f\t",Pw[i]); + fprintf(fpw,"\n"); +} + +void dump_Rw(float Rw[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (frw == NULL) { + sprintf(s,"%s_rw.txt", prefix); + frw = fopen(s, "wt"); + assert(frw != NULL); + } + + for(i=0; i<FFT_ENC/2; i++) + fprintf(frw,"%f\t",Rw[i]); + fprintf(frw,"\n"); +} + +void dump_weights(float w[], int order) { + int i; + char s[MAX_STR + 12]; + + if (!dumpon) return; + + if (fweights == NULL) { + sprintf(s,"%s_weights.txt", prefix); + fweights = fopen(s, "wt"); + assert(fweights != NULL); + } + + for(i=0; i<order; i++) + fprintf(fweights,"%f\t", w[i]); + fprintf(fweights,"\n"); +} + +void dump_lsp(float lsp[]) { + int i; + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (flsp == NULL) { + sprintf(s,"%s_lsp.txt", prefix); + flsp = fopen(s, "wt"); + assert(flsp != NULL); + } + + for(i=0; i<10; i++) + fprintf(flsp,"%f\t",lsp[i]); + fprintf(flsp,"\n"); +} + +void dump_lsp_(float lsp_[]) { + int i; + char s[MAX_STR + 9]; + + if (!dumpon) return; + + if (flsp_ == NULL) { + sprintf(s,"%s_lsp_.txt", prefix); + flsp_ = fopen(s, "wt"); + assert(flsp_ != NULL); + } + + for(i=0; i<10; i++) + fprintf(flsp_,"%f\t",lsp_[i]); + fprintf(flsp_,"\n"); +} + +void dump_mel(float mel[], int order) { + int i; + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (fmel == NULL) { + sprintf(s,"%s_mel.txt", prefix); + fmel = fopen(s, "wt"); + assert(fmel != NULL); + } + + for(i=0; i<order; i++) + fprintf(fmel,"%f\t",mel[i]); + fprintf(fmel,"\n"); +} + +void dump_mel_indexes(int mel_indexes[], int order) { + int i; + char s[MAX_STR + 16]; + + if (!dumpon) return; + + if (fmel_indexes == NULL) { + sprintf(s,"%s_mel_indexes.txt", prefix); + fmel_indexes = fopen(s, "wt"); + assert(fmel_indexes != NULL); + } + + for(i=0; i<order; i++) + fprintf(fmel_indexes,"%d\t",mel_indexes[i]); + fprintf(fmel_indexes,"\n"); +} + +void dump_ak(float ak[], int order) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (fak == NULL) { + sprintf(s,"%s_ak.txt", prefix); + fak = fopen(s, "wt"); + assert(fak != NULL); + } + + for(i=0; i<=order; i++) + fprintf(fak,"%f\t",ak[i]); + fprintf(fak,"\n"); +} + +void dump_ak_(float ak_[], int order) { + int i; + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (fak_ == NULL) { + sprintf(s,"%s_ak_.txt", prefix); + fak_ = fopen(s, "wt"); + assert(fak_ != NULL); + } + + for(i=0; i<=order; i++) + fprintf(fak_,"%f\t",ak_[i]); + fprintf(fak_,"\n"); +} + +void dump_Fw(COMP Fw[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (ffw == NULL) { + sprintf(s,"%s_fw.txt", prefix); + ffw = fopen(s, "wt"); + assert(ffw != NULL); + } + + for(i=0; i<256; i++) + fprintf(ffw,"%f\t",Fw[i].real); + fprintf(ffw,"\n"); +} + +void dump_e(float e_hz[]) { + int i; + char s[MAX_STR + 6]; + + if (!dumpon) return; + + if (fe == NULL) { + sprintf(s,"%s_e.txt", prefix); + fe = fopen(s, "wt"); + assert(fe != NULL); + } + + for(i=0; i<500/2; i++) + fprintf(fe,"%f\t",e_hz[i]); + fprintf(fe,"\n"); + for(i=500/2; i<500; i++) + fprintf(fe,"%f\t",e_hz[i]); + fprintf(fe,"\n"); +} + +void dump_sq(int m_pitch, float sq[]) { + int i; + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (fsq == NULL) { + sprintf(s,"%s_sq.txt", prefix); + fsq = fopen(s, "wt"); + assert(fsq != NULL); + } + + for(i=0; i<m_pitch/2; i++) + fprintf(fsq,"%f\t",sq[i]); + fprintf(fsq,"\n"); + for(i=m_pitch/2; i<m_pitch; i++) + fprintf(fsq,"%f\t",sq[i]); + fprintf(fsq,"\n"); +} + +void dump_dec(COMP Fw[]) { + int i; + char s[MAX_STR + 8]; + + if (!dumpon) return; + + if (fdec == NULL) { + sprintf(s,"%s_dec.txt", prefix); + fdec = fopen(s, "wt"); + assert(fdec != NULL); + } + + for(i=0; i<320/5; i++) + fprintf(fdec,"%f\t",Fw[i].real); + fprintf(fdec,"\n"); +} + +void dump_bg(float e, float bg_est, float percent_uv) { + char s[MAX_STR + 7]; + + if (!dumpon) return; + + if (fbg == NULL) { + sprintf(s,"%s_bg.txt", prefix); + fbg = fopen(s, "wt"); + assert(fbg != NULL); + } + + fprintf(fbg,"%f\t%f\t%f\n", e, bg_est, percent_uv); +} + +void dump_E(float E) { + char s[MAX_STR + 6]; + + if (!dumpon) return; + + if (fE == NULL) { + sprintf(s,"%s_E.txt", prefix); + fE = fopen(s, "wt"); + assert(fE != NULL); + } + + fprintf(fE,"%f\n", 10.0*log10(E)); +} + +#if 0 +void dump_Rk(float Rk[]) { + int i; + char s[MAX_STR]; + + if (!dumpon) return; + + if (frk == NULL) { + sprintf(s,"%s_rk.txt", prefix); + frk = fopen(s, "wt"); + assert(frk != NULL); + } + + for(i=0; i<P_MAX; i++) + fprintf(frk,"%f\t",Rk[i]); + fprintf(frk,"\n"); +} +#endif + +#endif |
