experimental VQ from Jean-Marc in c2sim, c2sim and c2enc, c2dec match for 1400 mode...
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 13 Feb 2012 01:12:22 +0000 (01:12 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Mon, 13 Feb 2012 01:12:22 +0000 (01:12 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@313 01035d8c-6547-0410-b346-abe4f91aad63

19 files changed:
codec2-dev/src/Makefile.am
codec2-dev/src/Makefile.in
codec2-dev/src/c2dec.c
codec2-dev/src/c2enc.c
codec2-dev/src/c2sim.c
codec2-dev/src/codebook/lspdt1-10.txt [new file with mode: 0644]
codec2-dev/src/codebook/lspdt1-4.txt
codec2-dev/src/codebook/lspjvm1.txt [new file with mode: 0644]
codec2-dev/src/codebook/lspjvm2.txt [new file with mode: 0644]
codec2-dev/src/codebook/lspjvm3.txt [new file with mode: 0644]
codec2-dev/src/codebookdt.c
codec2-dev/src/codebookjvm.c [new file with mode: 0644]
codec2-dev/src/codec2.c
codec2-dev/src/defines.h
codec2-dev/src/interp.c
codec2-dev/src/interp.h
codec2-dev/src/quantise.c
codec2-dev/src/quantise.h
codec2-dev/src/sine.c

index 8bc7e448a0f1412dfbc2b3cfe8e5c41abd4e13e0..7974b91023cf7c9337d147dc1f0795d6a290bf93 100644 (file)
@@ -46,8 +46,13 @@ CODEBOOKSJND= \
 
 CODEBOOKSDT= \
   $D/lspdt1-4.txt \
-  $D/lspdt5-10.txt
+  $D/lspdt5-10.txt \
+  $D/lspdt1-10.txt
 
+CODEBOOKSJVM= \
+  $D/lspjvm1.txt \
+  $D/lspjvm2.txt \
+  $D/lspjvm3.txt
 
 noinst_PROGRAMS = generate_codebook genlspdtcb
 
@@ -55,6 +60,7 @@ codebook.$(OBJEXT): codebook.c
 codebookd.$(OBJEXT): codebookd.c
 codebookvq.$(OBJEXT): codebookvq.c
 codebookjnd.$(OBJEXT): codebookjnd.c
+codebookjvm.$(OBJEXT): codebookjvm.c
 
 $(CODEBOOKSDT): genlspdtcb
        ./genlspdtcb
@@ -76,8 +82,11 @@ codebookjnd.c: generate_codebook $(CODEBOOKSJND)
 codebookdt.c: generate_codebook $(CODEBOOKSDT)
        ./generate_codebook lsp_cbdt $(CODEBOOKSDT) > codebookdt.c
 
+codebookjvm.c: generate_codebook $(CODEBOOKSJVM)
+       ./generate_codebook lsp_cbjvm $(CODEBOOKSJVM) > codebookjvm.c
+
 clean-local:
-       -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c
+       -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c codebookjvm.c
 
 lib_LTLIBRARIES        = libcodec2.la
 libcodec2_la_SOURCES = dump.c \
@@ -97,6 +106,7 @@ codebook.c \
 codebookd.c \
 codebookvq.c \
 codebookjnd.c \
+codebookjvm.c \
 codebookdt.c
 
 libcodec2_la_CFLAGS = $(AM_CFLAGS)
index c07ba51728ab54b373135e64fe489d19d2f7ee95..8cfd3c908d1db7a544eef74a4ed00011a4b2fdd0 100644 (file)
@@ -69,7 +69,8 @@ am_libcodec2_la_OBJECTS = libcodec2_la-dump.lo libcodec2_la-lpc.lo \
        libcodec2_la-phase.lo libcodec2_la-quantise.lo \
        libcodec2_la-pack.lo libcodec2_la-codebook.lo \
        libcodec2_la-codebookd.lo libcodec2_la-codebookvq.lo \
-       libcodec2_la-codebookjnd.lo libcodec2_la-codebookdt.lo
+       libcodec2_la-codebookjnd.lo libcodec2_la-codebookjvm.lo \
+       libcodec2_la-codebookdt.lo
 libcodec2_la_OBJECTS = $(am_libcodec2_la_OBJECTS)
 binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
 PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
@@ -264,7 +265,13 @@ CODEBOOKSJND = \
 
 CODEBOOKSDT = \
   $D/lspdt1-4.txt \
-  $D/lspdt5-10.txt
+  $D/lspdt5-10.txt \
+  $D/lspdt1-10.txt
+
+CODEBOOKSJVM = \
+  $D/lspjvm1.txt \
+  $D/lspjvm2.txt \
+  $D/lspjvm3.txt
 
 lib_LTLIBRARIES = libcodec2.la
 libcodec2_la_SOURCES = dump.c \
@@ -284,6 +291,7 @@ codebook.c \
 codebookd.c \
 codebookvq.c \
 codebookjnd.c \
+codebookjvm.c \
 codebookdt.c
 
 libcodec2_la_CFLAGS = $(AM_CFLAGS)
@@ -449,6 +457,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookd.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-codebookdt.Plo@am__quote@
 @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-codec2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcodec2_la-dump.Plo@am__quote@
@@ -604,6 +613,13 @@ libcodec2_la-codebookjnd.lo: codebookjnd.c
 @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-codebookjnd.lo `test -f 'codebookjnd.c' || echo '$(srcdir)/'`codebookjnd.c
 
+libcodec2_la-codebookjvm.lo: codebookjvm.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-codebookjvm.lo -MD -MP -MF "$(DEPDIR)/libcodec2_la-codebookjvm.Tpo" -c -o libcodec2_la-codebookjvm.lo `test -f 'codebookjvm.c' || echo '$(srcdir)/'`codebookjvm.c; \
+@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libcodec2_la-codebookjvm.Tpo" "$(DEPDIR)/libcodec2_la-codebookjvm.Plo"; else rm -f "$(DEPDIR)/libcodec2_la-codebookjvm.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='codebookjvm.c' object='libcodec2_la-codebookjvm.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-codebookjvm.lo `test -f 'codebookjvm.c' || echo '$(srcdir)/'`codebookjvm.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; \
 @am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/libcodec2_la-codebookdt.Tpo" "$(DEPDIR)/libcodec2_la-codebookdt.Plo"; else rm -f "$(DEPDIR)/libcodec2_la-codebookdt.Tpo"; exit 1; fi
@@ -818,6 +834,7 @@ codebook.$(OBJEXT): codebook.c
 codebookd.$(OBJEXT): codebookd.c
 codebookvq.$(OBJEXT): codebookvq.c
 codebookjnd.$(OBJEXT): codebookjnd.c
+codebookjvm.$(OBJEXT): codebookjvm.c
 
 $(CODEBOOKSDT): genlspdtcb
        ./genlspdtcb
@@ -839,8 +856,11 @@ codebookjnd.c: generate_codebook $(CODEBOOKSJND)
 codebookdt.c: generate_codebook $(CODEBOOKSDT)
        ./generate_codebook lsp_cbdt $(CODEBOOKSDT) > codebookdt.c
 
+codebookjvm.c: generate_codebook $(CODEBOOKSJVM)
+       ./generate_codebook lsp_cbjvm $(CODEBOOKSJVM) > codebookjvm.c
+
 clean-local:
-       -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c
+       -rm -f codebook.c codebookd.c codebookdvq.c codebookjnd.c codebookdt.c codebookjvm.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:
index fed4c3e3bae2b903a25d5a2cf8518c759197ce1a..7d0dbcd728816293d767b133737e3f112c20299e 100644 (file)
@@ -32,8 +32,6 @@
 #include <string.h>
 #include <errno.h>
 
-#define BITS_SIZE      ((CODEC2_BITS_PER_FRAME + 7) / 8)
-
 int main(int argc, char *argv[])
 {
     int            mode;
@@ -62,14 +60,14 @@ int main(int argc, char *argv[])
     if (strcmp(argv[2], "-")  == 0) fin = stdin;
     else if ( (fin = fopen(argv[2],"rb")) == NULL ) {
        fprintf(stderr, "Error opening input bit file: %s: %s.\n",
-         argv[1], strerror(errno));
+         argv[2], strerror(errno));
        exit(1);
     }
 
     if (strcmp(argv[3], "-") == 0) fout = stdout;
     else if ( (fout = fopen(argv[3],"wb")) == NULL ) {
        fprintf(stderr, "Error opening output speech file: %s: %s.\n",
-         argv[2], strerror(errno));
+         argv[3], strerror(errno));
        exit(1);
     }
 
@@ -79,8 +77,8 @@ int main(int argc, char *argv[])
     buf = (short*)malloc(nsam*sizeof(short));
     nbyte = (nbit + 7) / 8;
     bits = (unsigned char*)malloc(nbyte*sizeof(char));
-
-    while(fread(bits, sizeof(char), nbit, fin) == nbit) {
+    
+    while(fread(bits, sizeof(char), nbyte, fin) == nbyte) {
        codec2_decode(codec2, buf, bits);
        fwrite(buf, sizeof(short), nsam, fout);
        //if this is in a pipeline, we probably don't want the usual
index f78fca94a8ef73534de89f27bfcd0fc0be57d71e..8e56cfc6309d09c7558e1ca399e916506d0e708e 100644 (file)
@@ -33,8 +33,6 @@
 #include <string.h>
 #include <errno.h>
 
-#define BITS_SIZE      ((CODEC2_BITS_PER_FRAME + 7) / 8)
-
 int main(int argc, char *argv[])
 {
     int            mode;
@@ -63,14 +61,14 @@ int main(int argc, char *argv[])
     if (strcmp(argv[2], "-")  == 0) fin = stdin;
     else if ( (fin = fopen(argv[2],"rb")) == NULL ) {
        fprintf(stderr, "Error opening input bit file: %s: %s.\n",
-         argv[1], strerror(errno));
+         argv[2], strerror(errno));
        exit(1);
     }
 
     if (strcmp(argv[3], "-") == 0) fout = stdout;
     else if ( (fout = fopen(argv[3],"wb")) == NULL ) {
        fprintf(stderr, "Error opening output speech file: %s: %s.\n",
-         argv[2], strerror(errno));
+         argv[3], strerror(errno));
        exit(1);
     }
 
@@ -79,11 +77,12 @@ int main(int argc, char *argv[])
     nbit = codec2_bits_per_frame(codec2);
     buf = (short*)malloc(nsam*sizeof(short));
     nbyte = (nbit + 7) / 8;
-    bits = (unsigned char*)malloc(nbyte*sizeof(char));
 
+    bits = (unsigned char*)malloc(nbyte*sizeof(char));
+    
     while(fread(buf, sizeof(short), nsam, fin) == nsam) {
        codec2_encode(codec2, bits, buf);
-       fwrite(bits, sizeof(char), nbit, fout);
+       fwrite(bits, sizeof(char), nbyte, fout);
        //if this is in a pipeline, we probably don't want the usual
         //buffering to occur
         if (fout == stdout) fflush(stdout);
index 2e3a0425d0f11545747fb71ebbe9c29fe8b4728f..f1e9f374bb9266adf29ca59b8d622063c2f2c48b 100644 (file)
@@ -71,14 +71,13 @@ int main(int argc, char *argv[])
     float prev_Wo, prev__Wo, uq_Wo, prev_uq_Wo;
     float pitch;
     int   voiced1 = 0;
-
     char  out_file[MAX_STR];
     int   arg;
     float snr;
     float sum_snr;
 
     int lpc_model, order = LPC_ORD;
-    int lsp, lspd, lspvq, lsp_quantiser, lspres, lspdt, lspdt_mode, dt;
+    int lsp, lspd, lspvq, lsp_quantiser, lspres, lspdt, lspdt_mode, dt, lspjvm;
     int lspjnd;
     float ak[LPC_MAX];
     COMP  Sw_[FFT_ENC];
@@ -92,13 +91,13 @@ int main(int argc, char *argv[])
     int   postfilt;
     float bg_est;
 
-    int   hand_voicing;
+    int   hand_voicing, phasetest;
     FILE *fvoicing = 0;
 
     MODEL prev_model, interp_model;
     int decimate;
     float lsps[LPC_ORD];
-    float prev_lsps[LPC_ORD];
+    float prev_lsps[LPC_ORD], prev_lsps_[LPC_ORD];
     float lsps__prev[LPC_ORD];
     float lsps__prev2[LPC_ORD];
     float e, prev_e;
@@ -108,7 +107,7 @@ int main(int argc, char *argv[])
 
     void *nlp_states;
     float hpf_states[2];
-
+    
     for(i=0; i<M; i++)
        Sn[i] = 1.0;
     for(i=0; i<2*N; i++)
@@ -123,10 +122,11 @@ int main(int argc, char *argv[])
        prev_model.phi[i] = 0.0;
     }
     for(i=1; i<=MAX_AMP; i++) {
+       //ex_phase[i] = (PI/3)*(float)rand()/RAND_MAX;
        ex_phase[i] = 0.0;
     }
     for(i=0; i<LPC_ORD; i++) {
-       prev_lsps[i] = i*PI/(LPC_ORD+1);
+       lsps_[i] = prev_lsps[i] = prev_lsps_[i] = i*PI/(LPC_ORD+1);
        lsps__prev[i] = lsps__prev2[i] = i*PI/(LPC_ORD+1);
     }
     e = prev_e = 1;
@@ -146,6 +146,7 @@ int main(int argc, char *argv[])
                "\t[--lspres]\n"
                "\t[--lspdt]\n"
                "\t[--lspdt_mode all|high|low]\n"
+               "\t[--lspjvm]"
                "\t[--phase0]\n"
                "\t[--postfilter]\n"
                "\t[--hand_voicing]\n"
@@ -229,10 +230,11 @@ int main(int argc, char *argv[])
     else
        lspdt_mode = LSPDT_ALL;
 
+    lspjvm = switch_present("--lspjvm",argc,argv);
+
     phase0 = switch_present("--phase0",argc,argv);
-    if (phase0) {
-       ex_phase[0] = 0;
-    }
+    phasetest = switch_present("--phasetest",argc,argv);
+    ex_phase[0] = 0;
 
     hand_voicing = switch_present("--hand_voicing",argc,argv);
     if (hand_voicing) {
@@ -256,13 +258,18 @@ int main(int argc, char *argv[])
     }
     if (switch_present("--1400",argc,argv)) {
        lpc_model = 1; order = 10;
-       lspd = 1; lspdt = 1; lspdt_mode = LSPDT_LOW;
+       lsp = 1; lspdt = 1; lspdt_mode = LSPDT_LOW;
        phase0 = 1;
        postfilt = 1;
        decimate = 1;
        dt = 1;
     }
 
+    /*
+      printf("lspd: %d lspdt: %d lspdt_mode: %d  phase0: %d postfilt: %d "
+          "decimate: %d dt: %d\n",lspd,lspdt,lspdt_mode,phase0,postfilt,
+          decimate,dt);
+    */
     /* Initialise ------------------------------------------------------------*/
 
     make_analysis_window(w,W);
@@ -275,7 +282,7 @@ int main(int argc, char *argv[])
     sum_snr = 0;
     while(fread(buf,sizeof(short),N,fin)) {
        frames++;
-       printf("frame: %d", frames);
+       //printf("frame: %d\n", frames);
 
        /* Read input speech */
 
@@ -324,8 +331,9 @@ int main(int argc, char *argv[])
            /* determine voicing */
 
            snr = est_voicing_mbe(&model, Sw, W, Sw_, Ew, prev_uq_Wo);
-           printf("snr %3.2f v: %d Wo: %f prev_Wo: %f\n", snr, model.voiced,
-                  model.Wo, prev_uq_Wo);
+
+           //printf("snr %3.2f v: %d Wo: %f prev_Wo: %f\n", snr, model.voiced,
+           //     model.Wo, prev_uq_Wo);
 #ifdef DUMP
            dump_Sw_(Sw_);
            dump_Ew(Ew);
@@ -335,7 +343,7 @@ int main(int argc, char *argv[])
            /* just to make sure we are not cheating - kill all phases */
 
            for(i=0; i<MAX_AMP; i++)
-               model.phi[i] = 0;
+               model.phi[i] = 0;
        
            if (hand_voicing) {
                ret = fscanf(fvoicing,"%d\n",&model.voiced);
@@ -349,10 +357,13 @@ int main(int argc, char *argv[])
            e = speech_to_uq_lsps(lsps, ak, Sn, w, order);
 
 #ifdef DUMP
-           dump_lsp(lsps);
+           /* dump order is different if we are decimating */
+           if (!decimate)
+               dump_lsp(lsps);
+           for(i=0; i<LPC_ORD; i++)
+               prev_lsps[i] = lsps[i];
 #endif
 
-
            /* various LSP quantisation schemes */
 
            if (lsp) {
@@ -369,9 +380,25 @@ int main(int argc, char *argv[])
            }
 
            if (lspvq) {
-               locate_lsps_jnd_steps(lsps, LPC_ORD);
                lspvq_quantise(lsps, lsps_, LPC_ORD);
-               locate_lsps_jnd_steps(lsps_, LPC_ORD);
+               bw_expand_lsps(lsps_, LPC_ORD);
+               lsp_to_lpc(lsps_, ak, LPC_ORD);
+           }
+
+           if (lspjvm) {
+               /* note assumes lsps_[] is last frames quantised lsps_ */
+               printf("\n");
+               lspjvm_quantise(lsps, lsps_, LPC_ORD);
+               bw_expand_lsps(lsps_, LPC_ORD);
+               for(i=0; i<10; i++)
+                   printf("%f ", lsps_[i]);
+               for(i=1; i<10; i++) {
+                   if (lsps_[i] < lsps_[i-1]) {
+                       printf("unstable!\n");
+                       exit(0);
+                   }
+               }
+                           
                lsp_to_lpc(lsps_, ak, LPC_ORD);
            }
 
@@ -379,7 +406,7 @@ int main(int argc, char *argv[])
               other LSP quantisation is used we use original LSPs as
               there is no quantised version available. */
 
-           if (!lsp && !lspd && !lspvq && !lspres)
+           if (!lsp && !lspd && !lspvq && !lspres && !lspjvm)
                for(i=0; i<LPC_ORD; i++)
                    lsps_[i] = lsps[i];
 
@@ -415,21 +442,28 @@ int main(int argc, char *argv[])
               30ms, frame 3: discard (interpolate at decoder)
               40ms, frame 4: send LSPs differences between frame 4 and frame 2
            */
-
+   
            if (lspdt && decimate) {
+               /* print previous LSPs to make sure we are using the right set */
                if ((frames%4) == 0) {
-                   lspdt_quantise(lsps, lsps_, lsps__prev2, lspdt_mode);
+                   //printf("  lspdt ");  
+                   //lspdt_quantise(lsps, lsps_, lsps__prev2, lspdt_mode);
+                   for(i=0; i<LPC_ORD; i++)
+                       lsps_[i] = lsps__prev2[i];                
                    bw_expand_lsps(lsps_, LPC_ORD);
                    lsp_to_lpc(lsps_, ak, LPC_ORD);
                }
+               
                for(i=0; i<LPC_ORD; i++) {
                    lsps__prev2[i] = lsps__prev[i];
                    lsps__prev[i] = lsps_[i];
                }
            }
-       
 #ifdef DUMP
-           dump_lsp(lsps_);
+           /* if using decimated (20ms) frames we dump interp
+              LSPs below */
+           if (!decimate)
+               dump_lsp(lsps_);
 #endif
        
            /* We quantise energy and Wo when doing any form of LPC
@@ -439,7 +473,7 @@ int main(int argc, char *argv[])
            e = decode_energy(encode_energy(e));
 
            if (!decimate) {
-               /* we send paams every 10ms, delta-time every 20ms */
+               /* we send params every 10ms, delta-time every 20ms */
                if (dt && (frames % 2)) 
                    model.Wo = decode_Wo_dt(encode_Wo_dt(model.Wo, prev_Wo),prev_Wo);
                else
@@ -448,7 +482,7 @@ int main(int argc, char *argv[])
 
            if (decimate) {
                /* we send params every 20ms */
-               if (dt && ((frames % 4) == 3)) {
+               if (dt && ((frames % 4) == 0)) {
                    /* delta-time every 40ms */
                    model.Wo = decode_Wo_dt(encode_Wo_dt(model.Wo, prev__Wo),prev__Wo);
                }
@@ -458,14 +492,16 @@ int main(int argc, char *argv[])
 
            model.L  = PI/model.Wo; /* if we quantise Wo re-compute L */
           
-           if (!decimate && !dt)
-               model.Wo = decode_Wo(encode_Wo(model.Wo));
-
            aks_to_M2(ak, order, &model, e, &snr, 1); 
+           apply_lpc_correction(&model);
+
+           /* note SNR on interpolated frames can't be measured properly
+              by comparing Am as L has changed.  We can dump interp lsps
+              and compare them,
+           */
 #ifdef DUMP
            dump_lpc_snr(snr);
 #endif
-           apply_lpc_correction(&model);
            sum_snr += snr;
 #ifdef DUMP
            dump_quantised_model(&model);
@@ -489,6 +525,8 @@ int main(int argc, char *argv[])
           routine to synthesise in between frame ---------------------------*/
   
        if (decimate) {
+           float lsps_interp[LPC_ORD];
+
            if (!phase0) {
                printf("needs --phase0 to resample phase for interpolated Wo\n");
                exit(0);
@@ -510,53 +548,56 @@ int main(int argc, char *argv[])
            */
 
            if ((frames%2) == 0) {
-               printf("interp\n");
-               printf("Wo: %1.5f  L: %d e: %3.2f v2: %d\n", 
-                      model.Wo, model.L, e, model.voiced);
-               //for(i=0; i<LPC_ORD; i++)
-               //    printf("lsp_indexes: %d lsps_: %2.3f prev_lsps_: %2.3f\n", 
-               //         lsp_indexes[i], lsps_[i], prev_lsps[i]);
-               //printf("ak: ");
-               //for(i=0; i<LPC_ORD; i++)
-               //    printf("%2.3f  ", ak[i]);
-               //printf("\n");
-               printf("Am: ");
-               for(i=0; i<5; i++)
-                   printf("%2.3f  ", model.A[i]);
-               printf("\n");
+               //printf("frame: %d\n", frames);
 
                /* decode interpolated frame */
 
                interp_model.voiced = voiced1;
-               //printf("before Wo: %1.5f  L: %d  prev_e: %3.2f\n", 
-               //       prev_model.Wo, prev_model.L, prev_e);
                
 #ifdef LOG_LIN_INTERP
                interpolate(&interp_model, &prev_model, &model);
 #else
                interpolate_lsp(&interp_model, &prev_model, &model,
-                               prev_lsps, prev_e, lsps_, e, ak_interp);
+                               prev_lsps_, prev_e, lsps_, e, ak_interp, lsps_interp);          
                apply_lpc_correction(&interp_model);
-#endif
-               printf("Wo: %1.5f  L: %d  prev_e: %3.2f v1: %d pv: %d\n", 
-                      interp_model.Wo, interp_model.L, prev_e, voiced1,
-                      prev_model.voiced);
-               //printf("ak_interp: ");
-               //for(i=0; i<LPC_ORD; i++)
-               //    printf("%2.3f  ", ak_interp[i]);
-               //printf("\n");
-               printf("Am: ");
-               for(i=0; i<5; i++)
-                   printf("%2.3f  ", interp_model.A[i]);
+
+               /* used to compare with c2enc/c2dec version
+
+               printf("  Wo: %1.5f  L: %d v1: %d prev_e: %f\n", 
+                      interp_model.Wo, interp_model.L, interp_model.voiced, prev_e);
+               printf("  lsps_interp: ");
+               for(i=0; i<LPC_ORD; i++)
+                   printf("%5.3f  ", lsps_interp[i]);
+               printf("\n  A..........: ");
+               for(i=0; i<10; i++)
+                   printf("%5.3f  ",interp_model.A[i]);
+
+               printf("\n  Wo: %1.5f  L: %d e: %3.2f v2: %d\n", 
+                      model.Wo, model.L, e, model.voiced);
+               printf("  lsps_......: ");
+               for(i=0; i<LPC_ORD; i++)
+                   printf("%5.3f  ", lsps_[i]);
+               printf("\n  A..........: ");
+               for(i=0; i<10; i++)
+                   printf("%5.3f  ",model.A[i]);
                printf("\n");
-               //if (frames == 6) 
-               //    exit(0);
+               */
+                       
+#ifdef DUMP
+               /* do dumping here so we get lsp dump file in correct order */
+               dump_lsp(prev_lsps);
+               dump_lsp(lsps_interp);
+               dump_lsp(lsps);
+               dump_lsp(lsps_);
+#endif
+#endif
                if (phase0)
                    phase_synth_zero_order(&interp_model, ak_interp, ex_phase,
                                           order);      
                if (postfilt)
                    postfilter(&interp_model, &bg_est);
                synth_one_frame(buf, &interp_model, Sn_, Pn);
+               //printf("  buf[0] %d\n", buf[0]);
                if (fout != NULL) 
                    fwrite(buf,sizeof(short),N,fout);
 
@@ -567,6 +608,7 @@ int main(int argc, char *argv[])
                if (postfilt)
                    postfilter(&model, &bg_est);
                synth_one_frame(buf, &model, Sn_, Pn);
+               //printf("  buf[0] %d\n", buf[0]);
                if (fout != NULL) 
                    fwrite(buf,sizeof(short),N,fout);
 
@@ -574,7 +616,7 @@ int main(int argc, char *argv[])
 
                prev_model = model;
                for(i=0; i<LPC_ORD; i++)
-                   prev_lsps[i] = lsps_[i];
+                   prev_lsps_[i] = lsps_[i];
                prev_e = e;
            }
            else {
@@ -583,7 +625,7 @@ int main(int argc, char *argv[])
        }
        else {
            if (phase0)
-               phase_synth_zero_order(&model, ak, ex_phase, order);    
+               phase_synth_zero_order(&model, ak, ex_phase, order);    
            if (postfilt)
                postfilter(&model, &bg_est);
            synth_one_frame(buf, &model, Sn_, Pn);
@@ -593,6 +635,9 @@ int main(int argc, char *argv[])
        prev__Wo = prev_Wo;
        prev_Wo = model.Wo;
        prev_uq_Wo = uq_Wo;
+       //if (frames == 44) {
+       //    exit(0);
+       //}
     }
 
     /* End Main Loop -----------------------------------------------------*/
diff --git a/codec2-dev/src/codebook/lspdt1-10.txt b/codec2-dev/src/codebook/lspdt1-10.txt
new file mode 100644 (file)
index 0000000..a470b66
--- /dev/null
@@ -0,0 +1,513 @@
+10 512
+-8.250528  28.414351  28.947056  -22.260431  -20.641552  -23.655972  33.499699  29.162037  -26.777473  20.152264  
+-13.087674  -29.244776  28.531864  1.223712  -17.642572  -29.978474  10.884624  -23.874582  29.987656  30.394098  
+-29.912476  16.450739  -17.856684  21.637835  -26.373550  28.072887  -28.736387  -30.523342  -26.430317  5.712189  
+26.232023  17.242741  24.208025  29.041113  23.456097  26.209288  -20.043627  4.131552  30.379368  -30.294384  
+29.174519  26.290936  -26.386543  26.420618  30.329287  -27.889307  1.440385  -29.503519  -25.965733  13.266431  
+26.815336  21.980131  -23.962013  26.248177  22.603453  -26.797499  24.757118  24.917711  -21.201101  -31.104151  
+26.990334  30.932030  29.902292  -26.111679  10.720449  27.045002  -30.309986  -25.548256  -12.764328  15.942853  
+-27.131104  7.627721  -23.845989  -24.196527  31.534019  21.284435  2.196042  26.895460  -29.873121  31.457081  
+23.783720  31.103455  -16.321165  28.371029  27.756580  -22.705223  28.902239  12.486597  -24.326632  17.364750  
+26.624371  29.318468  12.003039  22.658562  28.986195  18.075884  -27.618345  27.107302  -24.388067  -22.760424  
+13.515237  -26.350586  25.129314  -30.786650  32.847569  -30.016973  -24.524342  -22.618462  25.237829  -11.466196  
+-7.106867  17.136097  3.030111  -16.934315  -29.622986  26.248684  24.710110  -9.607081  34.604813  -28.588524  
+15.662686  -27.542521  28.252190  -29.866125  -33.910301  27.976837  6.867967  -28.312788  -10.601373  -21.302893  
+-10.193929  14.391588  24.278387  -28.975214  28.665323  30.877426  25.230631  22.649166  34.657333  12.617115  
+27.801043  -6.528720  29.821329  -26.306427  31.756905  19.847202  -28.467939  -21.040308  26.433147  22.401430  
+30.631275  24.535563  31.284803  9.835046  -9.955822  -21.007423  -28.907034  -6.312805  31.747091  -20.082104  
+-23.180269  27.280735  -1.648219  18.616158  -28.962486  16.385414  27.848301  30.031059  -2.877421  30.454214  
+28.448109  19.146063  30.305185  -21.223429  -28.729210  4.121464  -32.124985  16.542374  26.426540  25.656050  
+-17.137257  29.191708  30.093775  15.418388  -26.740789  4.192141  30.161688  -20.539837  -27.132601  30.135859  
+-25.917549  -22.641289  24.594221  13.821900  -22.764513  34.653595  25.676662  -2.283436  -28.713104  21.475290  
+-34.803772  16.627371  24.532631  0.507513  -0.351332  -29.709391  -11.731549  26.970554  30.765701  -17.942686  
+-21.305920  16.795202  -8.171767  4.816957  -32.731911  29.083702  -15.778113  27.838266  -35.286331  -2.821167  
+25.230614  8.306693  30.379696  9.017179  -27.834126  24.510019  29.685558  -29.855885  -24.964121  22.693756  
+-24.019381  -24.911600  29.932642  26.527115  24.229420  -25.979359  -24.631037  -26.388783  26.211708  9.389849  
+-18.861231  -33.228931  29.733133  30.216154  29.167511  15.435679  25.305086  19.504105  -25.545568  17.099970  
+-28.352892  21.202972  -28.220776  -25.223660  -27.102163  -27.997780  -15.985667  -31.684175  8.520580  32.364357  
+27.376833  -20.802015  20.907457  30.482269  30.754896  -28.857952  12.509435  13.060081  -28.310965  18.305183  
+25.157576  25.038042  -21.250418  28.748077  30.768257  26.917866  7.294786  -21.357422  -20.052004  29.755259  
+-24.358604  29.996195  10.147661  15.117146  -25.059454  26.876207  29.655886  1.598995  -31.368891  -24.860382  
+-23.087124  -30.624411  26.872061  -25.430162  -27.082129  20.720413  -28.692017  30.691967  -21.279165  -2.551623  
+-24.353456  -31.981487  21.236629  -24.626516  28.659883  -25.651659  17.860260  22.199923  -20.723352  31.429373  
+-25.257303  31.413050  2.180641  -21.803225  31.604710  26.447760  -3.937415  17.640810  6.967419  29.346401  
+-26.361465  -29.989614  6.612124  23.398020  28.787786  26.224808  -32.942394  23.286501  -19.532110  24.959354  
+-27.878630  29.734219  19.966755  30.198826  19.773518  -17.789425  -27.085190  31.225122  -28.529303  1.141312  
+-30.901060  0.391270  -2.896986  30.007690  27.838476  26.702936  11.228483  25.069935  35.403259  -18.549868  
+24.425106  30.878494  -14.288082  -28.314743  30.358965  16.484238  18.017254  -16.166327  -30.419704  -28.554745  
+2.113087  19.104361  24.900944  -27.797613  2.455245  -30.316483  -31.873756  -29.685768  25.493534  -25.001156  
+12.640694  27.439734  31.413740  28.351887  28.250576  -31.200777  -1.919832  -25.808199  -17.301651  27.257868  
+24.302240  -31.663763  -8.108189  31.926470  26.079449  -17.886381  -5.920022  -31.881042  29.882542  9.564315  
+26.885803  28.647747  -30.219711  25.136871  28.128950  21.675436  -28.413626  8.504551  15.025225  -19.844286  
+-25.595650  -27.307159  25.095547  -7.531783  17.902473  -24.060442  -29.581953  21.509615  -19.275269  -29.422474  
+-32.989773  -24.240007  26.426277  26.318930  -30.240437  -30.340971  9.496776  -0.216958  -30.049471  26.236687  
+25.384636  -6.275255  -18.597488  -32.691147  29.291729  -27.610168  -21.210382  -30.417465  -17.904039  -27.208693  
+-22.291912  13.350454  -28.847847  -27.335732  -24.619164  -25.186035  -31.240126  25.411316  27.413515  26.526279  
+-11.963379  -31.066198  9.782462  33.931267  29.914045  33.128548  6.134001  26.757753  24.343744  12.870527  
+-25.266705  28.371819  -17.242594  -0.061756  -23.222466  25.648582  -29.380426  -25.207943  30.648054  25.205875  
+-28.429790  29.742310  -29.492258  24.673662  -5.577706  -30.121881  24.641495  -5.271527  -28.554474  -25.347298  
+30.674225  23.665363  26.509443  -28.156471  -19.652834  -30.558514  3.050400  22.467127  -12.157305  25.608335  
+28.007099  -23.921940  -28.883001  16.383432  30.184158  5.257059  -27.107363  -18.662508  30.094419  29.672953  
+-4.148671  32.244709  -31.177191  -3.107982  30.788345  -19.094992  -17.701006  21.321257  -28.870909  -22.307236  
+-27.787346  21.979095  -28.086067  27.094601  -22.926842  -26.618746  -25.764585  30.389841  9.124823  -20.803688  
+-28.622871  14.273782  -18.527746  32.811272  28.237886  26.638952  -29.631285  -21.763582  29.762817  23.678711  
+28.507240  -28.432800  24.060392  0.475232  33.547039  10.758526  -3.632491  -28.713354  -29.390940  -21.657669  
+-8.461226  -20.445940  20.312346  1.126397  27.891205  -8.802555  29.181444  -33.473057  -24.317173  27.094810  
+18.385647  -18.681868  -34.019363  -16.016193  32.892334  30.348473  -18.076117  -17.677099  29.281147  -6.462004  
+-27.232441  29.584328  25.616709  -7.832103  22.537663  27.604885  -24.377760  -26.233315  23.746206  -26.995077  
+23.928440  27.366444  31.684374  -26.476540  -2.046179  -28.640903  17.716154  -28.665686  20.821653  19.822582  
+29.407177  -29.962450  -25.928570  -20.161171  -21.076260  -26.830011  -23.238630  -28.696051  -26.628510  11.198109  
+23.762690  -3.135408  -10.013238  -25.964376  31.742970  -25.495323  23.754967  27.876976  23.058678  -27.804108  
+-29.595732  -26.108103  -32.855850  -0.777961  26.280220  4.676180  -21.124659  -30.380817  9.198297  -31.738487  
+-18.257301  -29.640936  -30.950096  3.669302  -26.327230  -27.560867  -28.221474  21.425386  -23.974077  -27.058352  
+22.203074  27.736471  28.689638  -30.763041  18.591822  18.732649  28.202400  21.263161  -14.076660  -28.537773  
+24.311007  -19.661934  -30.559019  27.831297  23.832487  23.034298  -19.796577  25.609159  -28.970860  21.383129  
+-25.099157  -25.529819  5.853761  -6.068099  -7.706121  11.039868  -8.481035  21.795696  -28.756374  29.722593  
+-30.324696  -26.820206  -2.094729  -20.414989  -28.300838  29.801680  25.661100  22.089428  12.858266  -23.677881  
+-28.310026  24.394686  26.970953  -19.291451  18.713287  31.958241  20.112799  25.449312  6.026050  -31.284294  
+29.731031  -7.458796  -2.055046  -9.766047  -24.399158  25.549126  -17.113363  23.141628  -33.150452  -28.483871  
+-28.091705  28.946104  26.639599  26.441015  -5.776271  -31.776129  3.699637  3.309000  -27.088848  28.434065  
+24.877413  24.131851  -28.485380  -23.670988  26.915024  -18.530895  22.305233  29.780357  -21.399794  23.557825  
+27.733376  -23.716413  -21.622772  30.487514  -7.450827  14.006124  -27.437721  29.446697  18.505186  32.935650  
+-24.420240  -22.155836  30.738674  -30.658985  -25.938389  -18.666609  -4.351988  19.271080  27.065073  -24.776644  
+29.156111  -28.483194  26.807344  -32.169819  32.677620  -18.160120  -22.820723  19.154898  -25.966934  -15.867821  
+-32.402512  28.791231  -19.376459  -33.458790  -4.591619  -2.483457  -26.426649  -11.451970  -3.489601  26.589520  
+17.709406  28.119827  -9.284810  33.072849  -3.393136  -13.898425  33.350590  -30.098577  -25.904646  -23.073343  
+24.880932  -25.761850  -28.084831  22.513605  -31.395102  -29.289019  26.686272  -6.293370  -24.953367  -14.749125  
+16.803219  22.737221  28.072466  -30.104748  -33.386768  -29.029961  -21.493002  -17.387140  -1.687227  -26.739874  
+-8.849285  -8.653768  32.022827  -22.359735  29.513790  24.547321  28.248760  -29.673279  -20.694735  -23.920599  
+18.995764  -32.690716  -24.981482  31.671928  -22.609871  -27.155401  1.049363  -27.188822  24.030592  30.201191  
+-20.475941  26.728388  20.333851  -5.874790  -25.067295  -29.538239  -22.953407  -26.601837  -31.151222  25.098551  
+-11.856617  4.262431  -28.877539  26.230621  -30.327372  27.634954  10.315826  -32.939442  -24.725647  -27.897846  
+-5.141058  -0.384487  27.112600  15.110576  -11.309449  32.180965  -30.647289  -27.716377  -34.215122  -25.215185  
+-28.122921  -28.624094  -8.308435  -27.449034  -31.472042  -27.381563  -21.243340  -18.023628  -22.585512  27.566639  
+28.504580  22.803720  21.843224  -27.465639  25.226137  -26.931309  -29.118799  8.342940  19.081705  30.757061  
+-16.422394  27.782209  -29.507763  27.667814  -25.478991  15.812572  -31.803295  -8.327382  12.915374  -26.977285  
+-13.047698  -24.075064  18.757490  30.889606  13.036374  31.280357  34.008266  -2.397495  27.773239  -4.738329  
+-28.075832  31.486786  9.875986  -12.495639  28.213650  20.669672  -20.154669  -27.666166  -29.830408  28.754074  
+-20.817934  25.465155  21.660789  30.018974  -33.024593  -26.851126  22.427879  -18.918964  27.513636  -13.117702  
+32.712883  20.105747  11.499645  11.480800  -31.893333  -33.761261  26.434597  -16.045656  28.441851  16.275194  
+25.468031  -27.301338  14.702893  -21.335854  -22.459711  -32.798584  -27.640146  22.849913  21.499794  12.194662  
+27.247601  27.541500  -28.059675  21.635532  11.560982  -27.964947  9.155243  14.273994  28.268442  28.711775  
+28.157682  24.629513  -25.688036  -20.681528  27.016497  27.786137  3.006814  -24.266685  26.347130  28.307236  
+33.590897  26.544954  -13.754819  10.255233  -8.044541  30.658283  25.738869  -22.977711  8.164171  -24.753832  
+31.092783  13.342126  -7.211920  -2.049561  30.282135  -30.253843  -23.966923  -21.516727  32.113659  6.814880  
+23.287216  18.627256  -0.295165  -32.785515  1.387961  -33.989265  33.773190  -8.199713  17.003393  -17.363035  
+25.101440  28.455503  -8.158275  30.860847  -29.289976  -25.225998  -23.423073  -9.182380  26.093452  -30.787434  
+-24.068687  28.119608  -10.572042  23.238905  -30.614655  -23.620752  -22.369682  -24.210314  -24.525866  -28.179277  
+-29.210775  9.336824  -27.031591  -29.950668  -22.957783  -28.333061  -14.290992  30.638340  -9.514547  -18.259357  
+29.051676  29.304520  -27.803989  20.112759  -23.854359  26.400883  -22.467255  31.361710  24.536663  11.645331  
+25.958706  28.463490  -24.367929  10.579311  -25.545280  -29.809126  20.846022  -29.060047  -27.663929  23.973812  
+9.121296  30.801323  26.039162  -16.843090  15.986970  -27.447987  1.624425  32.649300  31.067707  28.746941  
+27.518221  -30.770910  -21.445694  -25.869053  31.146349  29.838579  -24.894156  16.136885  -18.003977  -7.402350  
+-27.305534  -21.246096  -26.871511  27.852213  -11.644767  -31.164965  -30.935816  -26.874981  -30.399879  16.253309  
+-6.632153  8.097020  -31.116461  -29.224577  1.844677  33.240108  -17.944588  27.793501  22.504580  -2.187771  
+28.788109  24.887934  -12.195354  -26.807501  -18.840614  12.666108  29.015575  30.759928  -26.548164  26.759972  
+7.593760  -23.918388  31.474106  -21.832027  23.403120  -29.994598  21.056564  25.481445  28.109774  24.279013  
+22.547098  -30.332420  30.663147  22.894178  15.532843  24.273546  -29.101322  12.098467  26.230379  28.198549  
+-29.239477  -21.581753  27.146959  30.019226  -6.244174  29.899210  28.713047  -26.166416  -8.515326  -29.176779  
+28.122040  -21.038881  23.960810  -16.589050  28.675232  27.318020  26.743977  5.758596  22.055302  23.182400  
+-18.961840  -10.698790  -28.763069  28.437471  -35.400574  24.652515  22.043573  14.510972  -23.194159  -30.208973  
+-31.020939  22.423620  -30.354576  27.677849  21.787552  24.156179  25.448776  6.797812  23.857073  -10.583152  
+28.035105  -8.365502  23.218433  28.703245  29.323349  31.770390  4.667182  -30.053162  19.615248  22.585283  
+20.907743  32.282700  20.469995  -2.092622  32.593643  -28.172235  17.193794  -13.688399  23.971102  -29.084644  
+-27.821463  -23.167927  -20.422800  -32.688595  20.012943  -5.708320  25.155785  -25.669615  -31.714989  10.813772  
+21.059443  22.325644  8.813952  -31.869465  -25.340435  -22.912552  25.651350  -30.096390  -12.251925  27.824656  
+33.124298  24.970509  -22.883692  -24.787495  20.120363  27.808098  -24.764261  29.295557  -20.974461  18.732210  
+27.873919  13.170330  26.616785  30.360901  23.720774  -28.773775  -32.039742  14.245504  10.406815  23.114937  
+-29.642006  21.243027  28.496279  -29.954308  16.027828  28.209349  24.253197  -15.291070  -24.008448  21.691130  
+-30.420097  21.261686  23.687590  -29.134315  26.098228  -23.065153  24.013599  11.358426  27.619350  19.153673  
+-28.520651  -20.618023  23.632936  20.879873  -28.919048  -27.908325  -29.355772  -29.885509  0.446875  -13.041409  
+-23.555792  -30.753073  26.267303  6.488521  22.797260  -26.167721  16.045740  -24.451176  -29.071766  -21.936409  
+-2.366049  24.333763  -21.207254  26.385887  32.747791  25.520645  -30.213165  15.314766  -24.096134  30.081877  
+27.522026  -25.469622  24.750177  -31.094889  -12.456142  -5.652915  -26.168478  -29.880280  -23.040524  -25.145845  
+31.086567  0.399763  -27.909199  -27.119717  12.772094  25.539625  30.645590  19.174603  -7.188969  -17.428612  
+-25.660950  -27.140112  -10.629828  -27.045063  -27.010494  -28.772854  -19.600899  -28.375753  -25.870188  -30.110542  
+-21.292349  -21.289106  -21.501253  21.520546  15.719978  15.368153  31.115133  23.528603  -29.798271  -28.217384  
+-26.340864  -30.756704  25.837341  22.221676  -17.646425  17.593237  -22.739998  -27.202002  -27.505981  23.860538  
+11.569932  28.003872  -25.262947  31.434067  -22.080194  7.423393  30.620216  -12.076071  28.589949  30.061836  
+-30.388857  24.292381  26.421072  30.324377  20.356447  9.037641  -28.085680  17.950548  25.793188  28.759373  
+-23.263527  18.627926  -30.141863  7.740365  22.029932  28.499783  30.285429  -26.274853  -20.482277  23.133362  
+32.813244  -20.900084  -24.991117  16.317175  25.896717  -30.170595  -20.606852  -4.947311  -27.353762  -17.023895  
+28.343552  -27.288149  -24.964575  32.622482  15.900583  28.223110  -4.864933  -12.131302  -28.233732  -30.439581  
+-24.307573  -30.622923  -27.477850  -28.684631  30.428198  -28.051462  -9.877420  19.513367  21.287836  -22.723270  
+29.043144  22.876682  -27.117975  30.219616  -26.863281  -17.694811  -23.721672  -30.955458  -23.429083  -10.684244  
+11.060363  -26.773920  -22.583313  27.121037  25.142149  23.520163  -35.005611  -30.745600  -23.574781  8.635379  
+11.357567  30.427563  20.701384  24.337975  26.384836  26.677534  -7.507456  -30.599634  -28.048975  -28.365108  
+23.339508  20.602566  -33.920498  -10.787850  -27.863245  -21.197025  24.051607  -29.691181  28.696939  -16.355665  
+27.156740  16.964241  5.571268  -27.733831  -30.067137  21.884510  -21.251928  -30.481337  30.485355  24.729668  
+-26.687622  23.605410  -20.949074  24.506336  22.576454  -28.776810  28.682386  8.076501  30.059227  -23.765211  
+19.499861  19.529318  31.583889  25.157722  -26.286268  -34.550621  -23.867632  26.800932  -6.820005  12.327001  
+-17.908678  -15.761912  23.849796  25.471844  -27.772625  -23.331366  23.346025  -20.287111  -19.387089  -21.679003  
+-29.713295  -7.165277  25.469320  -32.656456  -31.675169  -20.736795  22.852297  -27.023853  28.455851  -4.415093  
+-31.419279  28.685366  -25.388046  29.722818  15.015548  25.824671  0.442656  25.495337  -24.566687  -24.969934  
+27.788668  23.789171  -15.574149  -23.203178  -29.012049  32.678471  25.480368  11.069133  22.169937  17.818844  
+27.556049  -14.146981  27.893488  -0.205255  -29.667313  27.449438  -27.657949  -30.545671  -24.696152  24.537466  
+22.982018  33.590633  21.231791  19.734377  17.219254  7.570241  20.145592  33.318871  27.775024  -16.882725  
+15.009192  29.450502  4.686261  -3.324030  -34.471027  -33.349808  25.874115  5.478483  -20.379084  -5.739206  
+13.428425  -26.141970  20.602623  14.879295  -27.248064  -28.260799  -31.781689  -25.459976  -25.936277  -28.731651  
+-21.017727  25.616560  32.629795  29.306215  -23.032677  27.910164  -23.108871  19.208513  -30.069599  -23.484737  
+-23.726578  -29.088511  16.016588  12.965228  -26.729847  -29.126991  25.498001  25.654112  -29.098560  -28.284170  
+-27.480677  5.697550  -30.919975  32.190777  11.537769  -30.228153  26.874218  32.551582  16.837023  12.355412  
+-25.134735  28.210272  -28.118145  -27.915285  -31.248295  -29.046194  24.636982  -18.550402  11.327372  -20.042549  
+-27.592712  -26.467159  -30.820688  -12.226371  25.467739  28.521854  3.692282  15.284110  14.373300  31.233538  
+7.177904  11.423222  -25.810898  -26.818068  35.479370  -25.740366  -30.163752  15.037313  -12.527069  25.534302  
+-2.638413  30.585152  25.912683  -18.014620  33.231594  -16.783199  -17.315958  28.074158  -25.544659  29.678978  
+26.285452  26.749672  -33.995316  26.974787  -8.064065  21.458660  32.709496  -30.895699  0.037257  2.178612  
+28.732716  -23.296423  -18.691906  -31.023714  -23.567375  27.788317  -26.552231  19.305607  27.235626  19.013712  
+-28.392611  -29.439262  28.464724  -19.999983  29.721647  21.496183  3.553029  -24.798029  23.571009  -25.178368  
+-25.590965  19.625475  32.139542  12.308794  -33.614574  -24.932693  -12.018950  14.945961  -28.347635  -11.778281  
+-23.936697  -30.939325  8.649321  -24.380640  -21.523420  24.172867  -21.442892  -28.130402  -26.865345  -18.526720  
+23.959433  -15.302689  -28.791048  12.541603  28.438076  -25.868076  31.533470  -28.832186  -25.802338  -18.020861  
+29.430056  -13.753139  -30.351770  -19.868355  28.745502  16.640471  -14.774107  26.327574  16.127264  31.980478  
+-29.641502  -17.705847  24.447769  -24.623304  -16.330515  26.228224  29.003815  -31.477066  14.041460  -27.526264  
+-15.739707  28.716131  2.340807  26.645828  13.053572  -23.754354  17.074375  -34.384674  27.854647  -31.704470  
+-27.404348  -28.118250  -33.941959  -30.466818  -11.816746  25.685192  -18.100304  -30.087223  22.637438  13.770916  
+30.122972  -29.118546  24.532595  7.057877  30.036701  29.099798  -7.071823  24.592756  11.401652  -26.073618  
+-28.692404  -27.009842  11.905396  -28.387501  21.222261  25.882669  31.801846  -29.021738  22.581629  22.886696  
+-23.964380  -30.042795  11.303555  -25.320282  27.864023  32.828209  28.997120  16.339516  -28.981457  20.930676  
+18.626646  -29.582371  -27.551277  -27.697216  12.197803  18.428934  24.812458  -26.544010  28.405891  -19.468340  
+-26.839275  29.005001  -26.756369  -24.117373  25.626078  -5.748903  -33.437027  31.553396  16.725538  -7.001272  
+-28.237995  29.670803  6.692709  17.942415  -30.868332  29.001917  -14.060006  23.688519  26.160295  -24.409889  
+-17.979515  30.931259  25.636486  -31.712921  -25.322096  30.303371  19.788139  -14.276178  -5.861047  -31.922964  
+29.199034  -28.819431  -12.205784  -31.307295  -6.876378  -7.332343  25.940901  31.060841  -32.258877  -20.013409  
+6.463464  -32.547859  28.319059  28.421572  -20.190582  33.658432  -17.270596  16.164312  -22.368608  -26.789709  
+-27.753912  25.124001  -24.065769  31.459173  -25.951307  -0.960714  22.520782  -28.286674  -23.691193  25.823711  
+-32.022495  32.072910  -24.703007  -29.224352  -27.904415  28.083996  -5.967274  27.038555  18.721811  3.493615  
+-24.128891  -22.292822  -12.250476  -23.735218  -31.929567  -25.620970  28.912012  27.308689  9.154576  -27.708202  
+-2.529298  -27.601696  -29.463570  -36.215473  16.249651  -17.557255  -29.444719  -11.908958  -6.184426  23.358080  
+22.185682  28.216541  24.036819  19.887381  -31.464809  -26.278393  -26.571669  -31.595316  7.374464  20.975615  
+-19.376390  -12.690674  28.849831  -25.717209  -15.535289  35.125530  -7.713222  23.484344  28.977058  23.431211  
+33.227535  -27.833324  24.351425  25.713518  -28.399006  -17.730026  -1.729472  27.119209  -21.333033  -21.328016  
+-26.771830  -28.014515  32.189442  -25.928280  20.033003  13.710388  -26.982601  -3.500313  -1.506497  32.057953  
+-15.927268  -14.658901  -31.679316  -22.644035  -30.882013  25.508205  -3.187066  10.148254  12.417383  34.725166  
+-22.061447  28.227926  -18.534262  -30.699667  15.779271  -29.329414  28.158079  29.011202  19.597822  -26.136396  
+-12.276376  15.892327  -13.182528  33.299500  10.344028  -27.171360  -28.183661  -29.153164  2.250963  23.829035  
+31.585875  -12.671778  27.297150  26.335220  -31.710556  25.913471  -8.017223  -21.332951  -17.157022  -30.292700  
+29.741533  29.534622  26.601515  -25.145164  -24.681961  15.980844  9.520965  -27.243650  -19.263262  -22.375216  
+25.433943  -24.467484  -28.143906  25.495886  -14.842226  27.493128  24.425079  -18.644470  22.826246  -24.302608  
+-11.835747  30.136255  19.106735  30.824072  24.703981  27.172768  30.038048  29.186287  14.920562  -25.028795  
+-24.752653  12.587847  -24.860634  -29.029341  -27.967066  25.020454  29.418030  27.942430  -30.215551  -5.299477  
+30.899067  10.949029  30.686211  1.537882  -29.977716  -26.814390  27.016579  -25.541710  -11.079510  -30.835358  
+-23.126663  25.899948  -17.426580  -17.390171  -30.503218  26.251877  27.270002  -22.473648  18.283787  30.123409  
+26.261578  28.262335  -11.489004  25.436064  -26.994009  -12.419476  -31.502707  29.040253  -27.648924  -25.962418  
+-23.910925  -25.429150  32.867672  -24.749254  -7.415473  -30.704737  -21.911823  -22.141689  -15.827194  16.446846  
+32.822388  -26.108095  23.612616  -26.657368  8.439564  24.641146  -6.179613  33.014786  10.439384  29.579102  
+28.725666  -33.654274  22.856649  22.741859  25.022173  -5.115507  19.444532  -21.232260  26.221478  -29.678156  
+11.633716  -25.277298  28.206738  19.001387  -18.242786  -17.984953  26.639774  29.904631  -25.861620  30.963205  
+26.100559  -31.884655  -24.972794  20.931379  4.227546  -17.869324  30.058016  32.515915  -28.206936  12.626034  
+-32.133125  -16.602737  20.367025  -31.185806  -19.106474  22.728912  -8.192968  -31.767912  11.123755  24.181980  
+-28.589380  29.538591  22.653214  -0.282040  -20.724344  -27.879545  21.328064  -28.110569  25.765228  29.024187  
+30.860882  -36.364681  32.781525  3.949558  11.079511  5.537791  -25.393511  -25.208115  22.980810  3.930116  
+-27.158617  -31.621920  -30.083405  5.409239  28.529272  29.010754  10.388368  -1.306479  -30.552919  23.308531  
+30.734177  -11.201901  26.037382  -29.200989  19.392895  28.737637  21.011969  -10.357248  21.548880  -32.679043  
+-30.674662  27.818089  -29.203140  -19.854593  17.044485  20.876467  -25.747786  -28.878233  24.511505  -23.141962  
+15.673603  23.288090  -27.818857  -32.513565  12.726074  -23.733049  6.036387  -27.862049  31.193783  28.119864  
+-25.304333  -10.877955  -31.227898  -16.382595  -28.835913  25.393698  -28.896641  30.803068  10.476258  -26.465452  
+23.626778  23.357811  -21.206614  -29.721647  -28.852413  -21.211292  23.961103  28.441339  28.036560  14.108786  
+-30.235542  -16.326653  27.562990  18.357885  -28.368156  25.471575  31.773487  3.734513  26.049023  27.969463  
+16.980251  9.390479  -26.069489  7.320188  -28.113647  -23.642582  -30.748701  -23.248289  30.193817  29.133545  
+-15.223531  29.817465  25.503374  26.672890  -30.908064  19.442265  -24.689878  -2.461775  -11.962740  30.012175  
+26.024065  -28.097883  28.531002  -26.941986  -9.108933  -23.738096  26.942194  -32.118740  -21.525244  0.961816  
+-21.030514  -29.363424  -29.957251  -3.642823  25.494364  -27.320837  29.038359  20.022373  -21.875433  -12.396379  
+-2.554545  -19.473997  -29.914202  -25.034857  28.580915  22.604307  34.856983  9.326077  32.951740  22.441561  
+24.712944  -26.632645  -28.892635  -31.333563  -14.416006  4.310412  -0.897436  25.962732  24.652559  -30.673096  
+6.788627  -21.653187  -6.069960  12.866386  -27.860754  -26.680700  30.156889  30.329958  30.810295  29.371235  
+21.382395  -22.684311  23.297520  33.335854  -27.297352  -17.233984  -31.350203  13.568316  -24.140413  28.863089  
+31.643314  27.707121  -29.477461  -9.803405  -3.628554  -7.854528  -23.128674  -24.773476  2.337460  -32.242786  
+-28.357882  -29.080982  27.726603  -32.353439  -22.851774  17.860350  26.096420  12.912831  -27.845894  -11.446677  
+-17.905165  -28.183750  19.077509  18.199484  -28.807766  -32.092926  -22.621668  26.957857  23.457119  -25.195761  
+29.155462  -25.485563  -30.272305  -16.998955  15.935428  -27.434748  16.272764  32.845551  25.275352  20.979900  
+32.467125  2.939564  -31.076166  27.574575  30.052773  16.918018  29.306002  23.624807  19.740393  19.112986  
+-8.465060  31.190577  -19.820602  25.919401  25.398651  -25.740845  -29.263819  26.071243  16.005625  20.981049  
+26.799908  31.759245  13.203218  30.501919  -30.048819  27.405413  -20.117563  -24.532503  -17.605293  -1.400979  
+25.599031  -25.007303  -23.524038  -23.979019  11.082253  26.192183  -31.115137  -30.058470  2.727974  -27.772297  
+-24.374161  -27.365503  19.043154  30.259495  26.966307  24.007391  -26.921694  -27.449593  -0.693423  -26.959122  
+-16.835014  26.655935  -29.384642  -20.400610  16.875422  -9.288965  24.921650  28.477253  27.882397  31.178291  
+-27.775560  11.304965  -30.917141  -23.896084  -27.252436  -5.768191  24.565573  25.989275  30.708174  -27.192362  
+-21.059984  29.560249  11.736514  6.236456  -22.555840  -11.700287  29.706589  -32.870235  -30.064922  -32.728569  
+29.824356  27.638718  -26.119389  -25.752388  -7.091943  29.872379  -25.563438  -20.491268  -15.487212  28.308151  
+25.054296  -31.876778  -9.431026  20.878891  11.869048  -26.002031  -29.155945  -26.587269  21.408344  -27.389734  
+13.360140  -28.607838  17.558054  29.380537  -31.186047  26.913769  -29.970146  -22.124077  15.529097  28.936937  
+-26.935667  -27.751474  -25.886803  24.869987  29.632679  4.262222  26.330482  27.695890  20.406704  26.952892  
+27.773643  27.070660  29.386000  -15.045194  29.023048  -14.664932  -26.053480  -28.607267  -29.265291  19.901291  
+25.224318  30.863043  -7.171692  -26.044735  25.731773  7.060417  24.963589  -31.946568  -24.867212  23.922573  
+-24.416780  -3.127780  26.428778  -31.601528  -28.607794  -32.702267  -30.195272  19.899616  -32.712517  -13.622476  
+23.834667  -20.505260  18.961716  -27.534723  19.927999  -27.138330  31.404387  10.160913  -26.514894  28.471298  
+-32.579205  -29.109819  -23.370672  0.175204  4.152793  26.609514  -30.408527  20.083223  30.345333  -30.777744  
+-25.165133  26.590651  15.164800  34.035385  24.890318  27.121458  -30.423645  6.241826  -13.916649  -20.982605  
+24.287477  -4.930229  -29.895758  31.450027  -18.431036  -30.184004  -14.347340  -25.172152  25.120384  -5.390819  
+34.449562  -26.830839  -22.914642  26.217722  16.639507  1.244331  33.186203  -28.394007  -10.429307  18.779203  
+27.026775  24.603586  -27.057831  -28.173298  -25.732758  21.497812  -24.456360  25.356434  -5.640959  -28.189854  
+28.458910  26.698551  10.737266  -30.727051  -14.385382  -3.846819  20.652956  -28.468721  32.331146  -34.411369  
+29.262314  -32.190617  26.086044  28.936239  -25.675840  -22.062592  -5.182319  -31.989595  9.402879  6.248139  
+28.646204  -26.018677  21.673767  30.117731  -24.644100  -25.889296  30.692308  -22.026123  -28.589268  4.404716  
+-22.393431  -21.427132  -31.853867  16.146013  -24.506269  27.188745  30.711731  -34.057224  27.288538  14.982982  
+20.574594  -15.383286  20.906435  -28.355043  32.379101  -12.020234  28.393415  -29.822983  31.416735  17.007446  
+-25.502262  -9.228008  -3.837359  12.872238  -26.151907  -25.499598  -32.324112  29.786247  -25.967714  28.234489  
+-23.084305  -13.282383  19.637316  -28.958052  32.728695  24.140638  -25.476992  -10.069501  -29.599485  -28.257629  
+-25.001698  -25.255516  -32.657532  24.237925  -20.142313  -31.082474  16.980850  -25.324553  -24.850039  -22.198929  
+-30.783539  21.704845  22.750927  -26.120293  28.412706  -29.031534  25.596516  -13.815741  -21.302029  28.485952  
+-11.812229  -23.016167  23.444263  31.846100  -23.763472  -24.157795  30.420347  27.766439  22.159620  -26.217464  
+-30.269299  23.074360  -17.584850  -24.882748  -28.447580  -9.149231  -28.034163  -20.211983  28.957960  -28.144926  
+-28.273239  31.753962  -31.849707  -24.950897  29.024555  -30.823227  24.291180  -20.824249  -22.976759  9.613055  
+-19.141724  -18.903481  33.267681  -29.076090  22.744261  -21.670807  20.176722  21.742088  -27.476349  -20.208090  
+-21.814678  26.229355  -22.394960  -23.985876  -22.850430  -11.157884  25.720003  -11.150975  -29.975357  20.922470  
+-24.818188  -27.971861  -24.304016  33.115723  -7.687469  18.482296  25.003521  -28.380758  -27.353703  10.670769  
+34.711102  18.940998  -8.904346  -29.782681  17.538698  28.884752  -30.254866  -7.674024  26.520487  -22.265539  
+20.902689  8.025566  18.674671  -14.390745  34.189243  25.087580  -26.964514  -30.336157  29.974638  -32.069538  
+27.297630  32.444088  23.818474  13.905664  13.886219  33.197960  19.602440  -5.438952  -29.282585  4.220894  
+-31.047628  -5.967454  -15.532126  31.632353  18.968309  -20.643166  25.451929  -29.252943  25.353363  31.446577  
+-29.480902  26.957392  2.875650  -30.756542  28.904150  -30.677294  -7.803256  -3.807869  24.872663  -29.877567  
+-22.565489  30.024027  22.170925  27.085526  -26.759377  -20.698097  24.962259  30.733471  -6.988181  -26.746565  
+-26.527519  -32.189098  12.014070  6.617297  18.855453  -31.615606  22.567261  5.846895  30.375355  -26.095812  
+-27.512320  28.680782  14.500208  21.156994  32.140953  -3.669570  5.279128  -24.266092  29.650183  23.805666  
+8.043905  -12.737823  4.512187  15.255741  33.115318  28.959831  31.735544  9.968329  -23.206686  30.895378  
+26.174623  26.838005  -26.408766  2.086205  -19.624910  30.056616  -26.491264  -15.869252  -27.731758  -28.084812  
+33.798901  9.602103  5.424158  28.581442  -28.910339  31.374783  -21.994387  4.254702  31.387598  -16.908768  
+-22.995621  -29.013706  -3.134014  34.395058  18.291862  -14.794615  -25.759489  29.110916  32.434479  6.428141  
+22.396238  28.856667  24.694206  29.728733  17.439247  -24.605965  2.835178  32.425121  -29.118446  32.634369  
+21.048349  28.621387  29.156994  26.189903  -29.382019  23.461313  28.266794  -0.439052  23.495407  -24.725916  
+-27.643070  -24.467356  -24.125101  12.355736  -31.026474  -11.452502  29.360916  26.205215  -27.469412  28.773991  
+17.492985  2.943702  27.385895  17.119638  35.015461  -8.329785  -29.867542  -22.840242  6.396861  -29.727692  
+14.143679  -29.546240  25.005054  -32.755421  4.263321  12.211868  -25.658663  22.994242  29.143982  -22.893181  
+24.109888  -27.497812  -27.954905  32.443611  -3.344005  -31.847933  -11.106377  29.914062  -13.352994  27.370584  
+29.769308  -27.634550  10.123406  -0.666036  27.717897  -22.755526  -21.831999  29.521137  -19.971655  31.803200  
+-27.502804  34.955513  22.627068  -26.192478  -30.501144  25.425434  -17.472500  33.547077  -21.327307  9.094096  
+-30.031528  24.495207  29.067213  27.323195  27.462391  -4.872978  30.398762  -25.902514  -27.583355  10.717492  
+-2.095082  11.889703  -10.809792  30.213783  1.781955  -29.186869  -11.892235  25.833742  -32.324806  -32.079998  
+-29.235382  30.834251  30.403370  -11.315332  -24.759306  31.109966  31.431036  28.520866  11.053640  3.461449  
+-30.244762  -27.393930  28.511477  29.816730  -27.471121  -7.608500  26.504629  -28.544924  9.468965  17.659010  
+31.055311  25.810459  -26.201794  -27.467518  -26.213955  -27.562859  -29.694899  21.291172  6.601510  21.115910  
+-24.484440  14.377709  27.141979  -24.846848  29.676838  19.359415  -26.188015  -28.933739  27.068943  28.852873  
+-1.777584  28.690315  -30.685251  -25.811670  -26.726999  22.073185  30.474836  -26.577009  -1.388977  -24.970066  
+-23.217674  -9.603335  25.585693  32.880417  17.636166  -26.905874  29.450474  17.441338  -29.926682  -2.519353  
+-18.993116  -17.049662  -29.117178  26.266535  27.745338  -24.618834  -32.491642  21.682329  -15.290477  25.305677  
+21.594990  18.116844  -22.970961  26.803097  -28.312132  -25.754536  28.784237  23.493803  -23.988674  24.755627  
+26.273111  20.164145  -30.960867  10.705051  -32.859798  -8.560682  27.298222  26.350872  -22.881374  -29.441200  
+-22.493010  23.351444  28.667454  -25.100960  -27.100527  26.709175  -27.322639  -25.643158  -23.143845  20.998848  
+33.212540  -22.807255  -8.209283  -23.595226  -29.341192  24.369164  27.328712  -26.528467  13.444833  -27.852577  
+0.897182  -18.460764  13.430999  25.243839  -22.347672  26.362997  1.497149  -28.266176  35.687267  17.992989  
+10.311977  32.574795  -0.212680  -30.948067  -28.844055  -13.601215  1.557753  25.845419  -26.258997  -30.565941  
+-31.612873  -9.108874  -26.461384  -20.205444  -30.433044  25.255568  26.380428  -26.816496  -26.852779  9.175333  
+-23.040833  -31.964855  -25.077463  -28.732893  -24.889439  26.744467  -26.337885  25.007233  -24.697218  22.533663  
+30.737677  14.543345  -26.202257  -15.591269  -22.377333  28.348845  29.444912  -24.730145  -28.503851  18.424576  
+-26.413193  28.465033  23.083967  30.347820  12.164445  -25.689840  -32.023987  -12.430599  19.589396  -26.604269  
+24.747435  -25.146259  -8.288306  -26.737041  -12.364920  -30.125212  -30.506683  13.233122  -27.001324  -25.677553  
+-23.593397  2.490179  30.440943  -25.393753  16.548756  -32.422806  -30.887869  30.479034  -17.930670  22.131184  
+-22.438736  8.358352  16.260340  -32.475449  -32.186527  7.956705  22.723034  18.579256  28.241919  32.100170  
+19.554148  -27.834885  -22.022249  21.876564  23.675402  27.664116  -25.391336  26.641520  21.600826  -25.006041  
+-25.975653  20.819170  25.681568  -14.112076  30.400187  -26.938988  -31.833731  -24.777851  -23.332275  -6.757283  
+-22.558081  -30.685102  -29.712374  23.001144  14.667596  17.613012  25.100410  24.326008  24.480333  -29.273287  
+-26.562567  28.114670  -24.706234  30.221634  -28.659506  -30.630051  -5.832726  5.143960  -9.164999  28.023228  
+-5.923516  -11.563029  -24.251698  -33.599762  11.713305  -26.949112  -18.838186  30.039885  -29.089350  -27.182583  
+-28.901306  -31.126938  17.398819  -26.592638  30.544956  3.800116  29.343433  25.095493  9.057474  -27.154503  
+25.736546  -13.424304  30.470133  20.869114  18.423546  24.845211  -29.066833  23.181301  -30.541372  25.994198  
+27.423670  -27.840143  13.429342  31.628370  27.305670  -15.566775  21.208973  30.164932  26.405418  22.738131  
+27.583424  17.739641  -28.972815  27.014660  22.040768  28.733265  5.443688  24.076410  -30.501183  -22.660669  
+29.299047  21.763460  -25.778793  -30.054329  18.825420  -28.253668  -18.830385  25.444197  27.765272  -11.697937  
+-16.964239  -30.562384  30.909069  11.853930  25.537861  9.847809  -1.116659  28.196758  35.026066  -25.823643  
+-27.128920  -31.256323  21.659021  24.397120  -25.733042  20.490381  -23.214678  29.172058  10.333962  9.034096  
+14.474123  -23.810432  -24.891966  18.942736  -28.131004  -9.560011  21.164343  -31.593370  -23.664772  30.311522  
+-30.458584  -13.034205  0.747105  6.969122  32.300362  -27.568441  19.547087  26.822100  -33.261684  -30.514378  
+-32.572960  -16.802517  -21.750109  -26.299847  10.077271  -26.800924  27.696951  -11.072599  26.649021  33.732758  
+25.869362  -14.049567  -31.227896  -16.428043  25.684437  26.808477  22.170685  -32.006725  -27.951071  -26.857271  
+25.632647  31.340467  -10.101071  -27.868580  28.392941  -30.367975  -24.844458  18.878220  -28.495523  -23.132236  
+1.986802  -28.611712  -26.413385  -26.797050  -25.955442  -30.128197  -26.639410  -14.373254  28.916788  19.168682  
+-19.165081  11.260596  31.176182  9.450422  31.285467  -20.239744  21.123598  21.685785  29.227621  -31.673935  
+0.587843  22.940138  28.678320  25.398922  -18.522312  12.439598  -29.282730  33.175476  21.039089  -26.045649  
+-25.681229  -5.916020  24.594976  -27.655167  -19.081779  17.430195  -26.535902  21.330406  -29.509890  -34.709892  
+-24.813129  19.791067  26.324507  -33.118763  -18.493454  -25.687447  26.396252  -1.613418  -28.247681  -27.283630  
+-25.763205  -18.964548  -24.838812  -18.957668  30.600906  -24.606560  10.967690  -30.789375  28.121155  5.437460  
+-28.941336  30.519905  -28.119589  -23.024672  28.105591  29.297325  -1.960685  17.279530  -29.578667  -17.794458  
+-14.513925  24.624935  -23.667196  27.040792  3.144825  28.194065  17.492538  28.565624  30.727345  29.069174  
+-23.433559  -5.516361  30.931314  25.211166  7.632286  28.322212  0.928505  33.286747  -0.994150  33.493996  
+23.183256  27.546146  3.295649  20.680958  32.848858  14.191882  -20.808727  18.313766  28.677576  34.206108  
+7.304214  -26.545599  21.813995  -29.120394  -32.868858  -30.856737  24.989367  -3.438031  -10.098872  30.483994  
+-1.543379  -9.049648  29.524065  29.556068  30.132706  31.693953  8.643419  16.408585  -29.715712  -27.209595  
+-1.318370  -28.632818  -5.848276  -19.451675  27.203268  29.918613  -27.557243  -29.160196  11.098360  30.477375  
+30.259293  31.887877  28.997480  -26.240725  29.429012  -0.215187  31.697910  18.112293  7.368057  26.644302  
+-28.542744  32.168686  28.398161  -25.519390  21.313173  24.417574  -23.385223  23.575758  -24.957533  -11.581442  
+-29.584984  -22.043736  -19.973017  -13.154330  27.776617  28.880579  24.541265  -26.868013  -23.242449  -26.350306  
+27.122181  26.698082  -16.079922  -30.070417  -15.069088  -32.086346  -6.156638  -21.599962  -29.905394  -22.629557  
+23.463209  -25.001377  -24.783054  -28.923738  -32.481968  -22.494843  22.910870  -24.435270  23.247295  18.574396  
+-16.888866  29.557543  25.438974  16.747263  23.634312  30.699593  31.858620  -22.419878  20.923744  27.286860  
+23.698317  -28.092585  17.806080  -27.186083  4.859796  30.562733  -21.827574  -19.261030  -30.630808  22.816006  
+8.570764  -26.789154  17.791445  -28.964176  -29.611862  30.816334  25.552217  8.495584  -19.825544  30.543760  
+10.111639  -19.598457  23.963257  -30.313669  26.156183  -25.989300  27.614353  -24.404526  20.948635  -30.697847  
+23.499454  28.296463  28.447521  -23.573496  8.948705  -27.488176  -21.296618  33.204815  -1.533401  -32.551239  
+-28.905920  -28.724876  -11.068836  23.758741  -27.164768  2.238347  25.200848  -21.659460  31.813583  -25.553432  
+24.451195  23.192873  17.820963  28.785830  -26.175900  -20.575638  -19.249416  24.187832  33.765800  27.542351  
+31.044796  18.402918  30.415819  22.584785  5.366678  1.192327  27.368513  27.835930  -29.189474  -26.132465  
+-25.984489  -25.897291  -24.572817  -27.869888  35.358978  0.409840  -29.416412  23.666075  -25.127134  0.175234  
+-11.632380  1.468935  -12.562681  -4.036163  -17.348457  3.709737  12.364988  -29.359982  13.158352  3.583840  
+-31.037598  -23.666887  7.681589  -15.789920  -18.904598  -27.841438  25.454210  28.760548  18.029247  16.851074  
+26.357662  -25.009775  -29.791250  14.314116  -28.555151  0.319603  -28.451876  23.641190  29.803474  -19.127604  
+20.317736  11.170012  26.932655  -15.372322  20.496868  -30.759846  12.953140  30.441490  -35.144604  -22.444994  
+4.470020  -14.852816  -28.201660  30.268980  33.456806  26.419891  16.373205  -28.011635  10.045803  -28.102468  
+-29.568325  -19.445253  -23.598480  32.237045  -11.473091  -27.800039  -18.787716  -6.833638  25.951796  -29.994253  
+2.175416  18.538134  -15.958865  -26.025406  -28.610727  -23.338968  -29.128931  28.077280  29.938484  -31.821379  
+13.321897  -23.288567  25.899305  27.282066  -29.057159  7.306644  -16.628313  19.552446  28.743105  -33.372395  
+25.663147  -24.316936  30.338200  0.198456  26.764936  -28.802996  -24.417147  26.743793  26.973076  -22.167675  
+-24.675283  -29.163818  4.554856  29.763702  -23.107208  -4.606274  -25.717699  30.389217  -26.685402  -24.885359  
+17.466875  22.449562  -30.188108  28.243744  30.856178  -26.148636  -4.465913  -22.124397  24.865055  -26.878393  
+13.763696  19.437191  -4.767939  -30.196630  26.213408  27.918175  -29.278442  26.010557  -18.770628  -34.011822  
+-29.065424  24.655348  -31.381573  -26.498888  23.706768  1.163733  32.557743  29.334454  -25.294851  0.571252  
+2.821732  -29.741623  -25.697899  4.740164  -2.629756  -24.113411  -33.509792  -23.366123  -22.589396  32.119278  
+27.928167  -28.453217  -27.783646  28.721386  30.288094  -7.694778  26.734276  20.536390  12.432297  -27.357151  
+29.255533  -28.615919  -30.009079  -26.702307  -26.329327  3.907118  14.859112  -0.607094  -32.211464  21.356220  
+-18.793222  -3.798059  -26.758448  28.500853  34.239231  -22.307819  -26.285475  27.232656  9.680526  -31.123280  
+-22.048409  19.472820  -27.342068  -3.084518  31.052856  28.628109  -18.369673  -6.574208  26.069016  2.390783  
+30.838614  -31.065832  -23.328526  -27.681437  28.729666  5.293194  22.912565  -24.776793  -3.040089  23.239820  
+24.948847  -29.624977  -18.823366  22.120489  -19.881227  -27.936697  23.355516  13.080451  31.027403  -27.728983  
+-27.207590  -31.597433  -12.881650  -6.010530  9.100506  -29.575729  -26.902830  23.663296  30.666758  31.928682  
+-21.830980  -31.940022  -27.536440  25.065334  22.005463  27.432138  -18.701872  -23.727381  25.942179  11.190812  
+-2.231342  -18.594671  0.143037  -13.649037  -17.063463  -30.886179  15.078956  -32.989906  24.989979  -31.739000  
+25.452377  -27.772600  -27.105972  25.484657  -25.555532  -0.991211  -20.596451  -24.194292  -28.303204  -24.034193  
+-20.308994  26.506071  -22.997358  -27.003933  27.493284  -1.058701  27.859604  -27.349453  26.765139  -28.524254  
+-16.797264  -24.915733  -15.681656  -26.831530  -30.325777  31.558727  -5.553338  -24.391125  31.935699  -28.778387  
+31.743446  26.157917  28.448555  -18.487127  7.345466  1.489666  -29.501638  11.606647  -27.396669  -13.608665  
+-27.674065  22.803783  -23.587780  -5.956399  17.851345  -29.958305  -2.373573  32.541912  -29.145765  32.780499  
+23.156601  -31.936874  -23.037279  23.210339  -16.066366  28.110289  18.845188  30.645571  -26.768814  -16.099922  
+27.679998  -20.325911  25.808142  -25.733467  -28.541807  0.567349  28.784498  26.622042  28.476433  -1.516529  
+26.030373  -16.593649  22.357252  26.293604  28.905434  -27.011293  26.409996  -18.414158  -21.725388  -33.704205  
+-24.948288  -25.220125  -20.178833  -7.443022  9.836597  34.162106  -27.491079  27.349024  -30.223257  -23.430996  
+18.110004  -27.612009  -26.904844  -24.353579  4.394511  31.755394  27.892437  27.468506  -19.308678  27.300795  
+-27.026585  27.288965  -7.176413  10.046975  25.635988  23.404205  -28.872671  31.483458  29.834528  -28.559134  
+30.009659  -11.481675  27.223341  19.816360  4.897099  -24.425240  -28.176208  -27.415291  -29.087711  21.933622  
+29.687820  22.965918  27.730066  31.794384  9.901048  4.573306  20.007175  -29.642658  -26.747276  28.268198  
+-0.865210  -19.871767  -19.929611  -7.993979  18.854616  -28.328897  -34.383411  22.391741  31.597097  -22.520195  
+18.711977  -36.071030  27.292971  15.776377  -27.944176  2.161903  16.054998  3.965790  13.864322  31.318604  
+32.407635  5.166471  16.989594  27.554375  27.841732  26.678566  31.432329  28.344770  25.829052  -4.596391  
+-27.288744  -30.192442  -24.259874  28.172007  22.895628  -0.534298  -19.668987  -6.121844  -27.388472  -26.192146  
+-29.263872  -30.790047  19.891373  -21.585848  -25.329546  -19.121740  27.868361  -25.622396  -13.165931  -27.882870  
+22.623146  23.712912  31.028137  20.355440  25.867502  29.143358  -27.648264  28.304945  17.928005  15.036697  
+-26.480713  -10.525772  22.626904  -30.745777  -24.995880  -13.706410  23.108267  -30.951660  -27.589741  26.716717  
+31.877645  -26.776035  -30.638912  -11.357694  27.723171  -14.465068  -13.479167  29.104784  -25.188648  -26.069992  
+-27.348982  15.839380  27.952333  28.053581  21.310860  29.003035  -17.415442  -17.901690  -26.812763  28.250551  
+-2.292844  -14.367384  31.270039  -2.544875  -3.583298  34.580555  -30.110287  -25.307888  26.263306  -18.783525  
+25.580534  19.344273  24.519999  -27.579952  -28.082302  26.304674  -7.087376  20.679804  -28.221176  25.788729  
+26.403370  0.119673  30.563673  -25.678677  23.550240  26.026884  25.694942  -15.687905  -26.583086  28.904022  
+-26.024733  -9.991076  -26.260162  -32.388321  25.972918  26.600454  24.502594  25.001644  27.591122  -23.150839  
+-20.381500  29.739450  29.266190  -19.060871  31.730856  -27.851404  -29.299297  22.886538  20.299524  -5.612797  
+-30.245682  9.170924  27.835001  28.510269  -26.989723  -29.905684  -21.079306  -4.574450  27.621330  26.835732  
+-11.741691  -21.096174  -31.672081  -26.892820  -20.835611  26.145498  -19.070086  -8.344960  -25.313398  -28.809412  
+27.975668  29.217541  -21.093300  -24.969948  24.385786  27.821079  12.356703  29.299297  31.538540  -18.826864  
+-0.011608  -21.470102  -21.539015  26.133718  -24.347315  14.058448  -29.397707  -32.114067  27.519901  -28.864784  
+7.751823  25.806000  32.901085  -18.736755  -30.452698  31.745525  -19.301916  23.036520  -1.871948  -13.531702  
+-25.096243  -22.490328  -29.185835  29.310244  -22.384819  25.474823  -23.745300  6.527666  -25.035147  26.242929  
+31.915901  -17.114971  33.850632  -23.008661  -20.975691  31.195967  -20.159695  25.620447  -9.417980  -21.470547  
+-20.885433  -26.098394  -34.525181  -27.231531  -22.594303  -19.190878  -17.335438  -22.200954  23.105984  -27.633783  
+-25.089838  27.039967  -29.545822  -26.537960  16.975136  23.591961  27.614595  -26.206774  26.214140  24.426662  
+24.727230  9.407478  -19.955605  -30.136086  32.399204  -29.649614  31.909718  -7.453758  -6.022649  21.740572  
+12.958760  24.706667  -23.926395  -30.368166  29.662342  14.598271  -25.140099  -27.388971  -21.885681  -8.899488  
+-14.913486  5.755036  29.146093  30.288597  26.944231  -23.483667  28.112745  23.703074  26.498447  25.958067  
+11.558963  31.078140  20.723763  -30.646187  9.957328  27.129442  -30.294744  21.838882  30.638649  -5.043203  
+-29.248917  17.624363  31.224365  30.660954  10.486515  -23.798962  1.554539  -28.965864  -12.215902  -22.325430  
+7.900054  -26.661585  27.479298  31.024197  26.996269  -25.794918  -28.789604  20.071230  -26.860794  -21.076006  
+-27.726221  -28.307617  34.196552  19.789654  31.658072  9.052336  20.067137  -24.075565  22.948666  33.775368  
+-18.119324  -15.809902  27.389950  14.877948  -23.965155  22.419680  31.682259  30.595205  -31.514141  -24.590290  
+-18.131638  -31.149517  22.957989  27.805208  29.596313  -18.579456  26.984100  31.832233  -0.351689  -22.661404  
+-19.898781  14.091078  -16.836910  -23.718222  26.494846  7.629979  9.194495  19.305960  -2.738285  -35.370060  
+-25.090359  25.073004  -29.615166  22.081806  24.856117  13.964811  -28.084621  -24.082621  -25.604486  -24.462408  
+30.246601  -5.769229  -5.193548  29.170889  11.829287  -25.503380  -30.386749  30.259050  19.686636  -26.349174  
+28.390156  -24.656689  -12.252963  25.772734  -30.656946  29.966541  -27.206295  26.297985  -12.604877  -3.371529  
+26.495270  25.092012  -26.570024  29.583403  -12.035311  22.394245  -19.207348  -28.881124  19.397552  26.818882  
+-13.935023  -29.313412  -33.118549  -29.540964  9.710785  -26.418322  -15.709097  30.511360  -27.285845  30.564705  
+-1.097461  -29.774305  -24.169292  -29.655241  27.834856  19.809050  23.895390  26.617266  -22.941202  -32.466064  
+27.327742  -26.427551  27.262140  -21.368608  23.675949  28.715414  28.391165  27.343777  -29.445198  -16.981379  
+12.984652  -25.212948  -25.955906  -33.128109  3.915369  32.641487  16.643110  -28.839380  -29.649031  20.084105  
+29.169926  -29.581917  -9.146402  26.112736  21.341251  22.479158  2.133000  -27.415180  -27.825184  29.289385  
+15.334047  30.304628  -10.422917  -10.776401  -28.027750  22.465811  -27.439026  -30.379057  30.532068  -22.980307  
+6.460567  24.801245  27.595768  -18.807585  26.529850  -28.904119  27.325108  -26.231388  -27.992422  -19.203676  
+4.858919  9.724921  26.735258  -29.821846  23.857037  28.866035  -28.931206  30.675814  -18.045187  26.510839  
+-23.896399  -29.940565  -29.135975  25.415710  -31.608906  26.104200  9.917217  18.043379  26.905247  17.197084  
+-32.659801  24.501835  11.548573  24.957283  17.654007  23.903896  30.063805  -25.241699  15.368115  -28.222347  
+-21.819532  28.157255  26.924294  -2.496731  -32.710079  28.959297  17.546373  -31.157272  4.777966  13.330534  
+-33.874298  -22.775492  -23.086416  23.421789  -26.284649  12.585775  -29.640625  -25.766966  17.247511  16.120251  
+-30.796759  -24.995079  -19.737066  13.902723  19.905830  -31.017385  15.919159  -27.547905  -23.628786  28.600891  
+28.395857  -14.105124  23.998751  30.859987  -21.012695  28.477846  20.331127  29.432749  22.459372  23.770639  
+9.352928  -31.270706  -29.708103  18.127703  29.772743  -31.743284  9.090717  -6.822830  3.621120  25.464043  
+-28.046972  -19.711567  -28.521206  16.062174  -18.660967  -32.186073  29.525179  -18.658434  25.409454  3.064334  
+29.735567  27.620518  24.151989  29.720812  -32.017345  8.971922  13.413472  28.063982  -21.506521  13.922566  
+-29.474632  -19.652834  32.006847  24.401064  24.865980  25.338604  -30.355970  22.534678  2.968681  -22.344526  
+-30.064535  28.272619  -11.764478  -28.267519  -9.421213  24.136015  -6.741315  -32.448353  -29.630991  -25.437532  
+-26.516050  26.305784  -25.274731  -23.731672  -6.135195  -21.882580  -30.837490  -15.397966  -29.641878  -26.116444  
+-17.967083  -36.490044  -21.267710  -29.521482  -20.714117  10.630355  2.775754  32.427319  29.701410  22.186726  
+19.387829  -31.321960  6.491024  -3.254502  -9.085204  22.054094  31.965021  -22.539881  -29.751919  -27.778631  
+27.144449  28.251413  -27.894733  18.980383  -16.955488  -24.369068  19.126995  24.730665  28.388189  -30.265663  
+-22.823879  -16.743576  -0.855249  -20.405294  27.509684  21.952494  -32.309036  30.639891  30.141865  26.804674  
+-24.074057  1.584005  -10.435838  -21.381445  27.189999  -23.158571  -31.572952  -11.807989  31.084354  29.657049  
+-22.285618  14.744546  30.259914  26.419849  -29.737955  25.760761  -21.247749  26.240458  29.567011  21.174404  
+8.155906  24.326309  30.161058  10.056418  -23.279669  -28.574661  32.762390  30.282391  29.276430  3.936939  
+-29.147345  31.067495  -32.088154  16.249660  26.796309  -26.572680  -12.852500  -13.132098  23.243259  20.810740  
+-26.896341  20.438314  26.042990  19.506247  20.804615  27.008863  32.395691  30.100246  -26.771997  21.191238  
+7.246809  27.760994  29.059271  27.027941  3.511128  12.881917  -25.996683  -31.800346  29.468363  20.971094  
+13.394855  -22.939171  -32.371952  -11.730799  -26.592562  31.801849  -23.234404  -28.626965  -23.670897  29.706806  
+14.622396  29.198448  -11.544444  -7.621999  -4.405611  32.631290  28.775391  28.799553  -29.890314  -29.841303  
+21.813150  21.489521  -10.591779  -27.987438  -29.199821  -7.887535  -26.221470  -27.671728  -29.797443  20.302853  
+30.639811  13.334771  -8.900882  28.202700  12.857843  -6.109283  30.157297  -15.369250  31.276281  -31.603954  
+7.694522  -20.468029  -0.725897  -17.788485  -34.178978  23.927425  -33.732220  4.955217  20.375965  -24.123995  
+-16.236792  28.180031  -27.844164  -24.859165  -23.890783  -28.153116  -21.531990  22.802910  -27.761011  23.846361  
+28.526554  -27.008692  -30.810272  16.839460  -24.733376  28.403906  -15.245345  -22.803564  23.127598  24.632538  
+25.869368  3.164432  26.618368  29.791756  -30.799095  13.229739  26.083759  -33.614803  26.977602  15.521008  
+14.767395  -23.872744  18.893583  -25.599060  29.511194  -26.763277  -14.523918  -18.442045  -29.616571  27.419004  
+23.568420  -27.056763  24.325432  -23.938623  -28.297735  -6.575099  -26.447481  24.425529  -29.128120  23.467936  
+27.782188  30.725523  -1.994576  20.232574  23.253380  31.770685  25.011625  29.346586  -18.634232  24.028671  
+-2.991406  30.011583  -28.977139  19.140427  31.104210  25.743391  27.864761  -26.303442  5.711771  -24.898342  
+23.080534  32.841953  27.434668  -26.967560  24.944504  23.324984  21.113098  -24.822979  26.371103  3.247402  
+10.371755  -28.783300  30.557535  9.852886  -21.892038  29.397787  30.194834  23.821756  23.221987  -29.185167  
+27.725525  20.331497  29.906160  29.985994  4.673646  -33.141441  17.755194  19.337343  11.178561  -30.378700  
+-29.022953  32.298927  30.623846  -27.330795  -26.317472  -13.545459  -31.038189  14.862134  6.394091  -23.130997  
+-27.122976  24.278252  -3.923284  -4.505970  7.424839  -33.698040  28.509602  29.525066  -14.325845  -3.606597  
+-23.049450  -26.757929  28.846226  -15.622251  -26.292234  12.927630  -32.268642  -23.362898  33.380123  16.713203  
+-26.834475  -25.778423  -25.374941  -33.272823  -8.950101  -26.951784  30.359373  23.437349  -23.741333  17.970463  
+23.584236  29.477566  30.482859  24.227072  -0.161754  -28.249121  -25.205200  -22.896660  -26.021072  -27.754309  
+24.359877  -15.766882  -22.589453  -28.795191  -22.054977  -25.591492  28.914436  -16.483168  -29.730721  -29.069077  
+28.374998  -10.337638  -24.898254  -8.696457  -29.906717  -30.577459  -11.940366  31.599871  -23.696524  16.888037  
+28.412569  -11.547874  -23.385649  5.188973  -26.594147  28.829832  30.491238  31.156525  24.449814  -22.396378  
+-24.123362  10.227979  -33.093067  -26.940413  19.241301  26.934536  -30.959558  -29.113039  -25.290173  24.200045  
+-25.407791  -28.724577  3.698982  -1.167456  32.141792  -3.179670  -27.368929  -31.284103  -29.620163  17.914351  
+-26.139801  -23.038982  22.281845  -17.640434  21.039083  16.812750  31.378922  30.040468  20.431204  24.787907  
+8.001920  29.006453  -29.817034  -16.471649  24.109184  -22.226015  -31.618090  -31.567238  28.035131  -17.240200  
+31.732470  31.900095  27.778193  -4.249768  -15.619086  24.138508  24.233559  14.618389  25.075472  30.349316  
+-28.288677  32.652050  -12.559782  -5.508770  -30.175503  -27.688131  6.298277  17.481476  31.894840  12.626587  
+-0.359956  29.207279  28.969049  -29.720470  -11.271438  0.406908  17.933264  31.816317  31.016989  -29.226896  
+-29.037714  31.317698  29.765678  10.190748  27.784094  -20.760891  19.971119  28.424423  -21.875158  -30.634502  
+17.454336  27.734694  -28.182638  22.936987  -30.864325  24.006058  -22.265110  18.289276  -29.283976  23.994133  
+-28.076096  24.803003  31.810873  -28.802849  16.174349  -12.161655  -0.723460  -30.066971  -4.219203  -27.094242  
+-25.232018  -26.122824  8.917661  30.416269  25.667267  -23.732468  27.151720  -31.532894  21.933271  -24.658945  
+4.607127  25.353094  -31.823626  18.221535  -9.143847  28.309465  27.168276  28.348866  4.025306  -16.054871  
+24.069939  -6.346677  -18.416504  20.772797  29.109146  -22.270210  28.348614  -25.223400  28.465523  33.228703  
+-22.829838  31.330181  2.640439  23.182808  29.689547  -25.471079  31.577196  23.975561  -16.879004  27.922268  
+29.727743  -26.793751  4.074662  -26.435411  9.276300  -30.378164  -22.027834  -29.494093  17.942389  32.048019  
+12.443921  -31.355478  -20.997168  -26.298655  13.543483  -22.858194  27.675776  -9.945221  27.362482  27.321886  
+-22.948797  -16.643089  24.180367  -28.334538  30.239267  25.488913  -27.400799  27.946491  12.241156  -26.680285  
+-26.742994  -32.847370  0.372974  29.170841  19.595181  25.148224  25.905928  -27.588221  5.420761  22.849968  
+-31.289413  -25.980698  10.574203  -26.781279  23.723721  -16.573223  -29.030935  -27.023516  26.670540  -28.518023  
+-20.405828  2.004235  -29.175016  31.777958  18.817739  3.310179  24.954983  23.126196  -33.089378  25.994604  
+24.361629  -24.034267  27.114393  -22.175446  -21.102106  26.505531  28.671572  -27.174116  27.081461  17.971365  
+23.356621  -5.383027  -5.395381  30.386618  -26.971796  35.123657  25.429768  3.912057  -28.749304  27.695974  
+5.089523  30.756739  -18.651115  -29.794476  -11.307332  15.305420  -30.898745  26.515871  -26.690683  31.057924  
+-27.608395  2.751207  31.480362  -6.192355  -15.776289  14.917231  -26.300941  -31.236757  -9.482904  -31.367132  
+-29.525408  13.207518  30.402412  -27.161982  -16.195581  -8.314233  6.639257  26.347960  -12.045978  31.111658  
+-25.366018  20.475132  27.603605  30.567028  -27.804394  21.405256  -6.385581  -26.473637  23.634207  -25.096960  
+29.934078  -27.561596  21.638102  -26.487444  -7.843333  -32.990967  25.479225  23.726942  1.743223  -23.586367  
+-18.529795  -14.682743  -11.309550  29.943205  -32.861969  -24.109367  -11.641270  30.234364  27.131487  27.869272  
+32.296886  16.968967  -28.056850  17.463118  4.709224  -25.974831  -25.367235  1.224072  -26.906301  29.314491  
+-25.831589  27.744438  28.279171  -23.356329  5.997526  13.055943  27.772594  -29.972574  30.874453  -6.439247  
+-27.270761  -26.999367  17.389296  29.682049  25.536079  -31.437716  -17.270382  18.765409  -14.157981  25.990219  
+-25.644127  24.661541  -30.554047  20.114891  -23.111427  22.993216  -27.149054  23.140715  20.203518  27.635824  
+-25.846523  22.715874  -12.718971  -3.160396  -14.715969  35.330879  -30.877163  15.205578  -22.881746  29.061197  
+-15.076153  23.229858  -33.552963  -0.534045  -26.019924  -30.503695  -30.021885  -26.314020  -0.870840  6.176859  
+-31.264351  21.678905  -23.063509  30.365349  32.470901  -10.662707  -8.933731  -26.195234  -25.810390  24.120329  
+27.617683  -26.467562  24.821156  -18.866934  -30.946278  -19.225807  -19.320507  -27.095076  29.887562  -27.905640  
+29.890749  -16.860283  31.453899  14.095822  6.417044  -24.313219  30.336508  -22.971561  22.078314  15.273052  
+10.796197  25.368275  -14.171386  -28.335548  16.275265  -31.915974  -18.500086  -33.356716  -19.192612  33.692402  
+-27.123287  27.355597  -30.336468  28.779318  -32.750500  10.814196  24.501240  3.015838  23.269903  -25.158703  
+-21.149429  -13.080396  -28.024158  -25.943312  23.708012  -28.325745  26.544689  -25.332069  -15.316700  -32.523273  
+13.809246  29.555386  19.702276  28.850292  27.295843  -28.034163  27.024630  -24.833534  26.612434  19.731405  
+28.613760  -29.762756  -30.633032  9.729327  -30.736677  4.846626  25.470345  24.346096  11.554205  23.544035  
+-26.353815  -0.544388  26.486794  -28.141678  -28.819151  -19.970861  -30.929327  22.311621  27.651613  26.565744  
+1.227070  10.043915  -22.600807  26.245567  25.942457  -30.712118  -27.150064  -30.792393  -24.804663  -30.143036  
+26.438381  12.739036  29.980673  29.757868  17.797293  25.890196  28.367943  -28.205496  16.972397  -27.318939  
index 890001f2da10526ea71ecf5b4ab2998beb2e8d15..8ec51e08eed64e9a8e919bd437ff9cc7e3ce2e8b 100644 (file)
@@ -1,4 +1,4 @@
-4 81
+4 87
  -25  -25  -50  -50 
    0  -25  -50  -50 
   25  -25  -50  -50 
  -25   25   50   50 
    0   25   50   50 
   25   25   50   50 
+  50   50   50   50
+ 100  100  100  100
+ 200  200  200  200
+ 300  300  300  300
+ -50  -50  -50  -50
+-100 -100 -100 -100
+-200 -200 -200 -200
+-300 -300 -300 -300
diff --git a/codec2-dev/src/codebook/lspjvm1.txt b/codec2-dev/src/codebook/lspjvm1.txt
new file mode 100644 (file)
index 0000000..25167e9
--- /dev/null
@@ -0,0 +1,66 @@
+5 64
+0.210255 0.377659 0.423269 0.400938 0.478056 0.532360 0.601365 0.646555 0.684234 0.698676 
+0.032956 0.043506 0.071210 0.119380 0.333943 0.405757 0.528245 0.577805 0.692151 0.748558 
+0.074672 0.093144 0.195148 0.324108 0.350785 0.402025 0.456705 0.500132 0.653953 0.686855 
+0.240905 0.416519 0.609486 0.607996 0.642493 0.673006 0.687839 0.712076 0.731746 0.718608 
+0.057446 0.086502 0.130674 0.171643 0.239946 0.279123 0.286909 0.501975 0.570826 0.638823 
+0.017882 -0.013511 -0.142225 0.167153 0.308066 0.352573 0.437795 0.486891 0.584845 0.647598 
+0.046980 0.073960 0.119758 0.197191 0.289588 0.332222 0.429597 0.478396 0.526410 0.700443 
+0.042792 0.054636 0.218961 0.528048 0.422554 0.479162 0.537828 0.595358 0.679379 0.709526 
+0.054313 0.060307 0.054660 0.097842 0.143043 0.160662 0.251864 0.329837 0.444627 0.552299 
+0.076678 0.098320 0.173618 0.219049 0.259334 0.426960 0.468356 0.523478 0.644781 0.670285 
+0.072407 0.106906 0.274510 0.472652 0.648285 0.707364 0.712602 0.731155 0.735989 0.730210 
+0.053147 0.085674 0.132992 0.212295 0.264206 0.312810 0.488638 0.522639 0.638749 0.699633 
+0.047449 0.061378 0.094170 0.161906 0.243550 0.322804 0.390514 0.448901 0.465275 0.437053 
+0.039313 0.059639 0.101045 0.161066 0.318078 0.376262 0.433082 0.472590 0.649039 0.694638 
+0.048289 0.062368 0.102421 0.199427 0.478942 0.501292 0.539243 0.592485 0.644152 0.684887 
+0.059707 0.134781 0.500978 0.537298 0.524009 0.553262 0.575468 0.617187 0.670339 0.691938 
+0.054931 0.085709 0.125650 0.181901 0.212169 0.239085 0.418893 0.497027 0.597271 0.675501 
+0.061959 0.094473 0.152022 0.203759 0.262190 0.314438 0.396465 0.598217 0.638693 0.683203 
+0.121952 0.176775 0.258048 0.314808 0.374419 0.422949 0.482535 0.539617 0.603429 0.649946 
+0.053336 0.069450 0.109332 0.152945 0.184015 0.426688 0.496913 0.555075 0.646199 0.683624 
+0.209199 0.338387 0.401263 0.284364 0.201828 0.224417 0.346100 0.440431 0.575261 0.648738 
+0.044978 0.071498 0.110116 0.172387 0.222703 0.280248 0.411043 0.460651 0.713573 0.726476 
+0.065596 0.084849 0.136519 0.246735 0.404958 0.464447 0.499717 0.546731 0.593953 0.634352 
+0.037222 0.049678 0.144975 0.292832 0.425448 0.553890 0.640080 0.713589 0.747550 0.753870 
+0.058309 0.074586 0.141745 0.272278 0.328995 0.388094 0.448297 0.491701 0.507557 0.585513 
+0.050023 0.069801 0.139143 0.225050 0.315564 0.372745 0.569384 0.604187 0.634851 0.685780 
+0.054461 0.107958 0.409721 0.381157 0.384675 0.432788 0.488290 0.552233 0.637233 0.682111 
+0.044054 0.054642 0.020775 0.083404 0.116689 0.082766 0.399185 0.470280 0.572619 0.659219 
+0.042527 0.062601 0.081034 0.109889 0.396217 0.456807 0.498884 0.546736 0.594549 0.653205 
+0.040545 0.056928 0.088922 0.134529 0.303823 0.354800 0.421072 0.487222 0.544268 0.579065 
+0.103286 0.153098 0.196107 0.245624 0.309443 0.344386 0.413976 0.496647 0.556428 0.611368 
+0.047000 0.061973 0.102409 0.174546 0.258304 0.338560 0.409730 0.450177 0.377802 0.623712 
+0.112409 0.147140 0.204836 0.264220 0.293295 0.361325 0.473188 0.522188 0.634754 0.678920 
+0.050591 0.069568 0.252323 0.315864 0.379092 0.456668 0.521785 0.586119 0.656466 0.690445 
+0.049433 0.068777 0.101143 0.287143 0.337565 0.384931 0.474693 0.528928 0.642475 0.690443 
+0.026273 0.020561 -0.032001 -0.042085 0.225978 0.271496 0.341491 0.453767 0.523985 0.611266 
+0.047302 0.065276 0.100627 0.177341 0.240727 0.291852 0.361986 0.353152 0.595788 0.661449 
+0.134077 0.240497 0.318949 0.376000 0.440342 0.493663 0.547002 0.592531 0.649897 0.681642 
+0.055335 0.080071 0.106319 0.159145 0.190005 0.234642 0.516348 0.568601 0.635411 0.694603 
+0.058463 0.086066 0.124634 0.194301 0.368670 0.407954 0.441635 0.509019 0.566512 0.614965 
+0.049509 0.064792 0.113652 0.176792 0.308689 0.519352 0.527038 0.578369 0.642552 0.677740 
+0.074335 0.110814 0.172234 0.230070 0.274196 0.331733 0.405268 0.451862 0.632812 0.675760 
+0.043642 0.056140 0.109549 0.339952 0.398910 0.450082 0.538769 0.599176 0.663721 0.699911 
+0.229352 0.397657 0.580312 0.508102 0.436887 0.438673 0.475209 0.530891 0.614201 0.652398 
+0.039394 0.027144 0.044189 0.087585 0.037790 0.296526 0.396245 0.459674 0.587743 0.654224 
+0.047712 0.070149 0.114412 0.192446 0.382634 0.415903 0.475301 0.542803 0.626846 0.694329 
+0.222732 0.330063 0.285450 0.303210 0.361175 0.416198 0.491912 0.548239 0.626668 0.666324 
+0.043573 0.061659 0.089573 0.156618 0.212660 0.241015 0.426408 0.483392 0.528095 0.594262 
+0.028098 0.037454 0.070360 0.095141 0.265647 0.316057 0.448025 0.518254 0.595252 0.693973 
+0.081863 0.118515 0.167198 0.251692 0.347642 0.381815 0.462653 0.526841 0.584810 0.639923 
+0.033260 0.033035 -0.028301 -0.087095 0.314210 0.403675 0.478764 0.523465 0.597026 0.660724 
+0.041693 0.056129 0.236944 0.273809 0.329711 0.390832 0.455537 0.520933 0.592008 0.655888 
+0.048918 0.066347 0.115465 0.171037 0.199391 0.368351 0.440916 0.486743 0.579831 0.631450 
+0.067044 0.101341 0.157745 0.217504 0.274181 0.317238 0.378290 0.457013 0.520277 0.577294 
+0.051670 0.070148 0.109086 0.278276 0.318156 0.354750 0.423394 0.452599 0.610021 0.659917 
+0.063381 0.097487 0.255517 0.362912 0.502924 0.536220 0.544191 0.587177 0.622257 0.665103 
+0.042829 0.063290 0.141327 0.268721 0.335146 0.393934 0.506781 0.553873 0.793023 0.778164 
+0.073878 0.110774 0.158479 0.220476 0.260310 0.300543 0.468657 0.523335 0.568892 0.634785 
+0.058825 0.071494 0.141760 0.371302 0.401010 0.428906 0.481611 0.527376 0.610082 0.663253 
+0.046893 0.065288 0.110378 0.168657 0.290286 0.420886 0.488267 0.533125 0.573346 0.631251 
+0.055519 0.087601 0.143240 0.194621 0.306311 0.346112 0.389518 0.533281 0.586602 0.636479 
+-0.021990 -0.080814 0.057690 0.242027 0.311289 0.375152 0.456319 0.523315 0.596758 0.659604 
+0.057263 0.123945 0.346494 0.371719 0.434120 0.523152 0.600973 0.656435 0.704022 0.721856 
+0.100590 0.179518 0.238388 0.304685 0.379577 0.445410 0.549238 0.604036 0.671731 0.704624 
+
diff --git a/codec2-dev/src/codebook/lspjvm2.txt b/codec2-dev/src/codebook/lspjvm2.txt
new file mode 100644 (file)
index 0000000..786d34f
--- /dev/null
@@ -0,0 +1,65 @@
+5 64
+0.180622 0.006066 -0.021468 -0.013437 0.015371 
+0.003683 0.008561 0.045263 0.004004 0.049437 
+-0.163772 0.023012 0.008096 0.000595 -0.007511 
+0.018726 0.024696 -0.012187 0.040880 -0.037520 
+0.018287 0.048845 0.002788 0.008714 0.020441 
+-0.041314 -0.023004 -0.012868 -0.006827 0.020867 
+0.020537 0.025562 -0.025163 -0.005949 0.176464 
+0.029031 0.023992 0.040001 -0.001579 -0.012196 
+0.089764 0.051566 0.026604 -0.011248 0.027925 
+-0.082012 -0.046648 0.055399 0.034046 0.005132 
+0.113247 -0.023355 0.041174 0.036370 -0.046196 
+0.051016 0.030063 -0.017635 -0.011313 -0.036656 
+-0.062688 0.047435 -0.002149 0.001155 0.053891 
+0.005997 0.009596 -0.018469 0.041943 0.044300 
+-0.028231 0.016577 -0.007576 -0.043950 -0.016269 
+0.035918 0.013668 -0.007319 -0.028917 0.040241 
+-0.002860 -0.017397 0.055068 -0.003111 -0.018230 
+-0.014853 -0.025694 0.024000 0.040516 0.023921 
+-0.010584 0.018591 0.007213 0.008872 0.002639 
+-0.039141 0.021724 -0.007418 0.056879 -0.025835 
+-0.012914 -0.035655 0.025106 -0.033265 0.025828 
+0.008212 -0.009233 0.008548 0.021100 -0.003220 
+-0.033749 0.036061 0.057176 0.004730 0.007389 
+-0.016066 -0.009876 0.169501 -0.019578 0.018563 
+-0.005042 -0.017609 -0.003367 -0.033805 -0.034261 
+0.021848 -0.037098 -0.016724 -0.013664 -0.022234 
+-0.014318 -0.041632 -0.025771 0.009917 -0.004712 
+0.016061 0.039283 -0.031636 -0.107720 -0.031214 
+0.045005 0.009421 0.002766 0.047322 0.010610 
+-0.000365 -0.012189 -0.027333 -0.005110 0.026984 
+-0.095422 -0.058078 -0.061673 -0.024753 0.012418 
+0.010534 0.026639 -0.026237 -0.024583 -0.006740 
+-0.000214 0.009931 -0.045554 0.008574 -0.033281 
+-0.005650 0.008215 0.012479 0.015845 -0.173872 
+-0.007468 0.036860 -0.007603 -0.033418 0.049009 
+0.027431 0.004773 -0.059174 0.012162 0.009249 
+0.075983 -0.050330 -0.034798 -0.009475 0.015972 
+-0.075828 0.017657 0.007893 -0.024710 -0.037156 
+-0.003870 -0.019629 -0.034949 0.060981 -0.005291 
+-0.027994 -0.051432 0.023954 -0.002302 -0.033216 
+-0.004043 0.056778 0.030301 -0.020760 -0.037710 
+-0.024427 0.031822 -0.063218 0.009871 0.021376 
+-0.012111 -0.005709 0.024335 0.125538 0.082754 
+0.008418 0.005587 0.021277 -0.044805 0.005042 
+0.004683 0.017979 0.055288 0.058361 -0.009646 
+0.002515 -0.021444 -0.158007 0.009838 0.033717 
+-0.010086 -0.015696 0.009078 0.032922 -0.055059 
+0.023172 -0.048288 0.032483 0.010087 0.027439 
+-0.009869 -0.014953 -0.058391 -0.054933 0.000823 
+-0.026950 -0.127542 -0.040479 -0.019142 0.027921 
+0.052918 -0.003970 0.077123 -0.063210 -0.039627 
+-0.016171 -0.027555 -0.007027 0.002134 0.084092 
+-0.016824 -0.025088 -0.078462 -0.008012 -0.082548 
+-0.018758 -0.028954 0.048720 -0.112156 -0.052909 
+-0.007753 -0.123471 0.047735 0.054028 -0.003099 
+0.083138 0.089523 -0.116610 0.021680 0.037196 
+-0.006830 0.097009 -0.001860 0.029964 0.010137 
+0.011289 0.007370 0.014781 -0.012922 -0.066981 
+0.034641 -0.154921 0.011883 -0.009672 -0.021795 
+-0.041500 0.136367 -0.041281 -0.032394 -0.024645 
+0.010206 -0.008545 -0.042595 0.156139 -0.026349 
+-0.002143 0.027830 0.067894 -0.098022 0.044893 
+0.004982 -0.020281 -0.030082 -0.074794 0.052684 
+0.015115 -0.056898 0.148751 0.028815 -0.062015 
diff --git a/codec2-dev/src/codebook/lspjvm3.txt b/codec2-dev/src/codebook/lspjvm3.txt
new file mode 100644 (file)
index 0000000..5232932
--- /dev/null
@@ -0,0 +1,65 @@
+5 64
+0.199356 -0.046114 -0.014628 0.019331 0.007094 
+-0.223637 -0.027704 0.005744 -0.030910 -0.002358 
+0.012583 0.025512 -0.018059 -0.159782 0.003840 
+-0.132734 0.042020 0.037016 0.000379 -0.010638 
+-0.006745 -0.011922 0.018691 -0.032089 -0.159781 
+0.044397 0.027639 0.007529 -0.010559 0.005324 
+0.094328 0.033697 -0.071778 0.025642 0.025931 
+0.018792 0.016222 -0.154698 -0.017059 0.000699 
+-0.067211 0.033705 0.025447 -0.026276 0.031514 
+-0.104739 -0.017205 -0.052495 0.000481 0.008038 
+0.068027 0.001855 -0.007310 0.028354 -0.048914 
+0.028143 -0.006052 -0.006966 -0.015113 -0.041109 
+-0.038585 -0.005834 -0.021703 -0.007152 0.014956 
+0.114966 0.015750 0.039961 -0.032410 0.006278 
+0.020340 -0.036924 0.033169 -0.047163 0.009171 
+0.010720 -0.039946 -0.017723 -0.002642 -0.010278 
+-0.079353 -0.060398 0.034670 -0.002409 -0.010720 
+0.028527 0.006945 -0.045590 0.016821 -0.004159 
+-0.018629 -0.033281 0.011648 0.033733 -0.036671 
+-0.043644 0.012612 0.001700 -0.017529 -0.053521 
+0.048372 -0.008161 -0.046648 -0.050377 0.005868 
+-0.013208 -0.130732 0.048663 0.006746 -0.008581 
+-0.012499 -0.023672 -0.013511 -0.055482 -0.020262 
+-0.009173 -0.041402 0.015274 -0.007771 0.027925 
+-0.002419 -0.011154 0.039476 -0.022125 -0.033716 
+0.023169 -0.032382 0.029847 0.029624 -0.014876 
+0.044864 -0.005728 0.066242 -0.031428 -0.037726 
+-0.006296 -0.018223 -0.031106 0.026031 0.020168 
+-0.002680 0.019292 -0.054964 -0.028514 0.003996 
+0.014037 0.063021 -0.019018 0.019135 0.006253 
+-0.030836 -0.013152 0.043025 -0.008038 0.001975 
+0.013008 0.031322 -0.004349 -0.045247 -0.022323 
+-0.001254 -0.003786 -0.039013 0.007816 -0.058864 
+-0.029850 -0.007355 0.092691 -0.096908 0.012834 
+-0.004289 -0.005152 0.056846 0.028014 0.009501 
+0.011267 0.030816 0.028408 0.022022 -0.054663 
+0.011944 0.012077 0.018871 0.002067 0.013561 
+0.037847 -0.012540 -0.005700 0.026174 0.036866 
+-0.011667 0.029533 -0.001613 0.002176 -0.019421 
+-0.064045 0.009466 -0.014587 0.051633 -0.007692 
+-0.000734 0.061783 0.053816 -0.019430 0.000760 
+-0.027340 0.044591 0.019738 0.038465 0.009254 
+0.077260 -0.065671 -0.002924 -0.002751 0.010811 
+-0.059460 0.069552 -0.070568 -0.034797 0.011398 
+-0.019409 0.022774 0.008093 -0.046885 0.024185 
+0.045376 0.029876 0.052322 0.053145 0.010152 
+0.004524 -0.017804 0.058043 0.019065 0.119071 
+0.004986 0.000119 -0.004026 0.059938 0.000625 
+0.010842 -0.011323 -0.025120 -0.031177 0.037555 
+-0.054404 0.032783 0.102674 0.037726 -0.016502 
+-0.024732 0.019641 -0.069165 0.035973 -0.007114 
+0.022856 0.033603 -0.034710 0.107206 -0.046868 
+-0.020350 -0.066156 -0.049100 -0.002560 -0.012345 
+-0.036348 -0.047706 0.008369 0.048741 0.044398 
+0.029796 -0.065326 -0.068475 0.070067 -0.004048 
+0.063030 0.124997 -0.026117 -0.037609 -0.022144 
+-0.011243 0.028624 -0.006808 0.008654 0.058514 
+0.006905 -0.033728 0.163891 0.017925 -0.028119 
+-0.038975 -0.058758 -0.036370 -0.069444 0.051810 
+0.005915 -0.008354 -0.078672 0.025962 0.101040 
+-0.032262 0.157582 -0.012208 -0.008087 -0.007190 
+0.023464 0.035066 0.011241 -0.057235 0.056908 
+-0.019183 -0.017633 0.014499 0.143127 -0.005776 
+0.051205 -0.185582 -0.001777 0.018170 -0.008225 
index 27723236b2e05aac5b90f2db3f6cb619898c76de..6bd2555f1979bb4f9656d53ea97aa0aca81a5286 100644 (file)
@@ -89,7 +89,13 @@ static const float codes0[] = {
   25,  0,  50,  50,
   -25,  25,  50,  50,
   0,  25,  50,  50,
-  25,  25,  50,  50
+  25,  25,  50,  50,
+  50,  50,  50,  50,
+  100,  100,  100,  100,
+  200,  200,  200,  200,
+  300,  300,  300,  300,
+  -50,  -50,  -50,  -50,
+  -100,  -100,  -100,  -100
 };
   /* codebook/lspdt5-10.txt */
 static const float codes1[] = {
@@ -823,13 +829,528 @@ static const float codes1[] = {
   0,  50,  50,  50,  50,  50,
   50,  50,  50,  50,  50,  50
 };
+  /* codebook/lspdt1-10.txt */
+static const float codes2[] = {
+  -8.25053,  28.4144,  28.9471,  -22.2604,  -20.6416,  -23.656,  33.4997,  29.162,  -26.7775,  20.1523,
+  -13.0877,  -29.2448,  28.5319,  1.22371,  -17.6426,  -29.9785,  10.8846,  -23.8746,  29.9877,  30.3941,
+  -29.9125,  16.4507,  -17.8567,  21.6378,  -26.3736,  28.0729,  -28.7364,  -30.5233,  -26.4303,  5.71219,
+  26.232,  17.2427,  24.208,  29.0411,  23.4561,  26.2093,  -20.0436,  4.13155,  30.3794,  -30.2944,
+  29.1745,  26.2909,  -26.3865,  26.4206,  30.3293,  -27.8893,  1.44038,  -29.5035,  -25.9657,  13.2664,
+  26.8153,  21.9801,  -23.962,  26.2482,  22.6035,  -26.7975,  24.7571,  24.9177,  -21.2011,  -31.1042,
+  26.9903,  30.932,  29.9023,  -26.1117,  10.7204,  27.045,  -30.31,  -25.5483,  -12.7643,  15.9429,
+  -27.1311,  7.62772,  -23.846,  -24.1965,  31.534,  21.2844,  2.19604,  26.8955,  -29.8731,  31.4571,
+  23.7837,  31.1035,  -16.3212,  28.371,  27.7566,  -22.7052,  28.9022,  12.4866,  -24.3266,  17.3647,
+  26.6244,  29.3185,  12.003,  22.6586,  28.9862,  18.0759,  -27.6183,  27.1073,  -24.3881,  -22.7604,
+  13.5152,  -26.3506,  25.1293,  -30.7866,  32.8476,  -30.017,  -24.5243,  -22.6185,  25.2378,  -11.4662,
+  -7.10687,  17.1361,  3.03011,  -16.9343,  -29.623,  26.2487,  24.7101,  -9.60708,  34.6048,  -28.5885,
+  15.6627,  -27.5425,  28.2522,  -29.8661,  -33.9103,  27.9768,  6.86797,  -28.3128,  -10.6014,  -21.3029,
+  -10.1939,  14.3916,  24.2784,  -28.9752,  28.6653,  30.8774,  25.2306,  22.6492,  34.6573,  12.6171,
+  27.801,  -6.52872,  29.8213,  -26.3064,  31.7569,  19.8472,  -28.4679,  -21.0403,  26.4331,  22.4014,
+  30.6313,  24.5356,  31.2848,  9.83505,  -9.95582,  -21.0074,  -28.907,  -6.31281,  31.7471,  -20.0821,
+  -23.1803,  27.2807,  -1.64822,  18.6162,  -28.9625,  16.3854,  27.8483,  30.0311,  -2.87742,  30.4542,
+  28.4481,  19.1461,  30.3052,  -21.2234,  -28.7292,  4.12146,  -32.125,  16.5424,  26.4265,  25.656,
+  -17.1373,  29.1917,  30.0938,  15.4184,  -26.7408,  4.19214,  30.1617,  -20.5398,  -27.1326,  30.1359,
+  -25.9175,  -22.6413,  24.5942,  13.8219,  -22.7645,  34.6536,  25.6767,  -2.28344,  -28.7131,  21.4753,
+  -34.8038,  16.6274,  24.5326,  0.507513,  -0.351332,  -29.7094,  -11.7315,  26.9706,  30.7657,  -17.9427,
+  -21.3059,  16.7952,  -8.17177,  4.81696,  -32.7319,  29.0837,  -15.7781,  27.8383,  -35.2863,  -2.82117,
+  25.2306,  8.30669,  30.3797,  9.01718,  -27.8341,  24.51,  29.6856,  -29.8559,  -24.9641,  22.6938,
+  -24.0194,  -24.9116,  29.9326,  26.5271,  24.2294,  -25.9794,  -24.631,  -26.3888,  26.2117,  9.38985,
+  -18.8612,  -33.2289,  29.7331,  30.2162,  29.1675,  15.4357,  25.3051,  19.5041,  -25.5456,  17.1,
+  -28.3529,  21.203,  -28.2208,  -25.2237,  -27.1022,  -27.9978,  -15.9857,  -31.6842,  8.52058,  32.3644,
+  27.3768,  -20.802,  20.9075,  30.4823,  30.7549,  -28.858,  12.5094,  13.0601,  -28.311,  18.3052,
+  25.1576,  25.038,  -21.2504,  28.7481,  30.7683,  26.9179,  7.29479,  -21.3574,  -20.052,  29.7553,
+  -24.3586,  29.9962,  10.1477,  15.1171,  -25.0595,  26.8762,  29.6559,  1.59899,  -31.3689,  -24.8604,
+  -23.0871,  -30.6244,  26.8721,  -25.4302,  -27.0821,  20.7204,  -28.692,  30.692,  -21.2792,  -2.55162,
+  -24.3535,  -31.9815,  21.2366,  -24.6265,  28.6599,  -25.6517,  17.8603,  22.1999,  -20.7234,  31.4294,
+  -25.2573,  31.413,  2.18064,  -21.8032,  31.6047,  26.4478,  -3.93741,  17.6408,  6.96742,  29.3464,
+  -26.3615,  -29.9896,  6.61212,  23.398,  28.7878,  26.2248,  -32.9424,  23.2865,  -19.5321,  24.9594,
+  -27.8786,  29.7342,  19.9668,  30.1988,  19.7735,  -17.7894,  -27.0852,  31.2251,  -28.5293,  1.14131,
+  -30.9011,  0.39127,  -2.89699,  30.0077,  27.8385,  26.7029,  11.2285,  25.0699,  35.4033,  -18.5499,
+  24.4251,  30.8785,  -14.2881,  -28.3147,  30.359,  16.4842,  18.0173,  -16.1663,  -30.4197,  -28.5547,
+  2.11309,  19.1044,  24.9009,  -27.7976,  2.45525,  -30.3165,  -31.8738,  -29.6858,  25.4935,  -25.0012,
+  12.6407,  27.4397,  31.4137,  28.3519,  28.2506,  -31.2008,  -1.91983,  -25.8082,  -17.3017,  27.2579,
+  24.3022,  -31.6638,  -8.10819,  31.9265,  26.0794,  -17.8864,  -5.92002,  -31.881,  29.8825,  9.56431,
+  26.8858,  28.6477,  -30.2197,  25.1369,  28.129,  21.6754,  -28.4136,  8.50455,  15.0252,  -19.8443,
+  -25.5956,  -27.3072,  25.0955,  -7.53178,  17.9025,  -24.0604,  -29.582,  21.5096,  -19.2753,  -29.4225,
+  -32.9898,  -24.24,  26.4263,  26.3189,  -30.2404,  -30.341,  9.49678,  -0.216958,  -30.0495,  26.2367,
+  25.3846,  -6.27526,  -18.5975,  -32.6911,  29.2917,  -27.6102,  -21.2104,  -30.4175,  -17.904,  -27.2087,
+  -22.2919,  13.3505,  -28.8478,  -27.3357,  -24.6192,  -25.186,  -31.2401,  25.4113,  27.4135,  26.5263,
+  -11.9634,  -31.0662,  9.78246,  33.9313,  29.914,  33.1285,  6.134,  26.7578,  24.3437,  12.8705,
+  -25.2667,  28.3718,  -17.2426,  -0.061756,  -23.2225,  25.6486,  -29.3804,  -25.2079,  30.6481,  25.2059,
+  -28.4298,  29.7423,  -29.4923,  24.6737,  -5.57771,  -30.1219,  24.6415,  -5.27153,  -28.5545,  -25.3473,
+  30.6742,  23.6654,  26.5094,  -28.1565,  -19.6528,  -30.5585,  3.0504,  22.4671,  -12.1573,  25.6083,
+  28.0071,  -23.9219,  -28.883,  16.3834,  30.1842,  5.25706,  -27.1074,  -18.6625,  30.0944,  29.673,
+  -4.14867,  32.2447,  -31.1772,  -3.10798,  30.7883,  -19.095,  -17.701,  21.3213,  -28.8709,  -22.3072,
+  -27.7873,  21.9791,  -28.0861,  27.0946,  -22.9268,  -26.6187,  -25.7646,  30.3898,  9.12482,  -20.8037,
+  -28.6229,  14.2738,  -18.5277,  32.8113,  28.2379,  26.639,  -29.6313,  -21.7636,  29.7628,  23.6787,
+  28.5072,  -28.4328,  24.0604,  0.475232,  33.547,  10.7585,  -3.63249,  -28.7134,  -29.3909,  -21.6577,
+  -8.46123,  -20.4459,  20.3123,  1.1264,  27.8912,  -8.80256,  29.1814,  -33.4731,  -24.3172,  27.0948,
+  18.3856,  -18.6819,  -34.0194,  -16.0162,  32.8923,  30.3485,  -18.0761,  -17.6771,  29.2811,  -6.462,
+  -27.2324,  29.5843,  25.6167,  -7.8321,  22.5377,  27.6049,  -24.3778,  -26.2333,  23.7462,  -26.9951,
+  23.9284,  27.3664,  31.6844,  -26.4765,  -2.04618,  -28.6409,  17.7162,  -28.6657,  20.8217,  19.8226,
+  29.4072,  -29.9625,  -25.9286,  -20.1612,  -21.0763,  -26.83,  -23.2386,  -28.6961,  -26.6285,  11.1981,
+  23.7627,  -3.13541,  -10.0132,  -25.9644,  31.743,  -25.4953,  23.755,  27.877,  23.0587,  -27.8041,
+  -29.5957,  -26.1081,  -32.8559,  -0.777961,  26.2802,  4.67618,  -21.1247,  -30.3808,  9.1983,  -31.7385,
+  -18.2573,  -29.6409,  -30.9501,  3.6693,  -26.3272,  -27.5609,  -28.2215,  21.4254,  -23.9741,  -27.0584,
+  22.2031,  27.7365,  28.6896,  -30.763,  18.5918,  18.7326,  28.2024,  21.2632,  -14.0767,  -28.5378,
+  24.311,  -19.6619,  -30.559,  27.8313,  23.8325,  23.0343,  -19.7966,  25.6092,  -28.9709,  21.3831,
+  -25.0992,  -25.5298,  5.85376,  -6.0681,  -7.70612,  11.0399,  -8.48104,  21.7957,  -28.7564,  29.7226,
+  -30.3247,  -26.8202,  -2.09473,  -20.415,  -28.3008,  29.8017,  25.6611,  22.0894,  12.8583,  -23.6779,
+  -28.31,  24.3947,  26.971,  -19.2915,  18.7133,  31.9582,  20.1128,  25.4493,  6.02605,  -31.2843,
+  29.731,  -7.4588,  -2.05505,  -9.76605,  -24.3992,  25.5491,  -17.1134,  23.1416,  -33.1505,  -28.4839,
+  -28.0917,  28.9461,  26.6396,  26.441,  -5.77627,  -31.7761,  3.69964,  3.309,  -27.0888,  28.4341,
+  24.8774,  24.1319,  -28.4854,  -23.671,  26.915,  -18.5309,  22.3052,  29.7804,  -21.3998,  23.5578,
+  27.7334,  -23.7164,  -21.6228,  30.4875,  -7.45083,  14.0061,  -27.4377,  29.4467,  18.5052,  32.9356,
+  -24.4202,  -22.1558,  30.7387,  -30.659,  -25.9384,  -18.6666,  -4.35199,  19.2711,  27.0651,  -24.7766,
+  29.1561,  -28.4832,  26.8073,  -32.1698,  32.6776,  -18.1601,  -22.8207,  19.1549,  -25.9669,  -15.8678,
+  -32.4025,  28.7912,  -19.3765,  -33.4588,  -4.59162,  -2.48346,  -26.4266,  -11.452,  -3.4896,  26.5895,
+  17.7094,  28.1198,  -9.28481,  33.0728,  -3.39314,  -13.8984,  33.3506,  -30.0986,  -25.9046,  -23.0733,
+  24.8809,  -25.7619,  -28.0848,  22.5136,  -31.3951,  -29.289,  26.6863,  -6.29337,  -24.9534,  -14.7491,
+  16.8032,  22.7372,  28.0725,  -30.1047,  -33.3868,  -29.03,  -21.493,  -17.3871,  -1.68723,  -26.7399,
+  -8.84929,  -8.65377,  32.0228,  -22.3597,  29.5138,  24.5473,  28.2488,  -29.6733,  -20.6947,  -23.9206,
+  18.9958,  -32.6907,  -24.9815,  31.6719,  -22.6099,  -27.1554,  1.04936,  -27.1888,  24.0306,  30.2012,
+  -20.4759,  26.7284,  20.3339,  -5.87479,  -25.0673,  -29.5382,  -22.9534,  -26.6018,  -31.1512,  25.0986,
+  -11.8566,  4.26243,  -28.8775,  26.2306,  -30.3274,  27.635,  10.3158,  -32.9394,  -24.7256,  -27.8978,
+  -5.14106,  -0.384487,  27.1126,  15.1106,  -11.3094,  32.181,  -30.6473,  -27.7164,  -34.2151,  -25.2152,
+  -28.1229,  -28.6241,  -8.30844,  -27.449,  -31.472,  -27.3816,  -21.2433,  -18.0236,  -22.5855,  27.5666,
+  28.5046,  22.8037,  21.8432,  -27.4656,  25.2261,  -26.9313,  -29.1188,  8.34294,  19.0817,  30.7571,
+  -16.4224,  27.7822,  -29.5078,  27.6678,  -25.479,  15.8126,  -31.8033,  -8.32738,  12.9154,  -26.9773,
+  -13.0477,  -24.0751,  18.7575,  30.8896,  13.0364,  31.2804,  34.0083,  -2.3975,  27.7732,  -4.73833,
+  -28.0758,  31.4868,  9.87599,  -12.4956,  28.2136,  20.6697,  -20.1547,  -27.6662,  -29.8304,  28.7541,
+  -20.8179,  25.4652,  21.6608,  30.019,  -33.0246,  -26.8511,  22.4279,  -18.919,  27.5136,  -13.1177,
+  32.7129,  20.1057,  11.4996,  11.4808,  -31.8933,  -33.7613,  26.4346,  -16.0457,  28.4419,  16.2752,
+  25.468,  -27.3013,  14.7029,  -21.3359,  -22.4597,  -32.7986,  -27.6401,  22.8499,  21.4998,  12.1947,
+  27.2476,  27.5415,  -28.0597,  21.6355,  11.561,  -27.9649,  9.15524,  14.274,  28.2684,  28.7118,
+  28.1577,  24.6295,  -25.688,  -20.6815,  27.0165,  27.7861,  3.00681,  -24.2667,  26.3471,  28.3072,
+  33.5909,  26.545,  -13.7548,  10.2552,  -8.04454,  30.6583,  25.7389,  -22.9777,  8.16417,  -24.7538,
+  31.0928,  13.3421,  -7.21192,  -2.04956,  30.2821,  -30.2538,  -23.9669,  -21.5167,  32.1137,  6.81488,
+  23.2872,  18.6273,  -0.295165,  -32.7855,  1.38796,  -33.9893,  33.7732,  -8.19971,  17.0034,  -17.363,
+  25.1014,  28.4555,  -8.15827,  30.8608,  -29.29,  -25.226,  -23.4231,  -9.18238,  26.0935,  -30.7874,
+  -24.0687,  28.1196,  -10.572,  23.2389,  -30.6147,  -23.6208,  -22.3697,  -24.2103,  -24.5259,  -28.1793,
+  -29.2108,  9.33682,  -27.0316,  -29.9507,  -22.9578,  -28.3331,  -14.291,  30.6383,  -9.51455,  -18.2594,
+  29.0517,  29.3045,  -27.804,  20.1128,  -23.8544,  26.4009,  -22.4673,  31.3617,  24.5367,  11.6453,
+  25.9587,  28.4635,  -24.3679,  10.5793,  -25.5453,  -29.8091,  20.846,  -29.06,  -27.6639,  23.9738,
+  9.1213,  30.8013,  26.0392,  -16.8431,  15.987,  -27.448,  1.62443,  32.6493,  31.0677,  28.7469,
+  27.5182,  -30.7709,  -21.4457,  -25.8691,  31.1463,  29.8386,  -24.8942,  16.1369,  -18.004,  -7.40235,
+  -27.3055,  -21.2461,  -26.8715,  27.8522,  -11.6448,  -31.165,  -30.9358,  -26.875,  -30.3999,  16.2533,
+  -6.63215,  8.09702,  -31.1165,  -29.2246,  1.84468,  33.2401,  -17.9446,  27.7935,  22.5046,  -2.18777,
+  28.7881,  24.8879,  -12.1954,  -26.8075,  -18.8406,  12.6661,  29.0156,  30.7599,  -26.5482,  26.76,
+  7.59376,  -23.9184,  31.4741,  -21.832,  23.4031,  -29.9946,  21.0566,  25.4814,  28.1098,  24.279,
+  22.5471,  -30.3324,  30.6631,  22.8942,  15.5328,  24.2735,  -29.1013,  12.0985,  26.2304,  28.1985,
+  -29.2395,  -21.5818,  27.147,  30.0192,  -6.24417,  29.8992,  28.713,  -26.1664,  -8.51533,  -29.1768,
+  28.122,  -21.0389,  23.9608,  -16.5891,  28.6752,  27.318,  26.744,  5.7586,  22.0553,  23.1824,
+  -18.9618,  -10.6988,  -28.7631,  28.4375,  -35.4006,  24.6525,  22.0436,  14.511,  -23.1942,  -30.209,
+  -31.0209,  22.4236,  -30.3546,  27.6778,  21.7876,  24.1562,  25.4488,  6.79781,  23.8571,  -10.5832,
+  28.0351,  -8.3655,  23.2184,  28.7032,  29.3233,  31.7704,  4.66718,  -30.0532,  19.6152,  22.5853,
+  20.9077,  32.2827,  20.47,  -2.09262,  32.5936,  -28.1722,  17.1938,  -13.6884,  23.9711,  -29.0846,
+  -27.8215,  -23.1679,  -20.4228,  -32.6886,  20.0129,  -5.70832,  25.1558,  -25.6696,  -31.715,  10.8138,
+  21.0594,  22.3256,  8.81395,  -31.8695,  -25.3404,  -22.9126,  25.6514,  -30.0964,  -12.2519,  27.8247,
+  33.1243,  24.9705,  -22.8837,  -24.7875,  20.1204,  27.8081,  -24.7643,  29.2956,  -20.9745,  18.7322,
+  27.8739,  13.1703,  26.6168,  30.3609,  23.7208,  -28.7738,  -32.0397,  14.2455,  10.4068,  23.1149,
+  -29.642,  21.243,  28.4963,  -29.9543,  16.0278,  28.2093,  24.2532,  -15.2911,  -24.0084,  21.6911,
+  -30.4201,  21.2617,  23.6876,  -29.1343,  26.0982,  -23.0652,  24.0136,  11.3584,  27.6194,  19.1537,
+  -28.5207,  -20.618,  23.6329,  20.8799,  -28.919,  -27.9083,  -29.3558,  -29.8855,  0.446875,  -13.0414,
+  -23.5558,  -30.7531,  26.2673,  6.48852,  22.7973,  -26.1677,  16.0457,  -24.4512,  -29.0718,  -21.9364,
+  -2.36605,  24.3338,  -21.2073,  26.3859,  32.7478,  25.5206,  -30.2132,  15.3148,  -24.0961,  30.0819,
+  27.522,  -25.4696,  24.7502,  -31.0949,  -12.4561,  -5.65292,  -26.1685,  -29.8803,  -23.0405,  -25.1458,
+  31.0866,  0.399763,  -27.9092,  -27.1197,  12.7721,  25.5396,  30.6456,  19.1746,  -7.18897,  -17.4286,
+  -25.6609,  -27.1401,  -10.6298,  -27.0451,  -27.0105,  -28.7729,  -19.6009,  -28.3758,  -25.8702,  -30.1105,
+  -21.2923,  -21.2891,  -21.5013,  21.5205,  15.72,  15.3682,  31.1151,  23.5286,  -29.7983,  -28.2174,
+  -26.3409,  -30.7567,  25.8373,  22.2217,  -17.6464,  17.5932,  -22.74,  -27.202,  -27.506,  23.8605,
+  11.5699,  28.0039,  -25.2629,  31.4341,  -22.0802,  7.42339,  30.6202,  -12.0761,  28.5899,  30.0618,
+  -30.3889,  24.2924,  26.4211,  30.3244,  20.3564,  9.03764,  -28.0857,  17.9505,  25.7932,  28.7594,
+  -23.2635,  18.6279,  -30.1419,  7.74037,  22.0299,  28.4998,  30.2854,  -26.2749,  -20.4823,  23.1334,
+  32.8132,  -20.9001,  -24.9911,  16.3172,  25.8967,  -30.1706,  -20.6069,  -4.94731,  -27.3538,  -17.0239,
+  28.3436,  -27.2881,  -24.9646,  32.6225,  15.9006,  28.2231,  -4.86493,  -12.1313,  -28.2337,  -30.4396,
+  -24.3076,  -30.6229,  -27.4778,  -28.6846,  30.4282,  -28.0515,  -9.87742,  19.5134,  21.2878,  -22.7233,
+  29.0431,  22.8767,  -27.118,  30.2196,  -26.8633,  -17.6948,  -23.7217,  -30.9555,  -23.4291,  -10.6842,
+  11.0604,  -26.7739,  -22.5833,  27.121,  25.1421,  23.5202,  -35.0056,  -30.7456,  -23.5748,  8.63538,
+  11.3576,  30.4276,  20.7014,  24.338,  26.3848,  26.6775,  -7.50746,  -30.5996,  -28.049,  -28.3651,
+  23.3395,  20.6026,  -33.9205,  -10.7879,  -27.8632,  -21.197,  24.0516,  -29.6912,  28.6969,  -16.3557,
+  27.1567,  16.9642,  5.57127,  -27.7338,  -30.0671,  21.8845,  -21.2519,  -30.4813,  30.4854,  24.7297,
+  -26.6876,  23.6054,  -20.9491,  24.5063,  22.5765,  -28.7768,  28.6824,  8.0765,  30.0592,  -23.7652,
+  19.4999,  19.5293,  31.5839,  25.1577,  -26.2863,  -34.5506,  -23.8676,  26.8009,  -6.82,  12.327,
+  -17.9087,  -15.7619,  23.8498,  25.4718,  -27.7726,  -23.3314,  23.346,  -20.2871,  -19.3871,  -21.679,
+  -29.7133,  -7.16528,  25.4693,  -32.6565,  -31.6752,  -20.7368,  22.8523,  -27.0239,  28.4559,  -4.41509,
+  -31.4193,  28.6854,  -25.388,  29.7228,  15.0155,  25.8247,  0.442656,  25.4953,  -24.5667,  -24.9699,
+  27.7887,  23.7892,  -15.5741,  -23.2032,  -29.012,  32.6785,  25.4804,  11.0691,  22.1699,  17.8188,
+  27.556,  -14.147,  27.8935,  -0.205255,  -29.6673,  27.4494,  -27.6579,  -30.5457,  -24.6962,  24.5375,
+  22.982,  33.5906,  21.2318,  19.7344,  17.2193,  7.57024,  20.1456,  33.3189,  27.775,  -16.8827,
+  15.0092,  29.4505,  4.68626,  -3.32403,  -34.471,  -33.3498,  25.8741,  5.47848,  -20.3791,  -5.73921,
+  13.4284,  -26.142,  20.6026,  14.8793,  -27.2481,  -28.2608,  -31.7817,  -25.46,  -25.9363,  -28.7317,
+  -21.0177,  25.6166,  32.6298,  29.3062,  -23.0327,  27.9102,  -23.1089,  19.2085,  -30.0696,  -23.4847,
+  -23.7266,  -29.0885,  16.0166,  12.9652,  -26.7298,  -29.127,  25.498,  25.6541,  -29.0986,  -28.2842,
+  -27.4807,  5.69755,  -30.92,  32.1908,  11.5378,  -30.2282,  26.8742,  32.5516,  16.837,  12.3554,
+  -25.1347,  28.2103,  -28.1181,  -27.9153,  -31.2483,  -29.0462,  24.637,  -18.5504,  11.3274,  -20.0425,
+  -27.5927,  -26.4672,  -30.8207,  -12.2264,  25.4677,  28.5219,  3.69228,  15.2841,  14.3733,  31.2335,
+  7.1779,  11.4232,  -25.8109,  -26.8181,  35.4794,  -25.7404,  -30.1638,  15.0373,  -12.5271,  25.5343,
+  -2.63841,  30.5852,  25.9127,  -18.0146,  33.2316,  -16.7832,  -17.316,  28.0742,  -25.5447,  29.679,
+  26.2855,  26.7497,  -33.9953,  26.9748,  -8.06406,  21.4587,  32.7095,  -30.8957,  0.037257,  2.17861,
+  28.7327,  -23.2964,  -18.6919,  -31.0237,  -23.5674,  27.7883,  -26.5522,  19.3056,  27.2356,  19.0137,
+  -28.3926,  -29.4393,  28.4647,  -20,  29.7216,  21.4962,  3.55303,  -24.798,  23.571,  -25.1784,
+  -25.591,  19.6255,  32.1395,  12.3088,  -33.6146,  -24.9327,  -12.019,  14.946,  -28.3476,  -11.7783,
+  -23.9367,  -30.9393,  8.64932,  -24.3806,  -21.5234,  24.1729,  -21.4429,  -28.1304,  -26.8653,  -18.5267,
+  23.9594,  -15.3027,  -28.791,  12.5416,  28.4381,  -25.8681,  31.5335,  -28.8322,  -25.8023,  -18.0209,
+  29.4301,  -13.7531,  -30.3518,  -19.8684,  28.7455,  16.6405,  -14.7741,  26.3276,  16.1273,  31.9805,
+  -29.6415,  -17.7058,  24.4478,  -24.6233,  -16.3305,  26.2282,  29.0038,  -31.4771,  14.0415,  -27.5263,
+  -15.7397,  28.7161,  2.34081,  26.6458,  13.0536,  -23.7544,  17.0744,  -34.3847,  27.8546,  -31.7045,
+  -27.4043,  -28.1182,  -33.942,  -30.4668,  -11.8167,  25.6852,  -18.1003,  -30.0872,  22.6374,  13.7709,
+  30.123,  -29.1185,  24.5326,  7.05788,  30.0367,  29.0998,  -7.07182,  24.5928,  11.4017,  -26.0736,
+  -28.6924,  -27.0098,  11.9054,  -28.3875,  21.2223,  25.8827,  31.8018,  -29.0217,  22.5816,  22.8867,
+  -23.9644,  -30.0428,  11.3036,  -25.3203,  27.864,  32.8282,  28.9971,  16.3395,  -28.9815,  20.9307,
+  18.6266,  -29.5824,  -27.5513,  -27.6972,  12.1978,  18.4289,  24.8125,  -26.544,  28.4059,  -19.4683,
+  -26.8393,  29.005,  -26.7564,  -24.1174,  25.6261,  -5.7489,  -33.437,  31.5534,  16.7255,  -7.00127,
+  -28.238,  29.6708,  6.69271,  17.9424,  -30.8683,  29.0019,  -14.06,  23.6885,  26.1603,  -24.4099,
+  -17.9795,  30.9313,  25.6365,  -31.7129,  -25.3221,  30.3034,  19.7881,  -14.2762,  -5.86105,  -31.923,
+  29.199,  -28.8194,  -12.2058,  -31.3073,  -6.87638,  -7.33234,  25.9409,  31.0608,  -32.2589,  -20.0134,
+  6.46346,  -32.5479,  28.3191,  28.4216,  -20.1906,  33.6584,  -17.2706,  16.1643,  -22.3686,  -26.7897,
+  -27.7539,  25.124,  -24.0658,  31.4592,  -25.9513,  -0.960714,  22.5208,  -28.2867,  -23.6912,  25.8237,
+  -32.0225,  32.0729,  -24.703,  -29.2244,  -27.9044,  28.084,  -5.96727,  27.0386,  18.7218,  3.49361,
+  -24.1289,  -22.2928,  -12.2505,  -23.7352,  -31.9296,  -25.621,  28.912,  27.3087,  9.15458,  -27.7082,
+  -2.5293,  -27.6017,  -29.4636,  -36.2155,  16.2497,  -17.5573,  -29.4447,  -11.909,  -6.18443,  23.3581,
+  22.1857,  28.2165,  24.0368,  19.8874,  -31.4648,  -26.2784,  -26.5717,  -31.5953,  7.37446,  20.9756,
+  -19.3764,  -12.6907,  28.8498,  -25.7172,  -15.5353,  35.1255,  -7.71322,  23.4843,  28.9771,  23.4312,
+  33.2275,  -27.8333,  24.3514,  25.7135,  -28.399,  -17.73,  -1.72947,  27.1192,  -21.333,  -21.328,
+  -26.7718,  -28.0145,  32.1894,  -25.9283,  20.033,  13.7104,  -26.9826,  -3.50031,  -1.5065,  32.058,
+  -15.9273,  -14.6589,  -31.6793,  -22.644,  -30.882,  25.5082,  -3.18707,  10.1483,  12.4174,  34.7252,
+  -22.0614,  28.2279,  -18.5343,  -30.6997,  15.7793,  -29.3294,  28.1581,  29.0112,  19.5978,  -26.1364,
+  -12.2764,  15.8923,  -13.1825,  33.2995,  10.344,  -27.1714,  -28.1837,  -29.1532,  2.25096,  23.829,
+  31.5859,  -12.6718,  27.2971,  26.3352,  -31.7106,  25.9135,  -8.01722,  -21.333,  -17.157,  -30.2927,
+  29.7415,  29.5346,  26.6015,  -25.1452,  -24.682,  15.9808,  9.52096,  -27.2437,  -19.2633,  -22.3752,
+  25.4339,  -24.4675,  -28.1439,  25.4959,  -14.8422,  27.4931,  24.4251,  -18.6445,  22.8262,  -24.3026,
+  -11.8357,  30.1363,  19.1067,  30.8241,  24.704,  27.1728,  30.038,  29.1863,  14.9206,  -25.0288,
+  -24.7527,  12.5878,  -24.8606,  -29.0293,  -27.9671,  25.0205,  29.418,  27.9424,  -30.2156,  -5.29948,
+  30.8991,  10.949,  30.6862,  1.53788,  -29.9777,  -26.8144,  27.0166,  -25.5417,  -11.0795,  -30.8354,
+  -23.1267,  25.8999,  -17.4266,  -17.3902,  -30.5032,  26.2519,  27.27,  -22.4736,  18.2838,  30.1234,
+  26.2616,  28.2623,  -11.489,  25.4361,  -26.994,  -12.4195,  -31.5027,  29.0403,  -27.6489,  -25.9624,
+  -23.9109,  -25.4291,  32.8677,  -24.7493,  -7.41547,  -30.7047,  -21.9118,  -22.1417,  -15.8272,  16.4468,
+  32.8224,  -26.1081,  23.6126,  -26.6574,  8.43956,  24.6411,  -6.17961,  33.0148,  10.4394,  29.5791,
+  28.7257,  -33.6543,  22.8566,  22.7419,  25.0222,  -5.11551,  19.4445,  -21.2323,  26.2215,  -29.6782,
+  11.6337,  -25.2773,  28.2067,  19.0014,  -18.2428,  -17.985,  26.6398,  29.9046,  -25.8616,  30.9632,
+  26.1006,  -31.8847,  -24.9728,  20.9314,  4.22755,  -17.8693,  30.058,  32.5159,  -28.2069,  12.626,
+  -32.1331,  -16.6027,  20.367,  -31.1858,  -19.1065,  22.7289,  -8.19297,  -31.7679,  11.1238,  24.182,
+  -28.5894,  29.5386,  22.6532,  -0.28204,  -20.7243,  -27.8795,  21.3281,  -28.1106,  25.7652,  29.0242,
+  30.8609,  -36.3647,  32.7815,  3.94956,  11.0795,  5.53779,  -25.3935,  -25.2081,  22.9808,  3.93012,
+  -27.1586,  -31.6219,  -30.0834,  5.40924,  28.5293,  29.0108,  10.3884,  -1.30648,  -30.5529,  23.3085,
+  30.7342,  -11.2019,  26.0374,  -29.201,  19.3929,  28.7376,  21.012,  -10.3572,  21.5489,  -32.679,
+  -30.6747,  27.8181,  -29.2031,  -19.8546,  17.0445,  20.8765,  -25.7478,  -28.8782,  24.5115,  -23.142,
+  15.6736,  23.2881,  -27.8189,  -32.5136,  12.7261,  -23.733,  6.03639,  -27.862,  31.1938,  28.1199,
+  -25.3043,  -10.878,  -31.2279,  -16.3826,  -28.8359,  25.3937,  -28.8966,  30.8031,  10.4763,  -26.4655,
+  23.6268,  23.3578,  -21.2066,  -29.7216,  -28.8524,  -21.2113,  23.9611,  28.4413,  28.0366,  14.1088,
+  -30.2355,  -16.3267,  27.563,  18.3579,  -28.3682,  25.4716,  31.7735,  3.73451,  26.049,  27.9695,
+  16.9803,  9.39048,  -26.0695,  7.32019,  -28.1136,  -23.6426,  -30.7487,  -23.2483,  30.1938,  29.1335,
+  -15.2235,  29.8175,  25.5034,  26.6729,  -30.9081,  19.4423,  -24.6899,  -2.46178,  -11.9627,  30.0122,
+  26.0241,  -28.0979,  28.531,  -26.942,  -9.10893,  -23.7381,  26.9422,  -32.1187,  -21.5252,  0.961816,
+  -21.0305,  -29.3634,  -29.9573,  -3.64282,  25.4944,  -27.3208,  29.0384,  20.0224,  -21.8754,  -12.3964,
+  -2.55454,  -19.474,  -29.9142,  -25.0349,  28.5809,  22.6043,  34.857,  9.32608,  32.9517,  22.4416,
+  24.7129,  -26.6326,  -28.8926,  -31.3336,  -14.416,  4.31041,  -0.897436,  25.9627,  24.6526,  -30.6731,
+  6.78863,  -21.6532,  -6.06996,  12.8664,  -27.8608,  -26.6807,  30.1569,  30.33,  30.8103,  29.3712,
+  21.3824,  -22.6843,  23.2975,  33.3359,  -27.2974,  -17.234,  -31.3502,  13.5683,  -24.1404,  28.8631,
+  31.6433,  27.7071,  -29.4775,  -9.8034,  -3.62855,  -7.85453,  -23.1287,  -24.7735,  2.33746,  -32.2428,
+  -28.3579,  -29.081,  27.7266,  -32.3534,  -22.8518,  17.8603,  26.0964,  12.9128,  -27.8459,  -11.4467,
+  -17.9052,  -28.1838,  19.0775,  18.1995,  -28.8078,  -32.0929,  -22.6217,  26.9579,  23.4571,  -25.1958,
+  29.1555,  -25.4856,  -30.2723,  -16.999,  15.9354,  -27.4347,  16.2728,  32.8456,  25.2754,  20.9799,
+  32.4671,  2.93956,  -31.0762,  27.5746,  30.0528,  16.918,  29.306,  23.6248,  19.7404,  19.113,
+  -8.46506,  31.1906,  -19.8206,  25.9194,  25.3987,  -25.7408,  -29.2638,  26.0712,  16.0056,  20.981,
+  26.7999,  31.7592,  13.2032,  30.5019,  -30.0488,  27.4054,  -20.1176,  -24.5325,  -17.6053,  -1.40098,
+  25.599,  -25.0073,  -23.524,  -23.979,  11.0823,  26.1922,  -31.1151,  -30.0585,  2.72797,  -27.7723,
+  -24.3742,  -27.3655,  19.0432,  30.2595,  26.9663,  24.0074,  -26.9217,  -27.4496,  -0.693423,  -26.9591,
+  -16.835,  26.6559,  -29.3846,  -20.4006,  16.8754,  -9.28897,  24.9216,  28.4773,  27.8824,  31.1783,
+  -27.7756,  11.305,  -30.9171,  -23.8961,  -27.2524,  -5.76819,  24.5656,  25.9893,  30.7082,  -27.1924,
+  -21.06,  29.5602,  11.7365,  6.23646,  -22.5558,  -11.7003,  29.7066,  -32.8702,  -30.0649,  -32.7286,
+  29.8244,  27.6387,  -26.1194,  -25.7524,  -7.09194,  29.8724,  -25.5634,  -20.4913,  -15.4872,  28.3082,
+  25.0543,  -31.8768,  -9.43103,  20.8789,  11.869,  -26.002,  -29.1559,  -26.5873,  21.4083,  -27.3897,
+  13.3601,  -28.6078,  17.5581,  29.3805,  -31.186,  26.9138,  -29.9701,  -22.1241,  15.5291,  28.9369,
+  -26.9357,  -27.7515,  -25.8868,  24.87,  29.6327,  4.26222,  26.3305,  27.6959,  20.4067,  26.9529,
+  27.7736,  27.0707,  29.386,  -15.0452,  29.023,  -14.6649,  -26.0535,  -28.6073,  -29.2653,  19.9013,
+  25.2243,  30.863,  -7.17169,  -26.0447,  25.7318,  7.06042,  24.9636,  -31.9466,  -24.8672,  23.9226,
+  -24.4168,  -3.12778,  26.4288,  -31.6015,  -28.6078,  -32.7023,  -30.1953,  19.8996,  -32.7125,  -13.6225,
+  23.8347,  -20.5053,  18.9617,  -27.5347,  19.928,  -27.1383,  31.4044,  10.1609,  -26.5149,  28.4713,
+  -32.5792,  -29.1098,  -23.3707,  0.175204,  4.15279,  26.6095,  -30.4085,  20.0832,  30.3453,  -30.7777,
+  -25.1651,  26.5907,  15.1648,  34.0354,  24.8903,  27.1215,  -30.4236,  6.24183,  -13.9166,  -20.9826,
+  24.2875,  -4.93023,  -29.8958,  31.45,  -18.431,  -30.184,  -14.3473,  -25.1722,  25.1204,  -5.39082,
+  34.4496,  -26.8308,  -22.9146,  26.2177,  16.6395,  1.24433,  33.1862,  -28.394,  -10.4293,  18.7792,
+  27.0268,  24.6036,  -27.0578,  -28.1733,  -25.7328,  21.4978,  -24.4564,  25.3564,  -5.64096,  -28.1899,
+  28.4589,  26.6986,  10.7373,  -30.7271,  -14.3854,  -3.84682,  20.653,  -28.4687,  32.3311,  -34.4114,
+  29.2623,  -32.1906,  26.086,  28.9362,  -25.6758,  -22.0626,  -5.18232,  -31.9896,  9.40288,  6.24814,
+  28.6462,  -26.0187,  21.6738,  30.1177,  -24.6441,  -25.8893,  30.6923,  -22.0261,  -28.5893,  4.40472,
+  -22.3934,  -21.4271,  -31.8539,  16.146,  -24.5063,  27.1887,  30.7117,  -34.0572,  27.2885,  14.983,
+  20.5746,  -15.3833,  20.9064,  -28.355,  32.3791,  -12.0202,  28.3934,  -29.823,  31.4167,  17.0074,
+  -25.5023,  -9.22801,  -3.83736,  12.8722,  -26.1519,  -25.4996,  -32.3241,  29.7862,  -25.9677,  28.2345,
+  -23.0843,  -13.2824,  19.6373,  -28.9581,  32.7287,  24.1406,  -25.477,  -10.0695,  -29.5995,  -28.2576,
+  -25.0017,  -25.2555,  -32.6575,  24.2379,  -20.1423,  -31.0825,  16.9809,  -25.3246,  -24.85,  -22.1989,
+  -30.7835,  21.7048,  22.7509,  -26.1203,  28.4127,  -29.0315,  25.5965,  -13.8157,  -21.302,  28.486,
+  -11.8122,  -23.0162,  23.4443,  31.8461,  -23.7635,  -24.1578,  30.4203,  27.7664,  22.1596,  -26.2175,
+  -30.2693,  23.0744,  -17.5849,  -24.8827,  -28.4476,  -9.14923,  -28.0342,  -20.212,  28.958,  -28.1449,
+  -28.2732,  31.754,  -31.8497,  -24.9509,  29.0246,  -30.8232,  24.2912,  -20.8242,  -22.9768,  9.61306,
+  -19.1417,  -18.9035,  33.2677,  -29.0761,  22.7443,  -21.6708,  20.1767,  21.7421,  -27.4763,  -20.2081,
+  -21.8147,  26.2294,  -22.395,  -23.9859,  -22.8504,  -11.1579,  25.72,  -11.151,  -29.9754,  20.9225,
+  -24.8182,  -27.9719,  -24.304,  33.1157,  -7.68747,  18.4823,  25.0035,  -28.3808,  -27.3537,  10.6708,
+  34.7111,  18.941,  -8.90435,  -29.7827,  17.5387,  28.8848,  -30.2549,  -7.67402,  26.5205,  -22.2655,
+  20.9027,  8.02557,  18.6747,  -14.3907,  34.1892,  25.0876,  -26.9645,  -30.3362,  29.9746,  -32.0695,
+  27.2976,  32.4441,  23.8185,  13.9057,  13.8862,  33.198,  19.6024,  -5.43895,  -29.2826,  4.22089,
+  -31.0476,  -5.96745,  -15.5321,  31.6324,  18.9683,  -20.6432,  25.4519,  -29.2529,  25.3534,  31.4466,
+  -29.4809,  26.9574,  2.87565,  -30.7565,  28.9042,  -30.6773,  -7.80326,  -3.80787,  24.8727,  -29.8776,
+  -22.5655,  30.024,  22.1709,  27.0855,  -26.7594,  -20.6981,  24.9623,  30.7335,  -6.98818,  -26.7466,
+  -26.5275,  -32.1891,  12.0141,  6.6173,  18.8555,  -31.6156,  22.5673,  5.8469,  30.3754,  -26.0958,
+  -27.5123,  28.6808,  14.5002,  21.157,  32.141,  -3.66957,  5.27913,  -24.2661,  29.6502,  23.8057,
+  8.04391,  -12.7378,  4.51219,  15.2557,  33.1153,  28.9598,  31.7355,  9.96833,  -23.2067,  30.8954,
+  26.1746,  26.838,  -26.4088,  2.08621,  -19.6249,  30.0566,  -26.4913,  -15.8693,  -27.7318,  -28.0848,
+  33.7989,  9.6021,  5.42416,  28.5814,  -28.9103,  31.3748,  -21.9944,  4.2547,  31.3876,  -16.9088,
+  -22.9956,  -29.0137,  -3.13401,  34.3951,  18.2919,  -14.7946,  -25.7595,  29.1109,  32.4345,  6.42814,
+  22.3962,  28.8567,  24.6942,  29.7287,  17.4392,  -24.606,  2.83518,  32.4251,  -29.1184,  32.6344,
+  21.0483,  28.6214,  29.157,  26.1899,  -29.382,  23.4613,  28.2668,  -0.439052,  23.4954,  -24.7259,
+  -27.6431,  -24.4674,  -24.1251,  12.3557,  -31.0265,  -11.4525,  29.3609,  26.2052,  -27.4694,  28.774,
+  17.493,  2.9437,  27.3859,  17.1196,  35.0155,  -8.32979,  -29.8675,  -22.8402,  6.39686,  -29.7277,
+  14.1437,  -29.5462,  25.0051,  -32.7554,  4.26332,  12.2119,  -25.6587,  22.9942,  29.144,  -22.8932,
+  24.1099,  -27.4978,  -27.9549,  32.4436,  -3.34401,  -31.8479,  -11.1064,  29.9141,  -13.353,  27.3706,
+  29.7693,  -27.6346,  10.1234,  -0.666036,  27.7179,  -22.7555,  -21.832,  29.5211,  -19.9717,  31.8032,
+  -27.5028,  34.9555,  22.6271,  -26.1925,  -30.5011,  25.4254,  -17.4725,  33.5471,  -21.3273,  9.0941,
+  -30.0315,  24.4952,  29.0672,  27.3232,  27.4624,  -4.87298,  30.3988,  -25.9025,  -27.5834,  10.7175,
+  -2.09508,  11.8897,  -10.8098,  30.2138,  1.78196,  -29.1869,  -11.8922,  25.8337,  -32.3248,  -32.08,
+  -29.2354,  30.8343,  30.4034,  -11.3153,  -24.7593,  31.11,  31.431,  28.5209,  11.0536,  3.46145,
+  -30.2448,  -27.3939,  28.5115,  29.8167,  -27.4711,  -7.6085,  26.5046,  -28.5449,  9.46896,  17.659,
+  31.0553,  25.8105,  -26.2018,  -27.4675,  -26.214,  -27.5629,  -29.6949,  21.2912,  6.60151,  21.1159,
+  -24.4844,  14.3777,  27.142,  -24.8468,  29.6768,  19.3594,  -26.188,  -28.9337,  27.0689,  28.8529,
+  -1.77758,  28.6903,  -30.6853,  -25.8117,  -26.727,  22.0732,  30.4748,  -26.577,  -1.38898,  -24.9701,
+  -23.2177,  -9.60334,  25.5857,  32.8804,  17.6362,  -26.9059,  29.4505,  17.4413,  -29.9267,  -2.51935,
+  -18.9931,  -17.0497,  -29.1172,  26.2665,  27.7453,  -24.6188,  -32.4916,  21.6823,  -15.2905,  25.3057,
+  21.595,  18.1168,  -22.971,  26.8031,  -28.3121,  -25.7545,  28.7842,  23.4938,  -23.9887,  24.7556,
+  26.2731,  20.1641,  -30.9609,  10.7051,  -32.8598,  -8.56068,  27.2982,  26.3509,  -22.8814,  -29.4412,
+  -22.493,  23.3514,  28.6675,  -25.101,  -27.1005,  26.7092,  -27.3226,  -25.6432,  -23.1438,  20.9988,
+  33.2125,  -22.8073,  -8.20928,  -23.5952,  -29.3412,  24.3692,  27.3287,  -26.5285,  13.4448,  -27.8526,
+  0.897182,  -18.4608,  13.431,  25.2438,  -22.3477,  26.363,  1.49715,  -28.2662,  35.6873,  17.993,
+  10.312,  32.5748,  -0.21268,  -30.9481,  -28.8441,  -13.6012,  1.55775,  25.8454,  -26.259,  -30.5659,
+  -31.6129,  -9.10887,  -26.4614,  -20.2054,  -30.433,  25.2556,  26.3804,  -26.8165,  -26.8528,  9.17533,
+  -23.0408,  -31.9649,  -25.0775,  -28.7329,  -24.8894,  26.7445,  -26.3379,  25.0072,  -24.6972,  22.5337,
+  30.7377,  14.5433,  -26.2023,  -15.5913,  -22.3773,  28.3488,  29.4449,  -24.7301,  -28.5039,  18.4246,
+  -26.4132,  28.465,  23.084,  30.3478,  12.1644,  -25.6898,  -32.024,  -12.4306,  19.5894,  -26.6043,
+  24.7474,  -25.1463,  -8.28831,  -26.737,  -12.3649,  -30.1252,  -30.5067,  13.2331,  -27.0013,  -25.6776,
+  -23.5934,  2.49018,  30.4409,  -25.3938,  16.5488,  -32.4228,  -30.8879,  30.479,  -17.9307,  22.1312,
+  -22.4387,  8.35835,  16.2603,  -32.4754,  -32.1865,  7.95671,  22.723,  18.5793,  28.2419,  32.1002,
+  19.5541,  -27.8349,  -22.0222,  21.8766,  23.6754,  27.6641,  -25.3913,  26.6415,  21.6008,  -25.006,
+  -25.9757,  20.8192,  25.6816,  -14.1121,  30.4002,  -26.939,  -31.8337,  -24.7779,  -23.3323,  -6.75728,
+  -22.5581,  -30.6851,  -29.7124,  23.0011,  14.6676,  17.613,  25.1004,  24.326,  24.4803,  -29.2733,
+  -26.5626,  28.1147,  -24.7062,  30.2216,  -28.6595,  -30.6301,  -5.83273,  5.14396,  -9.165,  28.0232,
+  -5.92352,  -11.563,  -24.2517,  -33.5998,  11.7133,  -26.9491,  -18.8382,  30.0399,  -29.0893,  -27.1826,
+  -28.9013,  -31.1269,  17.3988,  -26.5926,  30.545,  3.80012,  29.3434,  25.0955,  9.05747,  -27.1545,
+  25.7365,  -13.4243,  30.4701,  20.8691,  18.4235,  24.8452,  -29.0668,  23.1813,  -30.5414,  25.9942,
+  27.4237,  -27.8401,  13.4293,  31.6284,  27.3057,  -15.5668,  21.209,  30.1649,  26.4054,  22.7381,
+  27.5834,  17.7396,  -28.9728,  27.0147,  22.0408,  28.7333,  5.44369,  24.0764,  -30.5012,  -22.6607,
+  29.299,  21.7635,  -25.7788,  -30.0543,  18.8254,  -28.2537,  -18.8304,  25.4442,  27.7653,  -11.6979,
+  -16.9642,  -30.5624,  30.9091,  11.8539,  25.5379,  9.84781,  -1.11666,  28.1968,  35.0261,  -25.8236,
+  -27.1289,  -31.2563,  21.659,  24.3971,  -25.733,  20.4904,  -23.2147,  29.1721,  10.334,  9.0341,
+  14.4741,  -23.8104,  -24.892,  18.9427,  -28.131,  -9.56001,  21.1643,  -31.5934,  -23.6648,  30.3115,
+  -30.4586,  -13.0342,  0.747105,  6.96912,  32.3004,  -27.5684,  19.5471,  26.8221,  -33.2617,  -30.5144,
+  -32.573,  -16.8025,  -21.7501,  -26.2998,  10.0773,  -26.8009,  27.697,  -11.0726,  26.649,  33.7328,
+  25.8694,  -14.0496,  -31.2279,  -16.428,  25.6844,  26.8085,  22.1707,  -32.0067,  -27.9511,  -26.8573,
+  25.6326,  31.3405,  -10.1011,  -27.8686,  28.3929,  -30.368,  -24.8445,  18.8782,  -28.4955,  -23.1322,
+  1.9868,  -28.6117,  -26.4134,  -26.7971,  -25.9554,  -30.1282,  -26.6394,  -14.3733,  28.9168,  19.1687,
+  -19.1651,  11.2606,  31.1762,  9.45042,  31.2855,  -20.2397,  21.1236,  21.6858,  29.2276,  -31.6739,
+  0.587843,  22.9401,  28.6783,  25.3989,  -18.5223,  12.4396,  -29.2827,  33.1755,  21.0391,  -26.0456,
+  -25.6812,  -5.91602,  24.595,  -27.6552,  -19.0818,  17.4302,  -26.5359,  21.3304,  -29.5099,  -34.7099,
+  -24.8131,  19.7911,  26.3245,  -33.1188,  -18.4935,  -25.6874,  26.3963,  -1.61342,  -28.2477,  -27.2836,
+  -25.7632,  -18.9645,  -24.8388,  -18.9577,  30.6009,  -24.6066,  10.9677,  -30.7894,  28.1212,  5.43746,
+  -28.9413,  30.5199,  -28.1196,  -23.0247,  28.1056,  29.2973,  -1.96069,  17.2795,  -29.5787,  -17.7945,
+  -14.5139,  24.6249,  -23.6672,  27.0408,  3.14482,  28.1941,  17.4925,  28.5656,  30.7273,  29.0692,
+  -23.4336,  -5.51636,  30.9313,  25.2112,  7.63229,  28.3222,  0.928505,  33.2867,  -0.99415,  33.494,
+  23.1833,  27.5461,  3.29565,  20.681,  32.8489,  14.1919,  -20.8087,  18.3138,  28.6776,  34.2061,
+  7.30421,  -26.5456,  21.814,  -29.1204,  -32.8689,  -30.8567,  24.9894,  -3.43803,  -10.0989,  30.484,
+  -1.54338,  -9.04965,  29.5241,  29.5561,  30.1327,  31.694,  8.64342,  16.4086,  -29.7157,  -27.2096,
+  -1.31837,  -28.6328,  -5.84828,  -19.4517,  27.2033,  29.9186,  -27.5572,  -29.1602,  11.0984,  30.4774,
+  30.2593,  31.8879,  28.9975,  -26.2407,  29.429,  -0.215187,  31.6979,  18.1123,  7.36806,  26.6443,
+  -28.5427,  32.1687,  28.3982,  -25.5194,  21.3132,  24.4176,  -23.3852,  23.5758,  -24.9575,  -11.5814,
+  -29.585,  -22.0437,  -19.973,  -13.1543,  27.7766,  28.8806,  24.5413,  -26.868,  -23.2424,  -26.3503,
+  27.1222,  26.6981,  -16.0799,  -30.0704,  -15.0691,  -32.0863,  -6.15664,  -21.6,  -29.9054,  -22.6296,
+  23.4632,  -25.0014,  -24.7831,  -28.9237,  -32.482,  -22.4948,  22.9109,  -24.4353,  23.2473,  18.5744,
+  -16.8889,  29.5575,  25.439,  16.7473,  23.6343,  30.6996,  31.8586,  -22.4199,  20.9237,  27.2869,
+  23.6983,  -28.0926,  17.8061,  -27.1861,  4.8598,  30.5627,  -21.8276,  -19.261,  -30.6308,  22.816,
+  8.57076,  -26.7892,  17.7914,  -28.9642,  -29.6119,  30.8163,  25.5522,  8.49558,  -19.8255,  30.5438,
+  10.1116,  -19.5985,  23.9633,  -30.3137,  26.1562,  -25.9893,  27.6144,  -24.4045,  20.9486,  -30.6978,
+  23.4995,  28.2965,  28.4475,  -23.5735,  8.9487,  -27.4882,  -21.2966,  33.2048,  -1.5334,  -32.5512,
+  -28.9059,  -28.7249,  -11.0688,  23.7587,  -27.1648,  2.23835,  25.2008,  -21.6595,  31.8136,  -25.5534,
+  24.4512,  23.1929,  17.821,  28.7858,  -26.1759,  -20.5756,  -19.2494,  24.1878,  33.7658,  27.5424,
+  31.0448,  18.4029,  30.4158,  22.5848,  5.36668,  1.19233,  27.3685,  27.8359,  -29.1895,  -26.1325,
+  -25.9845,  -25.8973,  -24.5728,  -27.8699,  35.359,  0.40984,  -29.4164,  23.6661,  -25.1271,  0.175234,
+  -11.6324,  1.46894,  -12.5627,  -4.03616,  -17.3485,  3.70974,  12.365,  -29.36,  13.1584,  3.58384,
+  -31.0376,  -23.6669,  7.68159,  -15.7899,  -18.9046,  -27.8414,  25.4542,  28.7605,  18.0292,  16.8511,
+  26.3577,  -25.0098,  -29.7913,  14.3141,  -28.5552,  0.319603,  -28.4519,  23.6412,  29.8035,  -19.1276,
+  20.3177,  11.17,  26.9327,  -15.3723,  20.4969,  -30.7598,  12.9531,  30.4415,  -35.1446,  -22.445,
+  4.47002,  -14.8528,  -28.2017,  30.269,  33.4568,  26.4199,  16.3732,  -28.0116,  10.0458,  -28.1025,
+  -29.5683,  -19.4453,  -23.5985,  32.237,  -11.4731,  -27.8,  -18.7877,  -6.83364,  25.9518,  -29.9943,
+  2.17542,  18.5381,  -15.9589,  -26.0254,  -28.6107,  -23.339,  -29.1289,  28.0773,  29.9385,  -31.8214,
+  13.3219,  -23.2886,  25.8993,  27.2821,  -29.0572,  7.30664,  -16.6283,  19.5524,  28.7431,  -33.3724,
+  25.6631,  -24.3169,  30.3382,  0.198456,  26.7649,  -28.803,  -24.4171,  26.7438,  26.9731,  -22.1677,
+  -24.6753,  -29.1638,  4.55486,  29.7637,  -23.1072,  -4.60627,  -25.7177,  30.3892,  -26.6854,  -24.8854,
+  17.4669,  22.4496,  -30.1881,  28.2437,  30.8562,  -26.1486,  -4.46591,  -22.1244,  24.8651,  -26.8784,
+  13.7637,  19.4372,  -4.76794,  -30.1966,  26.2134,  27.9182,  -29.2784,  26.0106,  -18.7706,  -34.0118,
+  -29.0654,  24.6553,  -31.3816,  -26.4989,  23.7068,  1.16373,  32.5577,  29.3345,  -25.2949,  0.571252,
+  2.82173,  -29.7416,  -25.6979,  4.74016,  -2.62976,  -24.1134,  -33.5098,  -23.3661,  -22.5894,  32.1193,
+  27.9282,  -28.4532,  -27.7836,  28.7214,  30.2881,  -7.69478,  26.7343,  20.5364,  12.4323,  -27.3572,
+  29.2555,  -28.6159,  -30.0091,  -26.7023,  -26.3293,  3.90712,  14.8591,  -0.607094,  -32.2115,  21.3562,
+  -18.7932,  -3.79806,  -26.7584,  28.5009,  34.2392,  -22.3078,  -26.2855,  27.2327,  9.68053,  -31.1233,
+  -22.0484,  19.4728,  -27.3421,  -3.08452,  31.0529,  28.6281,  -18.3697,  -6.57421,  26.069,  2.39078,
+  30.8386,  -31.0658,  -23.3285,  -27.6814,  28.7297,  5.29319,  22.9126,  -24.7768,  -3.04009,  23.2398,
+  24.9488,  -29.625,  -18.8234,  22.1205,  -19.8812,  -27.9367,  23.3555,  13.0805,  31.0274,  -27.729,
+  -27.2076,  -31.5974,  -12.8816,  -6.01053,  9.10051,  -29.5757,  -26.9028,  23.6633,  30.6668,  31.9287,
+  -21.831,  -31.94,  -27.5364,  25.0653,  22.0055,  27.4321,  -18.7019,  -23.7274,  25.9422,  11.1908,
+  -2.23134,  -18.5947,  0.143037,  -13.649,  -17.0635,  -30.8862,  15.079,  -32.9899,  24.99,  -31.739,
+  25.4524,  -27.7726,  -27.106,  25.4847,  -25.5555,  -0.991211,  -20.5965,  -24.1943,  -28.3032,  -24.0342,
+  -20.309,  26.5061,  -22.9974,  -27.0039,  27.4933,  -1.0587,  27.8596,  -27.3495,  26.7651,  -28.5243,
+  -16.7973,  -24.9157,  -15.6817,  -26.8315,  -30.3258,  31.5587,  -5.55334,  -24.3911,  31.9357,  -28.7784,
+  31.7434,  26.1579,  28.4486,  -18.4871,  7.34547,  1.48967,  -29.5016,  11.6066,  -27.3967,  -13.6087,
+  -27.6741,  22.8038,  -23.5878,  -5.9564,  17.8513,  -29.9583,  -2.37357,  32.5419,  -29.1458,  32.7805,
+  23.1566,  -31.9369,  -23.0373,  23.2103,  -16.0664,  28.1103,  18.8452,  30.6456,  -26.7688,  -16.0999,
+  27.68,  -20.3259,  25.8081,  -25.7335,  -28.5418,  0.567349,  28.7845,  26.622,  28.4764,  -1.51653,
+  26.0304,  -16.5936,  22.3573,  26.2936,  28.9054,  -27.0113,  26.41,  -18.4142,  -21.7254,  -33.7042,
+  -24.9483,  -25.2201,  -20.1788,  -7.44302,  9.8366,  34.1621,  -27.4911,  27.349,  -30.2233,  -23.431,
+  18.11,  -27.612,  -26.9048,  -24.3536,  4.39451,  31.7554,  27.8924,  27.4685,  -19.3087,  27.3008,
+  -27.0266,  27.289,  -7.17641,  10.047,  25.636,  23.4042,  -28.8727,  31.4835,  29.8345,  -28.5591,
+  30.0097,  -11.4817,  27.2233,  19.8164,  4.8971,  -24.4252,  -28.1762,  -27.4153,  -29.0877,  21.9336,
+  29.6878,  22.9659,  27.7301,  31.7944,  9.90105,  4.57331,  20.0072,  -29.6427,  -26.7473,  28.2682,
+  -0.86521,  -19.8718,  -19.9296,  -7.99398,  18.8546,  -28.3289,  -34.3834,  22.3917,  31.5971,  -22.5202,
+  18.712,  -36.071,  27.293,  15.7764,  -27.9442,  2.1619,  16.055,  3.96579,  13.8643,  31.3186,
+  32.4076,  5.16647,  16.9896,  27.5544,  27.8417,  26.6786,  31.4323,  28.3448,  25.8291,  -4.59639,
+  -27.2887,  -30.1924,  -24.2599,  28.172,  22.8956,  -0.534298,  -19.669,  -6.12184,  -27.3885,  -26.1921,
+  -29.2639,  -30.79,  19.8914,  -21.5858,  -25.3295,  -19.1217,  27.8684,  -25.6224,  -13.1659,  -27.8829,
+  22.6231,  23.7129,  31.0281,  20.3554,  25.8675,  29.1434,  -27.6483,  28.3049,  17.928,  15.0367,
+  -26.4807,  -10.5258,  22.6269,  -30.7458,  -24.9959,  -13.7064,  23.1083,  -30.9517,  -27.5897,  26.7167,
+  31.8776,  -26.776,  -30.6389,  -11.3577,  27.7232,  -14.4651,  -13.4792,  29.1048,  -25.1886,  -26.07,
+  -27.349,  15.8394,  27.9523,  28.0536,  21.3109,  29.003,  -17.4154,  -17.9017,  -26.8128,  28.2506,
+  -2.29284,  -14.3674,  31.27,  -2.54487,  -3.5833,  34.5806,  -30.1103,  -25.3079,  26.2633,  -18.7835,
+  25.5805,  19.3443,  24.52,  -27.58,  -28.0823,  26.3047,  -7.08738,  20.6798,  -28.2212,  25.7887,
+  26.4034,  0.119673,  30.5637,  -25.6787,  23.5502,  26.0269,  25.6949,  -15.6879,  -26.5831,  28.904,
+  -26.0247,  -9.99108,  -26.2602,  -32.3883,  25.9729,  26.6005,  24.5026,  25.0016,  27.5911,  -23.1508,
+  -20.3815,  29.7395,  29.2662,  -19.0609,  31.7309,  -27.8514,  -29.2993,  22.8865,  20.2995,  -5.6128,
+  -30.2457,  9.17092,  27.835,  28.5103,  -26.9897,  -29.9057,  -21.0793,  -4.57445,  27.6213,  26.8357,
+  -11.7417,  -21.0962,  -31.6721,  -26.8928,  -20.8356,  26.1455,  -19.0701,  -8.34496,  -25.3134,  -28.8094,
+  27.9757,  29.2175,  -21.0933,  -24.9699,  24.3858,  27.8211,  12.3567,  29.2993,  31.5385,  -18.8269,
+  -0.011608,  -21.4701,  -21.539,  26.1337,  -24.3473,  14.0584,  -29.3977,  -32.1141,  27.5199,  -28.8648,
+  7.75182,  25.806,  32.9011,  -18.7368,  -30.4527,  31.7455,  -19.3019,  23.0365,  -1.87195,  -13.5317,
+  -25.0962,  -22.4903,  -29.1858,  29.3102,  -22.3848,  25.4748,  -23.7453,  6.52767,  -25.0351,  26.2429,
+  31.9159,  -17.115,  33.8506,  -23.0087,  -20.9757,  31.196,  -20.1597,  25.6204,  -9.41798,  -21.4705,
+  -20.8854,  -26.0984,  -34.5252,  -27.2315,  -22.5943,  -19.1909,  -17.3354,  -22.201,  23.106,  -27.6338,
+  -25.0898,  27.04,  -29.5458,  -26.538,  16.9751,  23.592,  27.6146,  -26.2068,  26.2141,  24.4267,
+  24.7272,  9.40748,  -19.9556,  -30.1361,  32.3992,  -29.6496,  31.9097,  -7.45376,  -6.02265,  21.7406,
+  12.9588,  24.7067,  -23.9264,  -30.3682,  29.6623,  14.5983,  -25.1401,  -27.389,  -21.8857,  -8.89949,
+  -14.9135,  5.75504,  29.1461,  30.2886,  26.9442,  -23.4837,  28.1127,  23.7031,  26.4984,  25.9581,
+  11.559,  31.0781,  20.7238,  -30.6462,  9.95733,  27.1294,  -30.2947,  21.8389,  30.6386,  -5.0432,
+  -29.2489,  17.6244,  31.2244,  30.661,  10.4865,  -23.799,  1.55454,  -28.9659,  -12.2159,  -22.3254,
+  7.90005,  -26.6616,  27.4793,  31.0242,  26.9963,  -25.7949,  -28.7896,  20.0712,  -26.8608,  -21.076,
+  -27.7262,  -28.3076,  34.1966,  19.7897,  31.6581,  9.05234,  20.0671,  -24.0756,  22.9487,  33.7754,
+  -18.1193,  -15.8099,  27.3899,  14.8779,  -23.9652,  22.4197,  31.6823,  30.5952,  -31.5141,  -24.5903,
+  -18.1316,  -31.1495,  22.958,  27.8052,  29.5963,  -18.5795,  26.9841,  31.8322,  -0.351689,  -22.6614,
+  -19.8988,  14.0911,  -16.8369,  -23.7182,  26.4948,  7.62998,  9.1945,  19.306,  -2.73829,  -35.3701,
+  -25.0904,  25.073,  -29.6152,  22.0818,  24.8561,  13.9648,  -28.0846,  -24.0826,  -25.6045,  -24.4624,
+  30.2466,  -5.76923,  -5.19355,  29.1709,  11.8293,  -25.5034,  -30.3867,  30.2591,  19.6866,  -26.3492,
+  28.3902,  -24.6567,  -12.253,  25.7727,  -30.6569,  29.9665,  -27.2063,  26.298,  -12.6049,  -3.37153,
+  26.4953,  25.092,  -26.57,  29.5834,  -12.0353,  22.3942,  -19.2073,  -28.8811,  19.3976,  26.8189,
+  -13.935,  -29.3134,  -33.1185,  -29.541,  9.71078,  -26.4183,  -15.7091,  30.5114,  -27.2858,  30.5647,
+  -1.09746,  -29.7743,  -24.1693,  -29.6552,  27.8349,  19.809,  23.8954,  26.6173,  -22.9412,  -32.4661,
+  27.3277,  -26.4276,  27.2621,  -21.3686,  23.6759,  28.7154,  28.3912,  27.3438,  -29.4452,  -16.9814,
+  12.9847,  -25.2129,  -25.9559,  -33.1281,  3.91537,  32.6415,  16.6431,  -28.8394,  -29.649,  20.0841,
+  29.1699,  -29.5819,  -9.1464,  26.1127,  21.3413,  22.4792,  2.133,  -27.4152,  -27.8252,  29.2894,
+  15.334,  30.3046,  -10.4229,  -10.7764,  -28.0278,  22.4658,  -27.439,  -30.3791,  30.5321,  -22.9803,
+  6.46057,  24.8012,  27.5958,  -18.8076,  26.5299,  -28.9041,  27.3251,  -26.2314,  -27.9924,  -19.2037,
+  4.85892,  9.72492,  26.7353,  -29.8218,  23.857,  28.866,  -28.9312,  30.6758,  -18.0452,  26.5108,
+  -23.8964,  -29.9406,  -29.136,  25.4157,  -31.6089,  26.1042,  9.91722,  18.0434,  26.9052,  17.1971,
+  -32.6598,  24.5018,  11.5486,  24.9573,  17.654,  23.9039,  30.0638,  -25.2417,  15.3681,  -28.2223,
+  -21.8195,  28.1573,  26.9243,  -2.49673,  -32.7101,  28.9593,  17.5464,  -31.1573,  4.77797,  13.3305,
+  -33.8743,  -22.7755,  -23.0864,  23.4218,  -26.2846,  12.5858,  -29.6406,  -25.767,  17.2475,  16.1203,
+  -30.7968,  -24.9951,  -19.7371,  13.9027,  19.9058,  -31.0174,  15.9192,  -27.5479,  -23.6288,  28.6009,
+  28.3959,  -14.1051,  23.9988,  30.86,  -21.0127,  28.4778,  20.3311,  29.4327,  22.4594,  23.7706,
+  9.35293,  -31.2707,  -29.7081,  18.1277,  29.7727,  -31.7433,  9.09072,  -6.82283,  3.62112,  25.464,
+  -28.047,  -19.7116,  -28.5212,  16.0622,  -18.661,  -32.1861,  29.5252,  -18.6584,  25.4095,  3.06433,
+  29.7356,  27.6205,  24.152,  29.7208,  -32.0173,  8.97192,  13.4135,  28.064,  -21.5065,  13.9226,
+  -29.4746,  -19.6528,  32.0068,  24.4011,  24.866,  25.3386,  -30.356,  22.5347,  2.96868,  -22.3445,
+  -30.0645,  28.2726,  -11.7645,  -28.2675,  -9.42121,  24.136,  -6.74131,  -32.4484,  -29.631,  -25.4375,
+  -26.5161,  26.3058,  -25.2747,  -23.7317,  -6.13519,  -21.8826,  -30.8375,  -15.398,  -29.6419,  -26.1164,
+  -17.9671,  -36.49,  -21.2677,  -29.5215,  -20.7141,  10.6304,  2.77575,  32.4273,  29.7014,  22.1867,
+  19.3878,  -31.322,  6.49102,  -3.2545,  -9.0852,  22.0541,  31.965,  -22.5399,  -29.7519,  -27.7786,
+  27.1444,  28.2514,  -27.8947,  18.9804,  -16.9555,  -24.3691,  19.127,  24.7307,  28.3882,  -30.2657,
+  -22.8239,  -16.7436,  -0.855249,  -20.4053,  27.5097,  21.9525,  -32.309,  30.6399,  30.1419,  26.8047,
+  -24.0741,  1.584,  -10.4358,  -21.3814,  27.19,  -23.1586,  -31.573,  -11.808,  31.0844,  29.657,
+  -22.2856,  14.7445,  30.2599,  26.4198,  -29.738,  25.7608,  -21.2477,  26.2405,  29.567,  21.1744,
+  8.15591,  24.3263,  30.1611,  10.0564,  -23.2797,  -28.5747,  32.7624,  30.2824,  29.2764,  3.93694,
+  -29.1473,  31.0675,  -32.0882,  16.2497,  26.7963,  -26.5727,  -12.8525,  -13.1321,  23.2433,  20.8107,
+  -26.8963,  20.4383,  26.043,  19.5062,  20.8046,  27.0089,  32.3957,  30.1002,  -26.772,  21.1912,
+  7.24681,  27.761,  29.0593,  27.0279,  3.51113,  12.8819,  -25.9967,  -31.8003,  29.4684,  20.9711,
+  13.3949,  -22.9392,  -32.372,  -11.7308,  -26.5926,  31.8018,  -23.2344,  -28.627,  -23.6709,  29.7068,
+  14.6224,  29.1984,  -11.5444,  -7.622,  -4.40561,  32.6313,  28.7754,  28.7996,  -29.8903,  -29.8413,
+  21.8132,  21.4895,  -10.5918,  -27.9874,  -29.1998,  -7.88754,  -26.2215,  -27.6717,  -29.7974,  20.3029,
+  30.6398,  13.3348,  -8.90088,  28.2027,  12.8578,  -6.10928,  30.1573,  -15.3693,  31.2763,  -31.604,
+  7.69452,  -20.468,  -0.725897,  -17.7885,  -34.179,  23.9274,  -33.7322,  4.95522,  20.376,  -24.124,
+  -16.2368,  28.18,  -27.8442,  -24.8592,  -23.8908,  -28.1531,  -21.532,  22.8029,  -27.761,  23.8464,
+  28.5266,  -27.0087,  -30.8103,  16.8395,  -24.7334,  28.4039,  -15.2453,  -22.8036,  23.1276,  24.6325,
+  25.8694,  3.16443,  26.6184,  29.7918,  -30.7991,  13.2297,  26.0838,  -33.6148,  26.9776,  15.521,
+  14.7674,  -23.8727,  18.8936,  -25.5991,  29.5112,  -26.7633,  -14.5239,  -18.442,  -29.6166,  27.419,
+  23.5684,  -27.0568,  24.3254,  -23.9386,  -28.2977,  -6.5751,  -26.4475,  24.4255,  -29.1281,  23.4679,
+  27.7822,  30.7255,  -1.99458,  20.2326,  23.2534,  31.7707,  25.0116,  29.3466,  -18.6342,  24.0287,
+  -2.99141,  30.0116,  -28.9771,  19.1404,  31.1042,  25.7434,  27.8648,  -26.3034,  5.71177,  -24.8983,
+  23.0805,  32.842,  27.4347,  -26.9676,  24.9445,  23.325,  21.1131,  -24.823,  26.3711,  3.2474,
+  10.3718,  -28.7833,  30.5575,  9.85289,  -21.892,  29.3978,  30.1948,  23.8218,  23.222,  -29.1852,
+  27.7255,  20.3315,  29.9062,  29.986,  4.67365,  -33.1414,  17.7552,  19.3373,  11.1786,  -30.3787,
+  -29.023,  32.2989,  30.6238,  -27.3308,  -26.3175,  -13.5455,  -31.0382,  14.8621,  6.39409,  -23.131,
+  -27.123,  24.2783,  -3.92328,  -4.50597,  7.42484,  -33.698,  28.5096,  29.5251,  -14.3258,  -3.6066,
+  -23.0494,  -26.7579,  28.8462,  -15.6223,  -26.2922,  12.9276,  -32.2686,  -23.3629,  33.3801,  16.7132,
+  -26.8345,  -25.7784,  -25.3749,  -33.2728,  -8.9501,  -26.9518,  30.3594,  23.4373,  -23.7413,  17.9705,
+  23.5842,  29.4776,  30.4829,  24.2271,  -0.161754,  -28.2491,  -25.2052,  -22.8967,  -26.0211,  -27.7543,
+  24.3599,  -15.7669,  -22.5895,  -28.7952,  -22.055,  -25.5915,  28.9144,  -16.4832,  -29.7307,  -29.0691,
+  28.375,  -10.3376,  -24.8983,  -8.69646,  -29.9067,  -30.5775,  -11.9404,  31.5999,  -23.6965,  16.888,
+  28.4126,  -11.5479,  -23.3856,  5.18897,  -26.5941,  28.8298,  30.4912,  31.1565,  24.4498,  -22.3964,
+  -24.1234,  10.228,  -33.0931,  -26.9404,  19.2413,  26.9345,  -30.9596,  -29.113,  -25.2902,  24.2,
+  -25.4078,  -28.7246,  3.69898,  -1.16746,  32.1418,  -3.17967,  -27.3689,  -31.2841,  -29.6202,  17.9144,
+  -26.1398,  -23.039,  22.2818,  -17.6404,  21.0391,  16.8127,  31.3789,  30.0405,  20.4312,  24.7879,
+  8.00192,  29.0065,  -29.817,  -16.4716,  24.1092,  -22.226,  -31.6181,  -31.5672,  28.0351,  -17.2402,
+  31.7325,  31.9001,  27.7782,  -4.24977,  -15.6191,  24.1385,  24.2336,  14.6184,  25.0755,  30.3493,
+  -28.2887,  32.6521,  -12.5598,  -5.50877,  -30.1755,  -27.6881,  6.29828,  17.4815,  31.8948,  12.6266,
+  -0.359956,  29.2073,  28.969,  -29.7205,  -11.2714,  0.406908,  17.9333,  31.8163,  31.017,  -29.2269,
+  -29.0377,  31.3177,  29.7657,  10.1907,  27.7841,  -20.7609,  19.9711,  28.4244,  -21.8752,  -30.6345,
+  17.4543,  27.7347,  -28.1826,  22.937,  -30.8643,  24.0061,  -22.2651,  18.2893,  -29.284,  23.9941,
+  -28.0761,  24.803,  31.8109,  -28.8028,  16.1743,  -12.1617,  -0.72346,  -30.067,  -4.2192,  -27.0942,
+  -25.232,  -26.1228,  8.91766,  30.4163,  25.6673,  -23.7325,  27.1517,  -31.5329,  21.9333,  -24.6589,
+  4.60713,  25.3531,  -31.8236,  18.2215,  -9.14385,  28.3095,  27.1683,  28.3489,  4.02531,  -16.0549,
+  24.0699,  -6.34668,  -18.4165,  20.7728,  29.1091,  -22.2702,  28.3486,  -25.2234,  28.4655,  33.2287,
+  -22.8298,  31.3302,  2.64044,  23.1828,  29.6895,  -25.4711,  31.5772,  23.9756,  -16.879,  27.9223,
+  29.7277,  -26.7938,  4.07466,  -26.4354,  9.2763,  -30.3782,  -22.0278,  -29.4941,  17.9424,  32.048,
+  12.4439,  -31.3555,  -20.9972,  -26.2987,  13.5435,  -22.8582,  27.6758,  -9.94522,  27.3625,  27.3219,
+  -22.9488,  -16.6431,  24.1804,  -28.3345,  30.2393,  25.4889,  -27.4008,  27.9465,  12.2412,  -26.6803,
+  -26.743,  -32.8474,  0.372974,  29.1708,  19.5952,  25.1482,  25.9059,  -27.5882,  5.42076,  22.85,
+  -31.2894,  -25.9807,  10.5742,  -26.7813,  23.7237,  -16.5732,  -29.0309,  -27.0235,  26.6705,  -28.518,
+  -20.4058,  2.00424,  -29.175,  31.778,  18.8177,  3.31018,  24.955,  23.1262,  -33.0894,  25.9946,
+  24.3616,  -24.0343,  27.1144,  -22.1754,  -21.1021,  26.5055,  28.6716,  -27.1741,  27.0815,  17.9714,
+  23.3566,  -5.38303,  -5.39538,  30.3866,  -26.9718,  35.1237,  25.4298,  3.91206,  -28.7493,  27.696,
+  5.08952,  30.7567,  -18.6511,  -29.7945,  -11.3073,  15.3054,  -30.8987,  26.5159,  -26.6907,  31.0579,
+  -27.6084,  2.75121,  31.4804,  -6.19236,  -15.7763,  14.9172,  -26.3009,  -31.2368,  -9.4829,  -31.3671,
+  -29.5254,  13.2075,  30.4024,  -27.162,  -16.1956,  -8.31423,  6.63926,  26.348,  -12.046,  31.1117,
+  -25.366,  20.4751,  27.6036,  30.567,  -27.8044,  21.4053,  -6.38558,  -26.4736,  23.6342,  -25.097,
+  29.9341,  -27.5616,  21.6381,  -26.4874,  -7.84333,  -32.991,  25.4792,  23.7269,  1.74322,  -23.5864,
+  -18.5298,  -14.6827,  -11.3096,  29.9432,  -32.862,  -24.1094,  -11.6413,  30.2344,  27.1315,  27.8693,
+  32.2969,  16.969,  -28.0569,  17.4631,  4.70922,  -25.9748,  -25.3672,  1.22407,  -26.9063,  29.3145,
+  -25.8316,  27.7444,  28.2792,  -23.3563,  5.99753,  13.0559,  27.7726,  -29.9726,  30.8745,  -6.43925,
+  -27.2708,  -26.9994,  17.3893,  29.682,  25.5361,  -31.4377,  -17.2704,  18.7654,  -14.158,  25.9902,
+  -25.6441,  24.6615,  -30.554,  20.1149,  -23.1114,  22.9932,  -27.1491,  23.1407,  20.2035,  27.6358,
+  -25.8465,  22.7159,  -12.719,  -3.1604,  -14.716,  35.3309,  -30.8772,  15.2056,  -22.8817,  29.0612,
+  -15.0762,  23.2299,  -33.553,  -0.534045,  -26.0199,  -30.5037,  -30.0219,  -26.314,  -0.87084,  6.17686,
+  -31.2644,  21.6789,  -23.0635,  30.3653,  32.4709,  -10.6627,  -8.93373,  -26.1952,  -25.8104,  24.1203,
+  27.6177,  -26.4676,  24.8212,  -18.8669,  -30.9463,  -19.2258,  -19.3205,  -27.0951,  29.8876,  -27.9056,
+  29.8907,  -16.8603,  31.4539,  14.0958,  6.41704,  -24.3132,  30.3365,  -22.9716,  22.0783,  15.2731,
+  10.7962,  25.3683,  -14.1714,  -28.3355,  16.2753,  -31.916,  -18.5001,  -33.3567,  -19.1926,  33.6924,
+  -27.1233,  27.3556,  -30.3365,  28.7793,  -32.7505,  10.8142,  24.5012,  3.01584,  23.2699,  -25.1587,
+  -21.1494,  -13.0804,  -28.0242,  -25.9433,  23.708,  -28.3257,  26.5447,  -25.3321,  -15.3167,  -32.5233,
+  13.8092,  29.5554,  19.7023,  28.8503,  27.2958,  -28.0342,  27.0246,  -24.8335,  26.6124,  19.7314,
+  28.6138,  -29.7628,  -30.633,  9.72933,  -30.7367,  4.84663,  25.4703,  24.3461,  11.5542,  23.544,
+  -26.3538,  -0.544388,  26.4868,  -28.1417,  -28.8192,  -19.9709,  -30.9293,  22.3116,  27.6516,  26.5657,
+  1.22707,  10.0439,  -22.6008,  26.2456,  25.9425,  -30.7121,  -27.1501,  -30.7924,  -24.8047,  -30.143,
+  26.4384,  12.739,  29.9807,  29.7579,  17.7973,  25.8902,  28.3679,  -28.2055,  16.9724,  -27.3189
+};
 
 const struct lsp_codebook lsp_cbdt[] = {
   /* codebook/lspdt1-4.txt */
   {
     4,
-    6.33985,
-    81,
+    6.44294,
+    87,
     codes0
   },
   /* codebook/lspdt5-10.txt */
@@ -839,5 +1360,12 @@ const struct lsp_codebook lsp_cbdt[] = {
     729,
     codes1
   },
+  /* codebook/lspdt1-10.txt */
+  {
+    10,
+    9,
+    512,
+    codes2
+  },
   { 0, 0, 0, 0 }
 };
diff --git a/codec2-dev/src/codebookjvm.c b/codec2-dev/src/codebookjvm.c
new file mode 100644 (file)
index 0000000..0e21a23
--- /dev/null
@@ -0,0 +1,235 @@
+/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */
+
+/*
+ * This intermediary file and the files that used to create it are under 
+ * The LGPL. See the file COPYING.
+ */
+
+#include "defines.h"
+
+  /* codebook/lspjvm1.txt */
+static const float codes0[] = {
+  0.210255,  0.377659,  0.423269,  0.400938,  0.478056,
+  0.53236,  0.601365,  0.646555,  0.684234,  0.698676,
+  0.032956,  0.043506,  0.07121,  0.11938,  0.333943,
+  0.405757,  0.528245,  0.577805,  0.692151,  0.748558,
+  0.074672,  0.093144,  0.195148,  0.324108,  0.350785,
+  0.402025,  0.456705,  0.500132,  0.653953,  0.686855,
+  0.240905,  0.416519,  0.609486,  0.607996,  0.642493,
+  0.673006,  0.687839,  0.712076,  0.731746,  0.718608,
+  0.057446,  0.086502,  0.130674,  0.171643,  0.239946,
+  0.279123,  0.286909,  0.501975,  0.570826,  0.638823,
+  0.017882,  -0.013511,  -0.142225,  0.167153,  0.308066,
+  0.352573,  0.437795,  0.486891,  0.584845,  0.647598,
+  0.04698,  0.07396,  0.119758,  0.197191,  0.289588,
+  0.332222,  0.429597,  0.478396,  0.52641,  0.700443,
+  0.042792,  0.054636,  0.218961,  0.528048,  0.422554,
+  0.479162,  0.537828,  0.595358,  0.679379,  0.709526,
+  0.054313,  0.060307,  0.05466,  0.097842,  0.143043,
+  0.160662,  0.251864,  0.329837,  0.444627,  0.552299,
+  0.076678,  0.09832,  0.173618,  0.219049,  0.259334,
+  0.42696,  0.468356,  0.523478,  0.644781,  0.670285,
+  0.072407,  0.106906,  0.27451,  0.472652,  0.648285,
+  0.707364,  0.712602,  0.731155,  0.735989,  0.73021,
+  0.053147,  0.085674,  0.132992,  0.212295,  0.264206,
+  0.31281,  0.488638,  0.522639,  0.638749,  0.699633,
+  0.047449,  0.061378,  0.09417,  0.161906,  0.24355,
+  0.322804,  0.390514,  0.448901,  0.465275,  0.437053,
+  0.039313,  0.059639,  0.101045,  0.161066,  0.318078,
+  0.376262,  0.433082,  0.47259,  0.649039,  0.694638,
+  0.048289,  0.062368,  0.102421,  0.199427,  0.478942,
+  0.501292,  0.539243,  0.592485,  0.644152,  0.684887,
+  0.059707,  0.134781,  0.500978,  0.537298,  0.524009,
+  0.553262,  0.575468,  0.617187,  0.670339,  0.691938,
+  0.054931,  0.085709,  0.12565,  0.181901,  0.212169,
+  0.239085,  0.418893,  0.497027,  0.597271,  0.675501,
+  0.061959,  0.094473,  0.152022,  0.203759,  0.26219,
+  0.314438,  0.396465,  0.598217,  0.638693,  0.683203,
+  0.121952,  0.176775,  0.258048,  0.314808,  0.374419,
+  0.422949,  0.482535,  0.539617,  0.603429,  0.649946,
+  0.053336,  0.06945,  0.109332,  0.152945,  0.184015,
+  0.426688,  0.496913,  0.555075,  0.646199,  0.683624,
+  0.209199,  0.338387,  0.401263,  0.284364,  0.201828,
+  0.224417,  0.3461,  0.440431,  0.575261,  0.648738,
+  0.044978,  0.071498,  0.110116,  0.172387,  0.222703,
+  0.280248,  0.411043,  0.460651,  0.713573,  0.726476,
+  0.065596,  0.084849,  0.136519,  0.246735,  0.404958,
+  0.464447,  0.499717,  0.546731,  0.593953,  0.634352,
+  0.037222,  0.049678,  0.144975,  0.292832,  0.425448,
+  0.55389,  0.64008,  0.713589,  0.74755,  0.75387,
+  0.058309,  0.074586,  0.141745,  0.272278,  0.328995,
+  0.388094,  0.448297,  0.491701,  0.507557,  0.585513,
+  0.050023,  0.069801,  0.139143,  0.22505,  0.315564,
+  0.372745,  0.569384,  0.604187,  0.634851,  0.68578,
+  0.054461,  0.107958,  0.409721,  0.381157,  0.384675,
+  0.432788,  0.48829,  0.552233,  0.637233,  0.682111,
+  0.044054,  0.054642,  0.020775,  0.083404,  0.116689,
+  0.082766,  0.399185,  0.47028,  0.572619,  0.659219,
+  0.042527,  0.062601,  0.081034,  0.109889,  0.396217,
+  0.456807,  0.498884,  0.546736,  0.594549,  0.653205,
+  0.040545,  0.056928,  0.088922,  0.134529,  0.303823,
+  0.3548,  0.421072,  0.487222,  0.544268,  0.579065,
+  0.103286,  0.153098,  0.196107,  0.245624,  0.309443,
+  0.344386,  0.413976,  0.496647,  0.556428,  0.611368,
+  0.047,  0.061973,  0.102409,  0.174546,  0.258304,
+  0.33856,  0.40973,  0.450177,  0.377802,  0.623712
+};
+  /* codebook/lspjvm2.txt */
+static const float codes1[] = {
+  0.180622,  0.006066,  -0.021468,  -0.013437,  0.015371,
+  0.003683,  0.008561,  0.045263,  0.004004,  0.049437,
+  -0.163772,  0.023012,  0.008096,  0.000595,  -0.007511,
+  0.018726,  0.024696,  -0.012187,  0.04088,  -0.03752,
+  0.018287,  0.048845,  0.002788,  0.008714,  0.020441,
+  -0.041314,  -0.023004,  -0.012868,  -0.006827,  0.020867,
+  0.020537,  0.025562,  -0.025163,  -0.005949,  0.176464,
+  0.029031,  0.023992,  0.040001,  -0.001579,  -0.012196,
+  0.089764,  0.051566,  0.026604,  -0.011248,  0.027925,
+  -0.082012,  -0.046648,  0.055399,  0.034046,  0.005132,
+  0.113247,  -0.023355,  0.041174,  0.03637,  -0.046196,
+  0.051016,  0.030063,  -0.017635,  -0.011313,  -0.036656,
+  -0.062688,  0.047435,  -0.002149,  0.001155,  0.053891,
+  0.005997,  0.009596,  -0.018469,  0.041943,  0.0443,
+  -0.028231,  0.016577,  -0.007576,  -0.04395,  -0.016269,
+  0.035918,  0.013668,  -0.007319,  -0.028917,  0.040241,
+  -0.00286,  -0.017397,  0.055068,  -0.003111,  -0.01823,
+  -0.014853,  -0.025694,  0.024,  0.040516,  0.023921,
+  -0.010584,  0.018591,  0.007213,  0.008872,  0.002639,
+  -0.039141,  0.021724,  -0.007418,  0.056879,  -0.025835,
+  -0.012914,  -0.035655,  0.025106,  -0.033265,  0.025828,
+  0.008212,  -0.009233,  0.008548,  0.0211,  -0.00322,
+  -0.033749,  0.036061,  0.057176,  0.00473,  0.007389,
+  -0.016066,  -0.009876,  0.169501,  -0.019578,  0.018563,
+  -0.005042,  -0.017609,  -0.003367,  -0.033805,  -0.034261,
+  0.021848,  -0.037098,  -0.016724,  -0.013664,  -0.022234,
+  -0.014318,  -0.041632,  -0.025771,  0.009917,  -0.004712,
+  0.016061,  0.039283,  -0.031636,  -0.10772,  -0.031214,
+  0.045005,  0.009421,  0.002766,  0.047322,  0.01061,
+  -0.000365,  -0.012189,  -0.027333,  -0.00511,  0.026984,
+  -0.095422,  -0.058078,  -0.061673,  -0.024753,  0.012418,
+  0.010534,  0.026639,  -0.026237,  -0.024583,  -0.00674,
+  -0.000214,  0.009931,  -0.045554,  0.008574,  -0.033281,
+  -0.00565,  0.008215,  0.012479,  0.015845,  -0.173872,
+  -0.007468,  0.03686,  -0.007603,  -0.033418,  0.049009,
+  0.027431,  0.004773,  -0.059174,  0.012162,  0.009249,
+  0.075983,  -0.05033,  -0.034798,  -0.009475,  0.015972,
+  -0.075828,  0.017657,  0.007893,  -0.02471,  -0.037156,
+  -0.00387,  -0.019629,  -0.034949,  0.060981,  -0.005291,
+  -0.027994,  -0.051432,  0.023954,  -0.002302,  -0.033216,
+  -0.004043,  0.056778,  0.030301,  -0.02076,  -0.03771,
+  -0.024427,  0.031822,  -0.063218,  0.009871,  0.021376,
+  -0.012111,  -0.005709,  0.024335,  0.125538,  0.082754,
+  0.008418,  0.005587,  0.021277,  -0.044805,  0.005042,
+  0.004683,  0.017979,  0.055288,  0.058361,  -0.009646,
+  0.002515,  -0.021444,  -0.158007,  0.009838,  0.033717,
+  -0.010086,  -0.015696,  0.009078,  0.032922,  -0.055059,
+  0.023172,  -0.048288,  0.032483,  0.010087,  0.027439,
+  -0.009869,  -0.014953,  -0.058391,  -0.054933,  0.000823,
+  -0.02695,  -0.127542,  -0.040479,  -0.019142,  0.027921,
+  0.052918,  -0.00397,  0.077123,  -0.06321,  -0.039627,
+  -0.016171,  -0.027555,  -0.007027,  0.002134,  0.084092,
+  -0.016824,  -0.025088,  -0.078462,  -0.008012,  -0.082548,
+  -0.018758,  -0.028954,  0.04872,  -0.112156,  -0.052909,
+  -0.007753,  -0.123471,  0.047735,  0.054028,  -0.003099,
+  0.083138,  0.089523,  -0.11661,  0.02168,  0.037196,
+  -0.00683,  0.097009,  -0.00186,  0.029964,  0.010137,
+  0.011289,  0.00737,  0.014781,  -0.012922,  -0.066981,
+  0.034641,  -0.154921,  0.011883,  -0.009672,  -0.021795,
+  -0.0415,  0.136367,  -0.041281,  -0.032394,  -0.024645,
+  0.010206,  -0.008545,  -0.042595,  0.156139,  -0.026349,
+  -0.002143,  0.02783,  0.067894,  -0.098022,  0.044893,
+  0.004982,  -0.020281,  -0.030082,  -0.074794,  0.052684,
+  0.015115,  -0.056898,  0.148751,  0.028815,  -0.062015
+};
+  /* codebook/lspjvm3.txt */
+static const float codes2[] = {
+  0.199356,  -0.046114,  -0.014628,  0.019331,  0.007094,
+  -0.223637,  -0.027704,  0.005744,  -0.03091,  -0.002358,
+  0.012583,  0.025512,  -0.018059,  -0.159782,  0.00384,
+  -0.132734,  0.04202,  0.037016,  0.000379,  -0.010638,
+  -0.006745,  -0.011922,  0.018691,  -0.032089,  -0.159781,
+  0.044397,  0.027639,  0.007529,  -0.010559,  0.005324,
+  0.094328,  0.033697,  -0.071778,  0.025642,  0.025931,
+  0.018792,  0.016222,  -0.154698,  -0.017059,  0.000699,
+  -0.067211,  0.033705,  0.025447,  -0.026276,  0.031514,
+  -0.104739,  -0.017205,  -0.052495,  0.000481,  0.008038,
+  0.068027,  0.001855,  -0.00731,  0.028354,  -0.048914,
+  0.028143,  -0.006052,  -0.006966,  -0.015113,  -0.041109,
+  -0.038585,  -0.005834,  -0.021703,  -0.007152,  0.014956,
+  0.114966,  0.01575,  0.039961,  -0.03241,  0.006278,
+  0.02034,  -0.036924,  0.033169,  -0.047163,  0.009171,
+  0.01072,  -0.039946,  -0.017723,  -0.002642,  -0.010278,
+  -0.079353,  -0.060398,  0.03467,  -0.002409,  -0.01072,
+  0.028527,  0.006945,  -0.04559,  0.016821,  -0.004159,
+  -0.018629,  -0.033281,  0.011648,  0.033733,  -0.036671,
+  -0.043644,  0.012612,  0.0017,  -0.017529,  -0.053521,
+  0.048372,  -0.008161,  -0.046648,  -0.050377,  0.005868,
+  -0.013208,  -0.130732,  0.048663,  0.006746,  -0.008581,
+  -0.012499,  -0.023672,  -0.013511,  -0.055482,  -0.020262,
+  -0.009173,  -0.041402,  0.015274,  -0.007771,  0.027925,
+  -0.002419,  -0.011154,  0.039476,  -0.022125,  -0.033716,
+  0.023169,  -0.032382,  0.029847,  0.029624,  -0.014876,
+  0.044864,  -0.005728,  0.066242,  -0.031428,  -0.037726,
+  -0.006296,  -0.018223,  -0.031106,  0.026031,  0.020168,
+  -0.00268,  0.019292,  -0.054964,  -0.028514,  0.003996,
+  0.014037,  0.063021,  -0.019018,  0.019135,  0.006253,
+  -0.030836,  -0.013152,  0.043025,  -0.008038,  0.001975,
+  0.013008,  0.031322,  -0.004349,  -0.045247,  -0.022323,
+  -0.001254,  -0.003786,  -0.039013,  0.007816,  -0.058864,
+  -0.02985,  -0.007355,  0.092691,  -0.096908,  0.012834,
+  -0.004289,  -0.005152,  0.056846,  0.028014,  0.009501,
+  0.011267,  0.030816,  0.028408,  0.022022,  -0.054663,
+  0.011944,  0.012077,  0.018871,  0.002067,  0.013561,
+  0.037847,  -0.01254,  -0.0057,  0.026174,  0.036866,
+  -0.011667,  0.029533,  -0.001613,  0.002176,  -0.019421,
+  -0.064045,  0.009466,  -0.014587,  0.051633,  -0.007692,
+  -0.000734,  0.061783,  0.053816,  -0.01943,  0.00076,
+  -0.02734,  0.044591,  0.019738,  0.038465,  0.009254,
+  0.07726,  -0.065671,  -0.002924,  -0.002751,  0.010811,
+  -0.05946,  0.069552,  -0.070568,  -0.034797,  0.011398,
+  -0.019409,  0.022774,  0.008093,  -0.046885,  0.024185,
+  0.045376,  0.029876,  0.052322,  0.053145,  0.010152,
+  0.004524,  -0.017804,  0.058043,  0.019065,  0.119071,
+  0.004986,  0.000119,  -0.004026,  0.059938,  0.000625,
+  0.010842,  -0.011323,  -0.02512,  -0.031177,  0.037555,
+  -0.054404,  0.032783,  0.102674,  0.037726,  -0.016502,
+  -0.024732,  0.019641,  -0.069165,  0.035973,  -0.007114,
+  0.022856,  0.033603,  -0.03471,  0.107206,  -0.046868,
+  -0.02035,  -0.066156,  -0.0491,  -0.00256,  -0.012345,
+  -0.036348,  -0.047706,  0.008369,  0.048741,  0.044398,
+  0.029796,  -0.065326,  -0.068475,  0.070067,  -0.004048,
+  0.06303,  0.124997,  -0.026117,  -0.037609,  -0.022144,
+  -0.011243,  0.028624,  -0.006808,  0.008654,  0.058514,
+  0.006905,  -0.033728,  0.163891,  0.017925,  -0.028119,
+  -0.038975,  -0.058758,  -0.03637,  -0.069444,  0.05181,
+  0.005915,  -0.008354,  -0.078672,  0.025962,  0.10104,
+  -0.032262,  0.157582,  -0.012208,  -0.008087,  -0.00719,
+  0.023464,  0.035066,  0.011241,  -0.057235,  0.056908,
+  -0.019183,  -0.017633,  0.014499,  0.143127,  -0.005776,
+  0.051205,  -0.185582,  -0.001777,  0.01817,  -0.008225
+};
+
+const struct lsp_codebook lsp_cbjvm[] = {
+  /* codebook/lspjvm1.txt */
+  {
+    5,
+    6,
+    64,
+    codes0
+  },
+  /* codebook/lspjvm2.txt */
+  {
+    5,
+    6,
+    64,
+    codes1
+  },
+  /* codebook/lspjvm3.txt */
+  {
+    5,
+    6,
+    64,
+    codes2
+  },
+  { 0, 0, 0, 0 }
+};
index f290a446d566c29d4b272ed58b6f87acb9da2031..5c0886000ac0aa176c52d27912838eaa0c9728b8 100644 (file)
@@ -169,7 +169,7 @@ int codec2_bits_per_frame(struct CODEC2 *c2) {
     if (c2->mode == CODEC2_MODE_2500)
        return 50;
     if  (c2->mode == CODEC2_MODE_1400)
-       return 56;
+       return 60;
 
     return 0; /* shouldn't get here */
 }
@@ -311,6 +311,7 @@ void codec2_decode_2500(struct CODEC2 *c2, short speech[], const unsigned char *
     int     Wo_index;
     float   ak[LPC_ORD+1];
     float   ak_interp[LPC_ORD+1];
+    float   lsps_interp[LPC_ORD];
     int     i;
     unsigned int nbit = 0;
     MODEL   model_interp;
@@ -366,7 +367,8 @@ void codec2_decode_2500(struct CODEC2 *c2, short speech[], const unsigned char *
     memset(&model_interp.A, 0, MAX_AMP*sizeof(model_interp.A[0]));
 
     interpolate_lsp(&model_interp, &c2->prev_model, &model,
-                   c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp);
+                   c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp,
+                   lsps_interp);
     apply_lpc_correction(&model_interp);
     printf("Wo: %1.5f  L: %d prev_e: %3.2f v1: %d pv: %d\n", 
           model_interp.Wo, model_interp.L, c2->prev_energy, voiced1,
@@ -415,18 +417,18 @@ void codec2_decode_2500(struct CODEC2 *c2, short speech[], const unsigned char *
 
     Parameter                      frame 2  frame 4   Total
     -------------------------------------------------------
-    Harmonic magnitudes (LSPs)     25        7        32
+    Harmonic magnitudes (LSPs)     36        0        36
     Energy                          5        5        10
     Wo (fundamental frequnecy)      7        3        10
     Voicing (10ms update)           2        2         4
-    TOTAL                          39       17        56
+    TOTAL                          50       10        60
  
 \*---------------------------------------------------------------------------*/
 
 void codec2_encode_1400(struct CODEC2 *c2, unsigned char * bits, short speech[])
 {
     MODEL   model;
-    float   lsps[LPC_ORD], prev_lsps_[LPC_ORD];
+    float   lsps[LPC_ORD], lsps_[LPC_ORD];
     float   ak[LPC_ORD+1];
     float   e;
     int     voiced1, voiced2, voiced3, voiced4;
@@ -435,64 +437,90 @@ void codec2_encode_1400(struct CODEC2 *c2, unsigned char * bits, short speech[])
     int     Wo_index, delta_Wo_index;
     int     i;
     unsigned int nbit = 0;
+    unsigned int nbit_tmp;
     float   prev_Wo;
+    //static  int frames;
 
     assert(c2 != NULL);
 
-    memset(bits, '\0', codec2_bits_per_frame(c2)/8);
+    memset(bits, '\0',  ((codec2_bits_per_frame(c2) + 7) / 8));
 
     /* frame 1: - we just want voicing -------------------------------- */
 
+    //printf("frame: %d\n", ++frames);
     analyse_one_frame(c2, &model, speech);
     voiced1 = model.voiced;
 
     /* frame 2: - full LSP and Wo ------------------------------------- */
 
+    //printf("frame: %d\n", ++frames);
     analyse_one_frame(c2, &model, &speech[N]);
     voiced2 = model.voiced;
     
     Wo_index = encode_Wo(model.Wo);
 
     e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD);
-    encode_lsps_diff_freq_vq(lsp_indexes, lsps, LPC_ORD);
+    encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD);
     energy_index = encode_energy(e);
 
     pack(bits, &nbit, Wo_index, WO_BITS);
-    for(i=0; i<LSP_DIFF_FREQ_INDEXES; i++) {
-       pack(bits, &nbit, lsp_indexes[i], lspd_bits(i));
+    for(i=0; i<LSP_SCALAR_INDEXES; i++) {
+       pack(bits, &nbit, lsp_indexes[i], lsp_bits(i));
     }
     pack(bits, &nbit, energy_index, E_BITS);
     pack(bits, &nbit, voiced1, 1);
     pack(bits, &nbit, voiced2, 1);
 
-    /* decode LSPs and Wo for use in frame 4 */
+    /* decode LSPs for testing */
 
-    decode_lsps_diff_freq_vq(prev_lsps_, lsp_indexes, LPC_ORD);
+    decode_lsps_scalar(lsps_, lsp_indexes, LPC_ORD);
+    bw_expand_lsps(lsps_, LPC_ORD);
     prev_Wo = decode_Wo(Wo_index);
+    /*
+      printf("\n  lsps_......: ");
+    for(i=0; i<LPC_ORD; i++)
+       printf("%5.3f  ", lsps_[i]);
+    printf("\n");
+    */
 
     /* frame 3: - we just want voicing --------------------------------- */
 
+    //printf("frame: %d\n", ++frames);
     analyse_one_frame(c2, &model, &speech[2*N]);
     voiced3 = model.voiced;
 
-    /* frame 4: - delta-time and delta Wo -----------------------------  */
+    /* frame 4: - voicing and delta Wo -----------------------------  */
 
+    //printf("frame: %d\n", ++frames);
     analyse_one_frame(c2, &model, &speech[3*N]);
     voiced4 = model.voiced;
     
     delta_Wo_index =  encode_Wo_dt(model.Wo, prev_Wo);
   
+    /* need to run this to get LPC energy */
     e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD);
-    encode_lsps_diff_time_vq(lsp_indexes, lsps, prev_lsps_, LPC_ORD);
+
+    //encode_lsps_diff_time_vq(lsp_indexes, lsps, prev_lsps_, LPC_ORD);
     energy_index = encode_energy(e);
+    //printf("  e: %f code: %d dec: %f \n", e, energy_index, decode_energy(energy_index));
 
     pack(bits, &nbit, delta_Wo_index, WO_DT_BITS);
-    pack(bits, &nbit, *lsp_indexes, LSP_DIFF_TIME_BITS);
+    nbit_tmp = nbit;
     pack(bits, &nbit, energy_index, E_BITS);
     pack(bits, &nbit, voiced3, 1);
     pack(bits, &nbit, voiced4, 1);
-    
+    //printf("          00 16 24 32 40 48 56\n"); 
+    //printf("nbit = %d %02x %02x %02x %02x %02x %02x %02x %02x\n", nbit, 
+    //    bits[0], bits[1], bits[2], bits[3],
+    //    bits[4], bits[5], bits[6], bits[7]);
+
+    //printf("  nbit_tmp: %d ", nbit_tmp);
+    energy_index = unpack(bits, &nbit_tmp, E_BITS);
+    // printf("energy_index after: %d\n", energy_index);
+
     assert(nbit == codec2_bits_per_frame(c2));
+    //if (frames == 36)
+    //exit(0);
 }
 
 
@@ -518,17 +546,20 @@ void codec2_decode_1400(struct CODEC2 *c2, short speech[], const unsigned char *
     int     Wo_index, delta_Wo_index;
     float   ak[LPC_ORD+1];
     float   ak_interp[LPC_ORD+1];
+    float   lsps_interp[LPC_ORD];
     int     i;
     unsigned int nbit = 0;
     MODEL   model_interp;
+    static  int frames;
+    float   prev__Wo;
 
     assert(c2 != NULL);
 
     /* unpack frame 1 & 2 bit stream to integer codes */
 
     Wo_index = unpack(bits, &nbit, WO_BITS);
-    for(i=0; i<LSP_DIFF_FREQ_INDEXES; i++) {
-       lsp_indexes[i] = unpack(bits, &nbit, lspd_bits(i));
+    for(i=0; i<LSP_SCALAR_INDEXES; i++) {
+       lsp_indexes[i] = unpack(bits, &nbit, lsp_bits(i));
     }
     energy_index = unpack(bits, &nbit, E_BITS);
     voiced1 = unpack(bits, &nbit, 1);
@@ -542,7 +573,7 @@ void codec2_decode_1400(struct CODEC2 *c2, short speech[], const unsigned char *
 
     /* decode frame 2 LSPs and model amplitudes */
 
-    decode_lsps_diff_freq_vq(lsps_, lsp_indexes, LPC_ORD);
+    decode_lsps_scalar(lsps_, lsp_indexes, LPC_ORD);
     bw_expand_lsps(lsps_, LPC_ORD);
     lsp_to_lpc(lsps_, ak, LPC_ORD);
     energy = decode_energy(energy_index);
@@ -557,37 +588,66 @@ void codec2_decode_1400(struct CODEC2 *c2, short speech[], const unsigned char *
     memset(&model_interp.A, 0, MAX_AMP*sizeof(model_interp.A[0]));
 
     interpolate_lsp(&model_interp, &c2->prev_model, &model,
-                   c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp);
+                   c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp,
+                   lsps_interp);
     apply_lpc_correction(&model_interp);
 
+    frames += 2;
+    /* used for comparing to c2sim version 
+       printf("frame: %d\n", frames);
+    printf("  Wo: %1.5f  L: %d v1: %d prev_e: %f\n", 
+          model_interp.Wo, model_interp.L, model_interp.voiced, c2->prev_energy);
+    printf("  lsps_interp: ");
+    for(i=0; i<LPC_ORD; i++)
+       printf("%5.3f  ", lsps_interp[i]);
+    printf("\n  A..........: ");
+    for(i=0; i<10; i++)
+       printf("%5.3f  ",model_interp.A[i]);
+
+    printf("\n  Wo: %1.5f  L: %d e: %3.2f v2: %d\n", 
+          model.Wo, model.L, energy, model.voiced);
+    printf("  lsps_......: ");
+    for(i=0; i<LPC_ORD; i++)
+       printf("%5.3f  ", lsps_[i]);
+    printf("\n  A..........: ");
+    for(i=0; i<10; i++)
+       printf("%5.3f  ",model.A[i]);
+    printf("\n");
+    */
+
     /* synthesise frame 1 and frame 2 10ms frames */
 
     synthesise_one_frame(c2, speech, &model_interp, ak_interp);
+    //printf("  buf[0] %d\n", speech[0]);
     synthesise_one_frame(c2, &speech[N], &model, ak);
+    //printf("  buf[0] %d\n", speech[N]);
 
     /* update memories (decode states) for next time */
 
     memcpy(&c2->prev_model, &model, sizeof(MODEL));
     memcpy(c2->prev_lsps_, lsps_, sizeof(lsps_));
     c2->prev_energy = energy;
+    prev__Wo = model.Wo;
 
     /*--------------------------------------------------------------------*/
 
     /* unpack frame 3 & 4 bit stream to integer codes */
 
     delta_Wo_index = unpack(bits, &nbit, WO_DT_BITS);
-    *lsp_indexes = unpack(bits, &nbit, LSP_DIFF_TIME_BITS);
     energy_index = unpack(bits, &nbit, E_BITS);
     voiced3 = unpack(bits, &nbit, 1);
     voiced4 = unpack(bits, &nbit, 1);
     assert(nbit == codec2_bits_per_frame(c2));
 
-    /* decode frame 4 LSPs and model amplitudes */
+    /* decode integer codes to model parameters */
 
-    decode_lsps_diff_time_vq(lsps_, lsp_indexes, c2->prev_lsps_, LPC_ORD);
-    bw_expand_lsps(lsps_, LPC_ORD);
-    lsp_to_lpc(lsps_, ak, LPC_ORD);
+    model.Wo = decode_Wo_dt(delta_Wo_index, prev__Wo);
+    model.L = PI/model.Wo;
+    memset(&model.A, 0, (model.L+1)*sizeof(model.A[0]));
     energy = decode_energy(energy_index);
+
+    /* decode frame 4  */
+
     aks_to_M2(ak, LPC_ORD, &model, energy, &snr, 1); 
     apply_lpc_correction(&model);
 
@@ -599,13 +659,44 @@ void codec2_decode_1400(struct CODEC2 *c2, short speech[], const unsigned char *
     memset(&model_interp.A, 0, MAX_AMP*sizeof(model_interp.A[0]));
 
     interpolate_lsp(&model_interp, &c2->prev_model, &model,
-                   c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp);
+                   c2->prev_lsps_, c2->prev_energy, lsps_, energy, ak_interp,
+                   lsps_interp);
     apply_lpc_correction(&model_interp);
 
+    frames +=2;
+    /* used for comparing to c2sim version:
+    printf("frame: %d\n", frames);
+
+    printf("  Wo: %1.5f  L: %d v1: %d prev_e: %f\n", 
+          model_interp.Wo, model_interp.L, model_interp.voiced, c2->prev_energy);
+    printf("  lsps_interp: ");
+    for(i=0; i<LPC_ORD; i++)
+       printf("%5.3f  ", lsps_interp[i]);
+    printf("\n  A..........: ");
+    for(i=0; i<10; i++)
+       printf("%5.3f  ",model_interp.A[i]);
+
+    printf("\n  Wo: %1.5f  L: %d e_index: %d e: %3.2f v2: %d\n", 
+          model.Wo, model.L, energy_index, energy, model.voiced);
+    printf("  lsps_......: ");
+    for(i=0; i<LPC_ORD; i++)
+       printf("%5.3f  ", lsps_[i]);
+    printf("\n  A..........: ");
+    for(i=0; i<10; i++)
+       printf("%5.3f  ",model.A[i]);
+    printf("\n");
+    */
+
     /* synthesise frame 3 and frame 4 10ms frames */
 
     synthesise_one_frame(c2, &speech[2*N], &model_interp, ak_interp);
+    //printf("  buf[0] %d\n", speech[2*N]);
     synthesise_one_frame(c2, &speech[3*N], &model, ak);
+    //printf("  buf[0] %d\n", speech[3*N]);
+    if (frames == 44) {
+       //exit(0);
+    }
 
     /* update memories (decode states) for next time */
 
@@ -684,7 +775,7 @@ void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[])
     two_stage_pitch_refinement(model, Sw);
     estimate_amplitudes(model, Sw, c2->W);
     snr = est_voicing_mbe(model, Sw, c2->W, Sw_, Ew, c2->prev_Wo);
-    printf("snr %3.2f  v: %d  Wo: %f prev_Wo: %f\n", 
-          snr, model->voiced, model->Wo, c2->prev_Wo);
+    //printf("snr %3.2f  v: %d  Wo: %f prev_Wo: %f\n", 
+    //    snr, model->voiced, model->Wo, c2->prev_Wo);
     c2->prev_Wo = model->Wo;
 }
index 943704e8e0db05261cd28a25a80018a53ac713ec..abdd0db8018fac682ca36fc481e866f1d618ce8e 100644 (file)
@@ -87,5 +87,6 @@ extern const struct lsp_codebook lsp_cbd[];
 extern const struct lsp_codebook lsp_cbvq[];
 extern const struct lsp_codebook lsp_cbjnd[];
 extern const struct lsp_codebook lsp_cbdt[];
+extern const struct lsp_codebook lsp_cbjvm[];
 
 #endif
index 8b2c70ce08d6198cc941502f2df5e23b7f8145a0..9e59244e0a914d7a806b0039661217f6452fc3ef 100644 (file)
@@ -28,6 +28,7 @@
 #include <assert.h>
 #include <math.h>
 #include <string.h>
+#include <stdio.h>
 
 #include "defines.h"
 #include "interp.h"
@@ -152,11 +153,12 @@ void interpolate_lsp(
   float  prev_e,    /* previous frames LPC energy                    */
   float *next_lsps, /* next frames LSPs                              */
   float  next_e,    /* next frames LPC energy                        */
-  float *ak_interp  /* interpolated aks for this frame                */
-                    )
+  float *ak_interp, /* interpolated aks for this frame               */
+  float *lsps_interp/* interpolated lsps for this frame              */
+)
 {
     int   l,i;
-    float lsps[LPC_ORD],e;
+    float e;
     float snr;
 
     /* trap corner case where V est is probably wrong */
@@ -180,22 +182,24 @@ void interpolate_lsp(
     }
     interp->L = PI/interp->Wo;
 
-    //printf("interp: prev_v: %d next_v: %d prev_Wo: %f next_Wo: %f\n",
+    //printf("  interp: prev_v: %d next_v: %d prev_Wo: %f next_Wo: %f\n",
     //    prev->voiced, next->voiced, prev->Wo, next->Wo);
-    //printf("interp: Wo: %1.5f  L: %d\n", interp->Wo, interp->L);
+    //printf("  interp: Wo: %1.5f  L: %d\n", interp->Wo, interp->L);
 
     /* interpolate LSPs */
 
     for(i=0; i<LPC_ORD; i++) {
-       lsps[i] = (prev_lsps[i] + next_lsps[i])/2.0;
+       lsps_interp[i] = (prev_lsps[i] + next_lsps[i])/2.0;
     }
 
     /* Interpolate LPC energy in log domain */
 
     e = pow(10.0, (log10(prev_e) + log10(next_e))/2.0);
+    //printf("  interp: e: %f\n", e);
 
     /* convert back to amplitudes */
 
-    lsp_to_lpc(lsps, ak_interp, LPC_ORD);
+    lsp_to_lpc(lsps_interp, ak_interp, LPC_ORD);
     aks_to_M2(ak_interp, LPC_ORD, interp, e, &snr, 0); 
+    //printf("  interp: ak[1]: %f A[1] %f\n", ak_interp[1], interp->A[1]);
 }
index 3dd5f83714ef68c574c65b9bd12f4953820d9a55..64c59d514a7421ad82b4ca7e0bedd7e0cee2a645 100644 (file)
@@ -30,8 +30,8 @@
 
 void interpolate(MODEL *interp, MODEL *prev, MODEL *next);
 void interpolate_lsp(MODEL *interp, MODEL *prev, MODEL *next, 
-                    float *prev_lsps, float  prev_e,
-                    float *next_lsps, float  next_e,
-                    float *ak_interp);
+                     float *prev_lsps, float  prev_e,
+                     float *next_lsps, float  next_e,
+                     float *ak_interp, float *lsps_interp);
 
 #endif
index 551a7dec0c403f51594e1f252d1aa10e58aa23ba..c6dbcc952a2dee881712e416a5401c60c5dec23f 100644 (file)
@@ -178,7 +178,7 @@ void lspd_quantise(
            lsp__hz[i] = lsp__hz[i-1] + dlsp_[i];
        else
            lsp__hz[0] = dlsp_[0];
-       lsp_[i] = (PI/4000.0)*lsp_hz[i];
+       lsp_[i] = (PI/4000.0)*lsp__hz[i];
     }
 
     //#define PREV_VQ
@@ -249,6 +249,7 @@ void lspvq_quantise(
 
     for(i=0; i<LPC_ORD; i++) {
        wt[i] = 1.0;
+       lsp_hz[i] = 4000.0*lsp[i]/PI;
     }
 
     /* scalar quantise LSPs 1,2,3,4 */
@@ -256,7 +257,6 @@ void lspvq_quantise(
     /* simple uniform scalar quantisers */
 
    for(i=0; i<4; i++) {
-       lsp_hz[i] = 4000.0*lsp[i]/PI;
        k = lsp_cb[i].k;
        m = lsp_cb[i].m;
        cb = lsp_cb[i].cb;
@@ -264,7 +264,7 @@ void lspvq_quantise(
        lsp_[i] = cb[index*k]*PI/4000.0;
     }
 
-#define WGHT
+   //#define WGHT
 #ifdef WGHT
     for(i=4; i<9; i++) {
        wt[i] = 1.0/(lsp[i]-lsp[i-1]) + 1.0/(lsp[i+1]-lsp[i]);
@@ -277,16 +277,14 @@ void lspvq_quantise(
 
     ncb = 4;
     nlsp = 4;
-    k = lsp_cbvq[ncb].k;
-    m = lsp_cbvq[ncb].m;
-    cb = lsp_cbvq[ncb].cb;
-    index = quantise(cb, &lsp[nlsp], &wt[nlsp], k, m, &se);
-    lsp_[nlsp] = cb[index*k];
-    lsp_[nlsp+1] = cb[index*k+1];
-    lsp_[nlsp+2] = cb[index*k+2];
-    lsp_[nlsp+3] = cb[index*k+3];
-    lsp_[nlsp+4] = cb[index*k+4];
-    lsp_[nlsp+5] = cb[index*k+5];
+    k = lsp_cbjnd[ncb].k;
+    m = lsp_cbjnd[ncb].m;
+    cb = lsp_cbjnd[ncb].cb;
+    index = quantise(cb, &lsp_hz[nlsp], &wt[nlsp], k, m, &se);
+    for(i=4; i<LPC_ORD; i++) {
+       lsp_[i] = cb[index*k+i-4]*(PI/4000.0);
+       //printf("%4.f (%4.f) ", lsp_hz[i], cb[index*k+i-4]);
+    }
 }
 
 /*---------------------------------------------------------------------------*\
@@ -341,6 +339,8 @@ void lspjnd_quantise(float lsps[], float lsps_[], int order)
     //printf("\n");
 }
 
+void compute_weights(const float *x, float *w, int ndim);
+
 /*---------------------------------------------------------------------------*\
                                                                              
   lspdt_quantise
@@ -368,15 +368,37 @@ void lspdt_quantise(float lsps[], float lsps_[], float lsps__prev[], int mode)
     float se = 0.0;
     int   index;
 
+    
     for(i=0; i<LPC_ORD; i++) {
        wt[i] = 1.0;
     }
+    
+    //compute_weights(lsps, wt, LPC_ORD );
+
+#define DLSP_LIMIT 100.0
 
     for(i=0; i<LPC_ORD; i++) {
        lsps_dt[i] = (4000/PI)*(lsps[i] - lsps__prev[i]);
        lsps_[i] = lsps__prev[i];
+       /*
+       if (lsps_dt[i] > DLSP_LIMIT) 
+           lsps_dt[i] = DLSP_LIMIT;
+       if (lsps_dt[i] < -DLSP_LIMIT) 
+           lsps_dt[i] = -DLSP_LIMIT;
+       */
+       //lsps_[i] += (PI/4000)*lsps_dt[i];
+       
     }
 
+    k = lsp_cbdt[2].k;
+    m = lsp_cbdt[2].m;
+    cb = lsp_cbdt[2].cb;
+    index = quantise(cb, lsps_dt, wt, k, m, &se);
+    printf("k %d m %d\n", k, m);
+    for(i=0; i<LPC_ORD; i++) {
+       //lsps_[i] += (PI/4000.0)*cb[index*k + i];
+    }
+#ifdef TMP
     /* VQ LSP dTs 1 to 4 */
 
     if (mode != LSPDT_HIGH) {
@@ -401,6 +423,112 @@ void lspdt_quantise(float lsps[], float lsps_[], float lsps__prev[], int mode)
            lsps_[i] += (PI/4000.0)*cb[index*k + i - 4];
        }
     }
+#endif
+}
+
+#define MIN(a,b) ((a)<(b)?(a):(b))
+#define COEF 0.75f
+#define MAX_ENTRIES 16384
+
+void compute_weights(const float *x, float *w, int ndim)
+{
+  int i;
+  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], M_PI-x[ndim-1]);
+  
+  for (i=0;i<ndim;i++)
+    w[i] = 1./(.01+w[i]);
+  w[0]*=3;
+  w[1]*=2;
+}
+
+int find_nearest(const float *codebook, int nb_entries, float *x, int ndim)
+{
+  int i, j;
+  float min_dist = 1e15;
+  int nearest = 0;
+  
+  for (i=0;i<nb_entries;i++)
+  {
+    float dist=0;
+    for (j=0;j<ndim;j++)
+      dist += (x[j]-codebook[i*ndim+j])*(x[j]-codebook[i*ndim+j]);
+    if (dist<min_dist)
+    {
+      min_dist = dist;
+      nearest = i;
+    }
+  }
+  return nearest;
+}
+
+int find_nearest_weighted(const float *codebook, int nb_entries, float *x, const float *w, int ndim)
+{
+  int i, j;
+  float min_dist = 1e15;
+  int nearest = 0;
+  
+  for (i=0;i<nb_entries;i++)
+  {
+    float dist=0;
+    for (j=0;j<ndim;j++)
+      dist += w[j]*(x[j]-codebook[i*ndim+j])*(x[j]-codebook[i*ndim+j]);
+    if (dist<min_dist)
+    {
+      min_dist = dist;
+      nearest = i;
+    }
+  }
+  return nearest;
+}
+
+void lspjvm_quantise(float *x, float *xq, int ndim)
+{
+  int i, n1, n2, n3;
+  float err[ndim], err2[ndim], err3[ndim];
+  float w[ndim], w2[ndim], w3[ndim];
+  const float *codebook1 = lsp_cbjvm[0].cb;
+  const float *codebook2 = lsp_cbjvm[1].cb;
+  const float *codebook3 = lsp_cbjvm[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], M_PI-x[ndim-1]);
+  
+  /*
+  for (i=0;i<ndim;i++)
+    w[i] = 1./(.003+w[i]);
+  w[0]*=3;
+  w[1]*=2;*/
+  compute_weights(x, w, ndim);
+  
+  for (i=0;i<ndim;i++)
+    err[i] = x[i]-COEF*xq[i];
+  n1 = find_nearest(codebook1, lsp_cbjvm[0].m, err, ndim);
+  
+  for (i=0;i<ndim;i++)
+  {
+    xq[i] = COEF*xq[i] + codebook1[ndim*n1+i];
+    err[i] -= codebook1[ndim*n1+i];
+  }
+  for (i=0;i<ndim/2;i++)
+  {
+    err2[i] = err[2*i];  
+    err3[i] = err[2*i+1];
+    w2[i] = w[2*i];  
+    w3[i] = w[2*i+1];
+  }
+  n2 = find_nearest_weighted(codebook2, lsp_cbjvm[1].m, err2, w2, ndim/2);
+  n3 = find_nearest_weighted(codebook3, lsp_cbjvm[2].m, err3, w3, ndim/2);
+  
+  for (i=0;i<ndim/2;i++)
+  {
+    xq[2*i] += codebook2[ndim*n2/2+i];
+    xq[2*i+1] += codebook3[ndim*n3/2+i];
+  }
 }
 
 void check_lsp_order(float lsp[], int lpc_order)
@@ -767,6 +895,12 @@ float speech_to_uq_lsps(float lsp[],
     autocorrelate(Wn, R, M, order);
     levinson_durbin(R, ak, order);
   
+    /* 15 Hz BW expansion as I can't hear the difference and it may help
+       help occasional fails in the LSP root finding */
+
+    for(i=0; i<=LPC_ORD; i++)
+       ak[i] *= pow(0.994,(float)i);
+
     E = 0.0;
     for(i=0; i<=order; i++)
        E += ak[i]*R[i];
@@ -1053,7 +1187,7 @@ void bw_expand_lsps(float lsp[],
 
     for(i=1; i<4; i++) {
        
-       if ((lsp[i] - lsp[i-1]) < 25*(PI/4000.0))
+       if ((lsp[i] - lsp[i-1]) < 50*(PI/4000.0))
            lsp[i] = lsp[i-1] + 50.0*(PI/4000.0);
        
     }
@@ -1064,7 +1198,7 @@ void bw_expand_lsps(float lsp[],
     */
 
     for(i=4; i<order; i++) {
-       if (lsp[i] - lsp[i-1] < PI*(50.0/4000.0))
+       if (lsp[i] - lsp[i-1] < PI*(100.0/4000.0))
            lsp[i] = lsp[i-1] + PI*(100.0/4000.0);
     }
 }
index fc10c8740bf7d7a6af5fe4b361716401176143b9..9fd34eebe63db9e6f7ec97880858e24893ed1ac2 100644 (file)
@@ -71,6 +71,7 @@ void lspd_quantise(float lsp[], float lsp_[], int order);
 void lspvq_quantise(float lsp[], float lsp_[], int 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);
 
 int encode_energy(float e);
 float decode_energy(int index);
index 577fd2f168373be12af816f4d7ebc2e763bc3514..a124788e39b7ac49ffd19af4101209d2a9b350a4 100644 (file)
@@ -486,15 +486,19 @@ float est_voicing_mbe(
            model->voiced = 0;
 
        /* If pitch is jumping about it's likely this is UV */
+       
+       /* 13 Feb 2012 - this seems to add some V errors so comment out for now.  Maybe
+          double check on bg noise files
 
-       dF0 = (model->Wo - prev_Wo)*FS/TWO_PI;
-       if (fabs(dF0) > 15.0) 
-           model->voiced = 0;
+          dF0 = (model->Wo - prev_Wo)*FS/TWO_PI;
+          if (fabs(dF0) > 15.0) 
+          model->voiced = 0;
+       */
 
        /* A common source of Type 2 errors is the pitch estimator
           gives a low (50Hz) estimate for UV speech, which gives a
           good match with noise due to the close harmoonic spacing.
-          These errors are much more common than people with 50Hz
+          These errors are much more common than people with 50Hz3
           pitch, so we have just a small eratio threshold. */
 
        sixty = 60.0*TWO_PI/FS;
@@ -592,6 +596,8 @@ void synthesise(
 #ifdef FFT_SYNTHESIS
     /* Now set up frequency domain synthesised speech */
     for(l=1; l<=model->L; l++) {
+    //for(l=model->L/2; l<=model->L; l++) {
+    //for(l=1; l<=model->L/4; l++) {
        b = floor(l*model->Wo*FFT_DEC/TWO_PI + 0.5);
        if (b > ((FFT_DEC/2)-1)) {
                b = (FFT_DEC/2)-1;