diff options
author | jmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800> | 2002-04-09 06:20:22 +0400 |
---|---|---|
committer | jmvalin <jmvalin@0101bb08-14d6-0310-b084-bc0e0c8e3800> | 2002-04-09 06:20:22 +0400 |
commit | 41eec2164e4e2edabfde0fe199fd03e2c1cb0b93 (patch) | |
tree | 8872623c8d185da69bb439fd6102b33595a09473 /libspeex | |
parent | 553b26da8eadbd2215d321dc4b4900885b59fcef (diff) |
Test encoder for SB-CELP
git-svn-id: http://svn.xiph.org/trunk/speex@3228 0101bb08-14d6-0310-b084-bc0e0c8e3800
Diffstat (limited to 'libspeex')
-rw-r--r-- | libspeex/testenc_sb.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/libspeex/testenc_sb.c b/libspeex/testenc_sb.c new file mode 100644 index 0000000..7b3437f --- /dev/null +++ b/libspeex/testenc_sb.c @@ -0,0 +1,77 @@ +#include "sb_celp.h" +#include <stdio.h> +#include <stdlib.h> + +#define FRAME_SIZE 320 +#include <math.h> +int main(int argc, char **argv) +{ + char *inFile, *outFile, *bitsFile; + FILE *fin, *fout, *fbits=NULL; + short in[FRAME_SIZE]; + float input[FRAME_SIZE], bak[FRAME_SIZE], bak2[FRAME_SIZE]; + char cbits[200]; + int nbBits; + int i; + SBEncState st; + FrameBits bits; + + for (i=0;i<FRAME_SIZE;i++) + bak2[i]=0; + sb_encoder_init(&st, &mp_sb_mode); + if (argc != 4 && argc != 3) + { + fprintf (stderr, "Usage: encode [in file] [out file] [bits file]\nargc = %d", argc); + exit(1); + } + inFile = argv[1]; + fin = fopen(inFile, "r"); + outFile = argv[2]; + fout = fopen(outFile, "w"); + if (argc==4) + { + bitsFile = argv[3]; + fbits = fopen(bitsFile, "w"); + } + frame_bits_init(&bits); + while (!feof(fin)) + { + fread(in, sizeof(short), FRAME_SIZE, fin); + for (i=0;i<FRAME_SIZE;i++) + bak[i]=input[i]=in[i]; + frame_bits_reset(&bits); + sb_encode(&st, input, &bits); + nbBits = frame_bits_write(&bits, cbits, 200); + printf ("Encoding frame in %d bits\n", nbBits*8); + if (argc==4) + fwrite(cbits, 1, nbBits, fbits); + { + float enoise=0, esig=0, snr; + for (i=0;i<FRAME_SIZE;i++) + { + enoise+=(bak2[i]-input[i])*(bak2[i]-input[i]); + esig += bak2[i]*bak2[i]; + } + snr = 10*log10((esig+1)/(enoise+1)); + printf ("real SNR = %f\n", snr); + } + frame_bits_rewind(&bits); + + frame_bits_reset(&bits); + for (i=0;i<FRAME_SIZE;i++) + { + if (input[i]>32000) + input[i]=32000; + else if (input[i]<-32000) + input[i]=-32000; + } + for (i=0;i<FRAME_SIZE;i++) + in[i]=input[i]; + for (i=0;i<FRAME_SIZE;i++) + bak2[i]=bak[i]; + fwrite(in, sizeof(short), FRAME_SIZE, fout); + } + + sb_encoder_destroy(&st); + return 1; +} |