From d9d8950eeec29776164ae3266abbe5650cb2aa41 Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 14 Apr 2015 08:19:41 +0000 Subject: [PATCH] 17 bit/frame mel LSP quantiser working OK git-svn-id: https://svn.code.sf.net/p/freetel/code@2116 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/melstats.m | 49 +++++++++++++++++++++++ codec2-dev/octave/sd.m | 1 + codec2-dev/src/CMakeLists.txt | 17 ++++++++ codec2-dev/src/c2sim.c | 27 ++++++------- codec2-dev/src/codebook/mel1.txt | 9 +++++ codec2-dev/src/codebook/mel2.txt | 5 +++ codec2-dev/src/codebook/mel3.txt | 17 ++++++++ codec2-dev/src/codebook/mel4.txt | 9 +++++ codec2-dev/src/codebook/mel5.txt | 9 +++++ codec2-dev/src/codebook/mel6.txt | 6 +++ codec2-dev/src/defines.h | 1 + codec2-dev/src/dump.c | 6 +-- codec2-dev/src/dump.h | 2 +- codec2-dev/src/quantise.c | 68 ++++++++++++++++++++++++++++++++ codec2-dev/src/quantise.h | 3 ++ 15 files changed, 211 insertions(+), 18 deletions(-) create mode 100644 codec2-dev/octave/melstats.m create mode 100644 codec2-dev/src/codebook/mel1.txt create mode 100644 codec2-dev/src/codebook/mel2.txt create mode 100644 codec2-dev/src/codebook/mel3.txt create mode 100644 codec2-dev/src/codebook/mel4.txt create mode 100644 codec2-dev/src/codebook/mel5.txt create mode 100644 codec2-dev/src/codebook/mel6.txt diff --git a/codec2-dev/octave/melstats.m b/codec2-dev/octave/melstats.m new file mode 100644 index 00000000..d3735597 --- /dev/null +++ b/codec2-dev/octave/melstats.m @@ -0,0 +1,49 @@ +% melstats.m +% David Rowe April 2015 +% +% plots some stats of mel/lsp quantisers + +function melstats(filename) + + mel = load(filename); + [m n] = size(mel); + nbins = 10; + + % histograms of each value + + figure(1) + clf + subplot(211) + [h x] = hist(mel(:,1),nbins); + plot(x,h,"1"); + hold on + + for i=2:n + [h x] = hist(mel(:,i),nbins); + colour = sprintf("%d",i); + plot(x,h,colour); + end + hold off + + % histograms differences + + subplot(212) + [h x] = hist(mel(:,1),nbins); + plot(x,h,"1"); + hold on + + for i=2:n + [h x] = hist(mel(:,i)-mel(:,i-1),nbins); + colour = sprintf("%d",i); + plot(x,h, colour); + end + hold off + + figure(2) + plot(mel(:,1),mel(:,2),'r+') + hold on; + plot(mel(:,3),mel(:,4),'g+') + plot(mel(:,5),mel(:,6),'b+') + hold off; + +endfunction diff --git a/codec2-dev/octave/sd.m b/codec2-dev/octave/sd.m index efff9061..8065de79 100644 --- a/codec2-dev/octave/sd.m +++ b/codec2-dev/octave/sd.m @@ -36,6 +36,7 @@ function sd(raw_filename, dump_file_prefix, f) plot(s); subplot(212) plot(sd); + axis([1 frames 0 10]) lsp1_filename = sprintf("%s_lsp.txt", dump_file_prefix); lsp2_filename = sprintf("%s_lsp_.txt", dump_file_prefix); diff --git a/codec2-dev/src/CMakeLists.txt b/codec2-dev/src/CMakeLists.txt index 43f9a181..30b26513 100644 --- a/codec2-dev/src/CMakeLists.txt +++ b/codec2-dev/src/CMakeLists.txt @@ -78,6 +78,15 @@ set(CODEBOOKSVQANSSI ${D}/lspvqanssi4.txt ) +set(CODEBOOKSMEL + ${D}/mel1.txt + ${D}/mel2.txt + ${D}/mel3.txt + ${D}/mel4.txt + ${D}/mel5.txt + ${D}/mel6.txt +) + set(CODEBOOKSGE ${D}/gecb.txt) # when crosscompiling import the executable targets from a file @@ -147,6 +156,13 @@ add_custom_command( DEPENDS generate_codebook ${CODEBOOKSVQANSSI} ) +# codebookmel.c +add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookmel.c + COMMAND generate_codebook mel_cb ${CODEBOOKSMEL} > ${CMAKE_CURRENT_BINARY_DIR}/codebookmel.c + DEPENDS generate_codebook ${CODEBOOKSMEL} +) + # codebookge.c add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/codebookge.c @@ -183,6 +199,7 @@ set(CODEC2_SRCS codebookjvm.c codebookvqanssi.c codebookdt.c + codebookmel.c codebookge.c golay23.c freedv_api.c diff --git a/codec2-dev/src/c2sim.c b/codec2-dev/src/c2sim.c index b653b203..44fe1670 100644 --- a/codec2-dev/src/c2sim.c +++ b/codec2-dev/src/c2sim.c @@ -591,34 +591,33 @@ int main(int argc, char *argv[]) */ if (lspmel) { - float f, f_; - int mel[LPC_ORD]; + float f, f_, dmel; + float mel[LPC_ORD]; + int mel_indexes[LPC_ORD]; - for(i=0; i