$D/lspjvm2.txt \
$D/lspjvm3.txt
-CODEBOOKSVQEXP= \
- $D/lspvqexp1.txt \
- $D/lspvqexp2.txt \
- $D/lspvqexp3.txt
+CODEBOOKSVQANSSI= \
+ $D/lspvqanssi1.txt \
+ $D/lspvqanssi2.txt \
+ $D/lspvqanssi3.txt
CODEBOOKSGE= \
$D/gecb.txt
codebookvq.$(OBJEXT): codebookvq.c
codebookjnd.$(OBJEXT): codebookjnd.c
codebookjvm.$(OBJEXT): codebookjvm.c
-codebookvqexp.$(OBJEXT): codebookvqexp.c
+codebookvqanssi.$(OBJEXT): codebookvqanssi.c
codebookge.$(OBJEXT): codebookge.c
codebook.lo: codebook.c
codebookjvm.c: generate_codebook $(CODEBOOKSJVM)
./generate_codebook lsp_cbjvm $(CODEBOOKSJVM) > codebookjvm.c
-codebookvqexp.c: generate_codebook $(CODEBOOKSVQEXP)
- ./generate_codebook lsp_cbvqexp $(CODEBOOKSVQEXP) > codebookvqexp.c
+codebookvqanssi.c: generate_codebook $(CODEBOOKSVQEXP)
+ ./generate_codebook lsp_cbvqanssi $(CODEBOOKSVQANSSI) > codebookvqanssi.c
codebookge.c: generate_codebook $(CODEBOOKSGE)
./generate_codebook ge_cb $(CODEBOOKSGE) > codebookge.c
clean-local:
- -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c codebookjvm.c codebookge.c codebookvqexp.c
+ -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c codebookjvm.c codebookge.c codebookvqanssi.c
lib_LTLIBRARIES = libcodec2.la
libcodec2_la_SOURCES = dump.c \
codebookvq.c \
codebookjnd.c \
codebookjvm.c \
-codebookvqexp.c \
+codebookvqanssi.c \
codebookdt.c \
codebookge.c
libcodec2_la-ampexp.lo libcodec2_la-pack.lo \
libcodec2_la-codebook.lo libcodec2_la-codebookd.lo \
libcodec2_la-codebookvq.lo libcodec2_la-codebookjnd.lo \
- libcodec2_la-codebookjvm.lo libcodec2_la-codebookvqexp.lo \
+ libcodec2_la-codebookjvm.lo libcodec2_la-codebookvqanssi.lo \
libcodec2_la-codebookdt.lo libcodec2_la-codebookge.lo
libcodec2_la_OBJECTS = $(am_libcodec2_la_OBJECTS)
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
$D/lspjvm2.txt \
$D/lspjvm3.txt
-CODEBOOKSVQEXP = \
- $D/lspvqexp1.txt \
- $D/lspvqexp2.txt \
- $D/lspvqexp3.txt
+CODEBOOKSVQANSSI = \
+ $D/lspvqanssi1.txt \
+ $D/lspvqanssi2.txt \
+ $D/lspvqanssi3.txt
CODEBOOKSGE = \
$D/gecb.txt
codebookvq.c \
codebookjnd.c \
codebookjvm.c \
-codebookvqexp.c \
+codebookvqanssi.c \
codebookdt.c \
codebookge.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookjnd.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookjvm.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookvq.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookvqexp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookvqanssi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codec2.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-dump.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-fdmdv.Plo@am__quote@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcodec2_la_CFLAGS) $(CFLAGS) -c -o libcodec2_la-codebookjvm.lo `test -f 'codebookjvm.c' || echo '$(srcdir)/'`codebookjvm.c
-libcodec2_la-codebookvqexp.lo: codebookvqexp.c
-@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcodec2_la_CFLAGS) $(CFLAGS) -MT libcodec2_la-codebookvqexp.lo -MD -MP -MF "$(DEPDIR)/libcodec2_la-codebookvqexp.Tpo" -c -o libcodec2_la-codebookvqexp.lo `test -f 'codebookvqexp.c' || echo '$(srcdir)/'`codebookvqexp.c; \
-@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcodec2_la-codebookvqexp.Tpo" "$(DEPDIR)/libcodec2_la-codebookvqexp.Plo"; else rm -f "$(DEPDIR)/libcodec2_la-codebookvqexp.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='codebookvqexp.c' object='libcodec2_la-codebookvqexp.lo' libtool=yes @AMDEPBACKSLASH@
+libcodec2_la-codebookvqanssi.lo: codebookvqanssi.c
+@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcodec2_la_CFLAGS) $(CFLAGS) -MT libcodec2_la-codebookvqanssi.lo -MD -MP -MF "$(DEPDIR)/libcodec2_la-codebookvqanssi.Tpo" -c -o libcodec2_la-codebookvqanssi.lo `test -f 'codebookvqanssi.c' || echo '$(srcdir)/'`codebookvqanssi.c; \
+@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libcodec2_la-codebookvqanssi.Tpo" "$(DEPDIR)/libcodec2_la-codebookvqanssi.Plo"; else rm -f "$(DEPDIR)/libcodec2_la-codebookvqanssi.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='codebookvqanssi.c' object='libcodec2_la-codebookvqanssi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcodec2_la_CFLAGS) $(CFLAGS) -c -o libcodec2_la-codebookvqexp.lo `test -f 'codebookvqexp.c' || echo '$(srcdir)/'`codebookvqexp.c
+@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcodec2_la_CFLAGS) $(CFLAGS) -c -o libcodec2_la-codebookvqanssi.lo `test -f 'codebookvqanssi.c' || echo '$(srcdir)/'`codebookvqanssi.c
libcodec2_la-codebookdt.lo: codebookdt.c
@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcodec2_la_CFLAGS) $(CFLAGS) -MT libcodec2_la-codebookdt.lo -MD -MP -MF "$(DEPDIR)/libcodec2_la-codebookdt.Tpo" -c -o libcodec2_la-codebookdt.lo `test -f 'codebookdt.c' || echo '$(srcdir)/'`codebookdt.c; \
codebookvq.$(OBJEXT): codebookvq.c
codebookjnd.$(OBJEXT): codebookjnd.c
codebookjvm.$(OBJEXT): codebookjvm.c
-codebookvqexp.$(OBJEXT): codebookvqexp.c
+codebookvqanssi.$(OBJEXT): codebookvqanssi.c
codebookge.$(OBJEXT): codebookge.c
codebook.lo: codebook.c
codebookjvm.c: generate_codebook $(CODEBOOKSJVM)
./generate_codebook lsp_cbjvm $(CODEBOOKSJVM) > codebookjvm.c
-codebookvqexp.c: generate_codebook $(CODEBOOKSVQEXP)
- ./generate_codebook lsp_cbvqexp $(CODEBOOKSVQEXP) > codebookvqexp.c
+codebookvqanssi.c: generate_codebook $(CODEBOOKSVQEXP)
+ ./generate_codebook lsp_cbvqanssi $(CODEBOOKSVQANSSI) > codebookvqanssi.c
codebookge.c: generate_codebook $(CODEBOOKSGE)
./generate_codebook ge_cb $(CODEBOOKSGE) > codebookge.c
clean-local:
- -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c codebookjvm.c codebookge.c codebookvqexp.c
+ -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c codebookjvm.c codebookge.c codebookvqanssi.c
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
int lsp = 0, lspd = 0, lspvq = 0;
int lspres = 0;
int lspdt = 0, lspdt_mode = LSPDT_ALL;
- int dt = 0, lspjvm = 0, lspjnd = 0, lspmel = 0;
+ int dt = 0, lspjvm = 0, lspanssi = 0, lspjnd = 0, lspmel = 0;
float ak[LPC_MAX];
COMP Sw_[FFT_ENC];
COMP Ew[FFT_ENC];
{ "lspdt", no_argument, &lspdt, 1 },
{ "lspdt_mode", required_argument, NULL, 0 },
{ "lspjvm", no_argument, &lspjvm, 1 },
+ { "lspanssi", no_argument, &lspanssi, 1 },
{ "phase0", no_argument, &phase0, 1 },
{ "phaseexp", required_argument, &phaseexp, 1 },
{ "ampexp", required_argument, &exp, 1 },
}
if (lspjvm) {
- /* Jean-Marc's multi-stage VQ */
+ /* Jean-Marc's multi-stage, split VQ */
lspjvm_quantise(lsps, lsps_, LPC_ORD);
{
float lsps_bw[LPC_ORD];
}
}
+ if (lspanssi) {
+ /* multi-stage VQ from Anssi Ramo OH3GDD */
+
+ lspanssi_quantise(lsps, lsps_, LPC_ORD);
+ lsp_to_lpc(lsps_, ak, LPC_ORD);
+ }
+
/* experimenting with non-linear LSP spacing to see if
it's just noticable */
analysis. Re-design some time.
*/
- if (!lsp && !lspd && !lspvq && !lspres && !lspjvm && !lspjnd && !lspmel)
+ if (!lsp && !lspd && !lspvq && !lspres && !lspjvm && !lspanssi && !lspjnd && !lspmel)
for(i=0; i<LPC_ORD; i++)
lsps_[i] = lsps[i];
extern const struct lsp_codebook lsp_cbjnd[];
extern const struct lsp_codebook lsp_cbdt[];
extern const struct lsp_codebook lsp_cbjvm[];
-extern const struct lsp_codebook lsp_cbvqexp[];
+extern const struct lsp_codebook lsp_cbvqanssi[];
extern const struct lsp_codebook ge_cb[];
#endif
int order
)
{
- int i,k,m,index;
+ int i,k,m;
float lsp_hz[LPC_MAX];
float lsp__hz[LPC_MAX];
float dlsp[LPC_MAX];
int order
)
{
- int i,k,index;
+ int i,k;
float lsp__hz[LPC_MAX];
float dlsp_[LPC_MAX];
const float *cb;
- float se;
assert(order == LPC_ORD);
//w[1]*=2;
}
+/* LSP weight calculation function kindly submitted by Anssi, OH3GDD */
+
+void compute_weights_anssi(const float *x, float *w, int ndim)
+{
+ int i;
+ float d[LPC_ORD];
+
+ assert(ndim == LPC_ORD);
+
+ for(i=0; i<LPC_ORD; i++)
+ d[i] = 1.0;
+
+ d[0] = x[1];
+ for (i=1; i<LPC_ORD-1; i++)
+ d[i] = x[i+1] - x[i-1];
+ d[LPC_ORD-1] = PI - x[8];
+ for (i=0; i<LPC_ORD; i++) {
+ if (x[i]<((400.0/4000.0)*PI))
+ w[i]=5.0/(0.01+d[i]);
+ else if (x[i]<((700.0/4000.0)*PI))
+ w[i]=4.0/(0.01+d[i]);
+ else if (x[i]<((1200.0/4000.0)*PI))
+ w[i]=3.0/(0.01+d[i]);
+ else if (x[i]<((2000.0/4000.0)*PI))
+ w[i]=2.0/(0.01+d[i]);
+ else
+ w[i]=1.0/(0.01+d[i]);
+
+ w[i]=sqrt(w[i]+0.3);
+ }
+}
+
int find_nearest(const float *codebook, int nb_entries, float *x, int ndim)
{
int i, j;
}
}
-void lspvqexp_quantise(float *x, float *xq, int ndim)
+/* 3 stage VQ LSP quantsier kindly submitted by Anssi, OH3GDD */
+
+void lspanssi_quantise(float *x, float *xq, int ndim)
{
int i, n1, n2, n3;
- float err[LPC_ORD], err2[LPC_ORD], err3[LPC_ORD];
- float w[LPC_ORD], w2[LPC_ORD], w3[LPC_ORD];
- const float *codebook1 = lsp_cbvqexp[0].cb;
- const float *codebook2 = lsp_cbvqexp[1].cb;
- const float *codebook3 = lsp_cbvqexp[2].cb;
+ float e, err1[LPC_ORD], err2[LPC_ORD], err3[LPC_ORD];
+ float w[LPC_ORD];
+ const float *codebook1 = lsp_cbvqanssi[0].cb;
+ const float *codebook2 = lsp_cbvqanssi[1].cb;
+ const float *codebook3 = lsp_cbvqanssi[2].cb;
- w[0] = MIN(x[0], x[1]-x[0]);
- for (i=1;i<ndim-1;i++)
- w[i] = MIN(x[i]-x[i-1], x[i+1]-x[i]);
- w[ndim-1] = MIN(x[ndim-1]-x[ndim-2], PI-x[ndim-1]);
-
- compute_weights(x, w, ndim);
+ compute_weights_anssi(x, w, ndim);
#ifdef DUMP
dump_weights(w, ndim);
#endif
- n1 = find_nearest(codebook1, lsp_cbvqexp[0].m, x, ndim);
+ n1 = find_nearest_weighted(codebook1, lsp_cbvqanssi[0].m, x, w, ndim);
+ e = 0.0;
for (i=0;i<ndim;i++)
{
- xq[i] = codebook1[ndim*n1+i];
- err[i] = x[i] - xq[i];
+ xq[i] = codebook1[ndim*n1+i];
+ err1[i] = x[i] - xq[i];
+ e += err1[i]*err1[i];
}
- for (i=0;i<ndim/2;i++)
+ //printf("error1: %f\n", e);
+
+ n2 = find_nearest_weighted(codebook2, lsp_cbvqanssi[1].m, err1, w, ndim);
+
+ e = 0.0;
+ for (i=0;i<ndim;i++)
{
- err2[i] = err[2*i];
- err3[i] = err[2*i+1];
- w2[i] = w[2*i];
- w3[i] = w[2*i+1];
+ xq[i] += codebook2[ndim*n2+i];
+ err2[i] = x[i] - xq[i];
+ e += err2[i]*err2[i];
}
- n2 = find_nearest_weighted(codebook2, lsp_cbvqexp[1].m, err2, w2, ndim/2);
- n3 = find_nearest_weighted(codebook3, lsp_cbvqexp[2].m, err3, w3, ndim/2);
+ //printf("error2: %f\n", e);
+
+ n3 = find_nearest_weighted(codebook3, lsp_cbvqanssi[2].m, err2, w, ndim);
- for (i=0;i<ndim/2;i++)
+ e = 0.0;
+ for (i=0;i<ndim;i++)
{
- xq[2*i] += codebook2[ndim*n2/2+i];
- xq[2*i+1] += codebook3[ndim*n3/2+i];
+ xq[i] += codebook3[ndim*n3+i];
+ err3[i] = x[i] - xq[i];
+ e += err3[i]*err3[i];
}
+ //printf("error3: %f\n", e);
}
int check_lsp_order(float lsp[], int lpc_order)
void lspjnd_quantise(float lsp[], float lsp_[], int order);
void lspdt_quantise(float lsps[], float lsps_[], float lsps__prev[], int mode);
void lspjvm_quantise(float lsps[], float lsps_[], int order);
-void lspvqexp_quantise(float lsps[], float lsps_[], int order);
+void lspanssi_quantise(float lsps[], float lsps_[], int order);
void quantise_WoE(MODEL *model, float *e, float xq[]);
int encode_WoE(MODEL *model, float e, float xq[]);