Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xiph/speex.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/programming.html157
-rw-r--r--libspeex/cb_search.c271
-rw-r--r--libspeex/cb_search.h20
-rw-r--r--libspeex/hexc_table.c384
-rw-r--r--libspeex/modes.c6
-rw-r--r--libspeex/testenc_wb.c2
6 files changed, 515 insertions, 325 deletions
diff --git a/doc/programming.html b/doc/programming.html
index 6bfce96..7b5bc7a 100644
--- a/doc/programming.html
+++ b/doc/programming.html
@@ -2,55 +2,18 @@
<html>
<head>
<title>Speex Programming</title>
+
<meta http-equiv="content-type"
content="text/html; charset=ISO-8859-1">
</head>
-<body>
-<div align="center">
+ <body>
+
+<div align="center">
<h1>Speex Programming</h1>
-<div align="left">
+
+<div align="left">
<h2>Encoding</h2>
-In order to encode speech using Speex, you first need to:<br>
-<blockquote>
- <pre><big>#include &lt;speex.h&gt;</big></pre>
-</blockquote>
-You then need to declare a Speex bit-packing struct<br>
-<blockquote>
- <pre><big>SpeexBits bits;</big></pre>
-</blockquote>
-and a Speex encoder state<br>
-<blockquote>
- <pre><big>void *enc_state;</big></pre>
-</blockquote>
-The two are initialized by:<br>
-<blockquote>
- <pre><big>speex_bits_init(&amp;bits);</big></pre>
- <pre><big>enc_state = speex_encoder_init(&amp;speex_nb_mode);</big></pre>
-</blockquote>
-For wideband coding, <i>speex_nb_mode</i> will be replaced by <i>speex_wb_mode</i>
-.<br>
-<br>
-For every input frame:<br>
-<blockquote>
- <pre><big>speex_bits_reset(&amp;bits);</big></pre>
- <pre><big>speex_encode(enc_state, input_frame, &amp;bits);</big></pre>
- <pre><big>nbBytes = speex_bits_write(&amp;bits, byte_ptr, MAX_NB_BYTES);</big></pre>
-</blockquote>
-where <i>input_frame</i> is a <i>(float *)</i> pointing to the beginning
-of a speech frame, byte_ptr is a <i>(char *)</i> where the encoded frame
-will be written, <i>MAX_NB_BYTES</i> is the maximum number of bytes that
-can be written to <i>byte_ptr</i> without causing an overflow and <i>nbBytes</i>
- is the number of bytes actually written to <i>byte_ptr</i> (the encoded
-size in bytes).<br>
-<br>
-After you're done with the encoding, free all resources with:<br>
-<blockquote>
- <pre><big>speex_bits_destroy(&amp;bits);</big></pre>
- <pre><big>speex_encoder_destroy(&amp;enc_state);</big></pre>
-</blockquote>
-That's about it for the encoder.<br>
-<h2>Decoding</h2>
-In order to encode speech using Speex, you first need to:<br>
+ In order to encode speech using Speex, you first need to:<br>
<blockquote>
<pre><big>#include &lt;speex.h&gt;</big></pre>
@@ -63,36 +26,100 @@ In order to encode speech using Speex, you first need to:<br>
and a Speex encoder state<br>
<blockquote>
- <pre><big>void *dec_state;</big></pre>
+ <pre><big>void *enc_state;</big></pre>
</blockquote>
The two are initialized by:<br>
<blockquote>
<pre><big>speex_bits_init(&amp;bits);</big></pre>
- <pre><big>dec_state = speex_decoder_init(&amp;speex_nb_mode);</big></pre>
+ <pre><big>enc_state = speex_encoder_init(&amp;speex_nb_mode);</big></pre>
</blockquote>
- For wideband decoding, <i>speex_nb_mode</i> will be replaced by <i>speex_wb_mode</i>
-.<br>
- <br>
+ For wideband coding, <i>speex_nb_mode</i> will be replaced by <i>speex_wb_mode</i>
+. In most cases, you will need to know the frame size used by the mode you
+are using. You can get that value in the <i>frame_size</i> variable with:<br>
+<blockquote><big><tt>speex_encoder_ctl(enc_state, SPEEX_GET_FRAME_SIZE, &amp;frame_size);</tt></big><br>
+</blockquote>
For every input frame:<br>
-
-<blockquote>
- <pre><big>speex_bits_read_from(&amp;bits, input_bytes, nbBytes);</big></pre>
- <pre><big>speex_decode(st, &amp;bits, output_frame, 0);</big></pre>
+
+<blockquote>
+ <pre><big>speex_bits_reset(&amp;bits);</big></pre>
+
+ <pre><big>speex_encode(enc_state, input_frame, &amp;bits);</big></pre>
+
+ <pre><big>nbBytes = speex_bits_write(&amp;bits, byte_ptr, MAX_NB_BYTES);</big></pre>
+ </blockquote>
+ where <i>input_frame</i> is a <i>(float *)</i> pointing to the beginning
+of a speech frame, byte_ptr is a <i>(char *)</i> where the encoded frame will
+be written, <i>MAX_NB_BYTES</i> is the maximum number of bytes that can be
+written to <i>byte_ptr</i> without causing an overflow and <i>nbBytes</i>
+ is the number of bytes actually written to <i>byte_ptr</i> (the encoded
+size in bytes).<br>
+ <br>
+ After you're done with the encoding, free all resources with:<br>
+
+<blockquote>
+ <pre><big>speex_bits_destroy(&amp;bits);</big></pre>
+
+ <pre><big>speex_encoder_destroy(&amp;enc_state);</big></pre>
+ </blockquote>
+ That's about it for the encoder.<br>
+
+<h2>Decoding</h2>
+ In order to encode speech using Speex, you first need to:<br>
+
+<blockquote>
+ <pre><big>#include &lt;speex.h&gt;</big></pre>
+ </blockquote>
+ You then need to declare a Speex bit-packing struct<br>
+
+<blockquote>
+ <pre><big>SpeexBits bits;</big></pre>
+ </blockquote>
+ and a Speex encoder state<br>
+
+<blockquote>
+ <pre><big>void *dec_state;</big></pre>
+ </blockquote>
+ The two are initialized by:<br>
+
+<blockquote>
+ <pre><big>speex_bits_init(&amp;bits);</big></pre>
+
+ <pre><big>dec_state = speex_decoder_init(&amp;speex_nb_mode);</big></pre>
+ </blockquote>
+ For wideband decoding, <i>speex_nb_mode</i> will be replaced by <i>speex_wb_mode</i>
+. You can get that value in the <i>frame_size</i> variable with:<br>
+
+<blockquote><big><tt>speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &amp;frame_size);</tt></big><br>
+</blockquote>
+ There is also a parameter that can be set for the decoder: whether or not
+to use a perceptual post-filter. This can be set by:<br>
+<blockquote><big><tt>speex_decoder_ctl(dec_state, SPEEX_SET_PF, &amp;pf);</tt></big><br>
</blockquote>
-where <i>input_bytes</i> is a <i>(char *)</i> containing the bit-stream data
-received for a frame, <i>nbBytes</i> is the size (in bytes) of that bit-stream,
-and <i>output_frame</i> is a <i>(float *)</i> and points to the area where
-the decoded speech frame will be written. The last argument indicates whether
-the frame we'd like to decode was lost. A value of 0 indicates the normal
-case where bits points to the bit of the current frame. A value of 1 indicates
-that we don't have the bits for the current frame, in which case the bits
-argument should be the same as the bits for the last correctly received frame.
-When a frame is lost, the Speex decoder will do its best to "guess" the sorrect
-signal.<br>
+where <i>pf</i> is an <i>int</i> that with value 0 to have the post-filter
+disabled and 1 to have it enabled.<br>
<br>
-</div>
-</div>
+For every input frame:<br>
+
+<blockquote>
+ <pre><big>speex_bits_read_from(&amp;bits, input_bytes, nbBytes);</big></pre>
+
+ <pre><big>speex_decode(st, &amp;bits, output_frame, 0);</big></pre>
+ </blockquote>
+ where <i>input_bytes</i> is a <i>(char *)</i> containing the bit-stream
+data received for a frame, <i>nbBytes</i> is the size (in bytes) of that
+bit-stream, and <i>output_frame</i> is a <i>(float *)</i> and points to the
+area where the decoded speech frame will be written. The last argument indicates
+whether the frame we'd like to decode was lost. A value of 0 indicates the
+normal case where bits points to the bit of the current frame. A value of
+1 indicates that we don't have the bits for the current frame, in which case
+the bits argument should be the same as the bits for the last correctly received
+frame. When a frame is lost, the Speex decoder will do its best to "guess"
+the sorrect signal.<br>
+ <br>
+ </div>
+ </div>
+
</body>
</html>
diff --git a/libspeex/cb_search.c b/libspeex/cb_search.c
index 72eef5a..09564f6 100644
--- a/libspeex/cb_search.c
+++ b/libspeex/cb_search.c
@@ -381,6 +381,7 @@ float *stack
int best_index=0, k, m;
float g, dist, best_dist=-1;
float *a, *b;
+
/* Find best codeword for current sub-vector */
for (j=0;j<shape_cb_size;j++)
{
@@ -406,6 +407,7 @@ float *stack
for (k=subvect_size*i+j,m=0;k<nsf;k++,m++)
t[k] -= g*r[m];
}
+
}
/* Put everything back together */
@@ -503,6 +505,7 @@ float *stack
float *a, *x;
float energy=0;
x=t+subvect_size*i;
+
for (k=0;k<subvect_size;k++)
energy+=x[k]*x[k];
/* Find best codeword for current sub-vector */
@@ -607,6 +610,232 @@ float *stack
POP(stack);
}
+void split_cb_search_shape_sign(
+float target[], /* target vector */
+float ak[], /* LPCs for this subframe */
+float awk1[], /* Weighted LPCs for this subframe */
+float awk2[], /* Weighted LPCs for this subframe */
+void *par, /* Codebook/search parameters*/
+int p, /* number of LPC coeffs */
+int nsf, /* number of samples in subframe */
+float *exc,
+SpeexBits *bits,
+float *stack
+)
+{
+ int i,j;
+ float *resp;
+ float *t, *r, *e, *E;
+ int *ind, *signs;
+ float *shape_cb;
+ int shape_cb_size, subvect_size, nb_subvect;
+ split_cb_params *params;
+
+ params = (split_cb_params *) par;
+ subvect_size = params->subvect_size;
+ nb_subvect = params->nb_subvect;
+ shape_cb_size = 1<<params->shape_bits;
+ shape_cb = params->shape_cb;
+ resp = PUSH(stack, shape_cb_size*subvect_size);
+ t = PUSH(stack, nsf);
+ r = PUSH(stack, nsf);
+ e = PUSH(stack, nsf);
+ E = PUSH(stack, shape_cb_size);
+ ind = (int*)PUSH(stack, nb_subvect);
+ signs = (int*)PUSH(stack, nb_subvect);
+
+ for (i=0;i<nsf;i++)
+ t[i]=target[i];
+
+ e[0]=1;
+ for (i=1;i<nsf;i++)
+ e[i]=0;
+ residue_zero(e, awk1, r, nsf, p);
+ syn_filt_zero(r, ak, r, nsf, p);
+ syn_filt_zero(r, awk2, r, nsf,p);
+
+ /* Pre-compute codewords response and energy */
+ for (i=0;i<shape_cb_size;i++)
+ {
+ float *res = resp+i*subvect_size;
+
+ /* Compute codeword response */
+ int k;
+ for(j=0;j<subvect_size;j++)
+ res[j]=0;
+ for(j=0;j<subvect_size;j++)
+ {
+ for (k=j;k<subvect_size;k++)
+ res[k]+=shape_cb[i*subvect_size+j]*r[k-j];
+ }
+ E[i]=0;
+ for(j=0;j<subvect_size;j++)
+ E[i]+=res[j]*res[j];
+ }
+
+ for (i=0;i<nb_subvect;i++)
+ {
+ int best_index[2]={0,0}, k, m;
+ float g, dist, best_dist[2]={-1,-1}, best_sign[2]={0,0};
+ float *a, *x;
+ float energy=0;
+ x=t+subvect_size*i;
+
+ for (k=0;k<subvect_size;k++)
+ energy+=x[k]*x[k];
+ /* Find best codeword for current sub-vector */
+ for (j=0;j<shape_cb_size;j++)
+ {
+ int sign;
+ dist=0;
+ a=resp+j*subvect_size;
+ dist=0;
+ for (k=0;k<subvect_size;k++)
+ dist -= 2*a[k]*x[k];
+ if (dist > 0)
+ {
+ sign=1;
+ dist =- dist;
+ } else
+ sign=0;
+ dist += energy+E[j];
+ if (dist<best_dist[0] || best_dist[0]<0)
+ {
+ best_dist[1]=best_dist[0];
+ best_index[1]=best_index[0];
+ best_sign[1]=best_sign[0];
+ best_dist[0]=dist;
+ best_index[0]=j;
+ best_sign[0]=sign;
+ } else if (dist<best_dist[1] || best_dist[1]<0)
+ {
+ best_dist[1]=dist;
+ best_index[1]=j;
+ best_sign[1]=sign;
+ }
+ }
+ if (i<nb_subvect-1)
+ {
+ int nbest;
+ float *tt, err[2];
+ float best_score[2];
+ tt=PUSH(stack,nsf);
+ for (nbest=0;nbest<2;nbest++)
+ {
+ float s=1;
+ if (best_sign[nbest])
+ s=-1;
+ for (j=0;j<nsf;j++)
+ tt[j]=t[j];
+ for (j=0;j<subvect_size;j++)
+ {
+ g=s*shape_cb[best_index[nbest]*subvect_size+j];
+ for (k=subvect_size*i+j,m=0;k<nsf;k++,m++)
+ tt[k] -= g*r[m];
+ }
+
+ {
+ int best_index2, best_sign2, sign2;
+ float best_dist2;
+ x=t+subvect_size*(i+1);
+ for (j=0;j<shape_cb_size;j++)
+ {
+ a=resp+j*subvect_size;
+ dist = 0;
+ for (k=0;k<subvect_size;k++)
+ dist -= 2*a[k]*x[k];
+ if (dist > 0)
+ {
+ sign2=1;
+ dist =- dist;
+ } else
+ sign2=0;
+ dist += energy+E[j];
+ if (dist<best_dist2 || j==0)
+ {
+ best_dist2=dist;
+ best_index2=j;
+ best_sign2=sign2;
+ }
+ }
+ s=1;
+ if (best_sign2)
+ s=-1;
+ /*int i2=vq_index(&tt[subvect_size*(i+1)], resp, subvect_size, shape_cb_size);*/
+
+ for (j=0;j<subvect_size;j++)
+ {
+ g=s*shape_cb[best_index2*subvect_size+j];
+ for (k=subvect_size*(i+1)+j,m=0;k<nsf;k++,m++)
+ tt[k] -= g*r[m];
+ }
+ }
+
+ err[nbest]=0;
+ for (j=subvect_size*i;j<subvect_size*(i+2);j++)
+ err[nbest]-=tt[j]*tt[j];
+
+ best_score[nbest]=err[nbest];
+ }
+
+ if (best_score[1]>best_score[0])
+ {
+ best_sign[0]=best_sign[1];
+ best_index[0]=best_index[1];
+ best_score[0]=best_score[1];
+ }
+ POP(stack);
+
+ }
+
+ ind[i]=best_index[0];
+ signs[i] = best_sign[0];
+
+ /*printf ("best index: %d/%d\n", best_index, shape_cb_size);*/
+ speex_bits_pack(bits,signs[i],1);
+ speex_bits_pack(bits,ind[i],params->shape_bits);
+
+ /* Update target for next subvector */
+ for (j=0;j<subvect_size;j++)
+ {
+ g=shape_cb[ind[i]*subvect_size+j];
+ if (signs[i])
+ g=-g;
+ for (k=subvect_size*i+j,m=0;k<nsf;k++,m++)
+ t[k] -= g*r[m];
+ }
+ }
+
+ /* Put everything back together */
+ for (i=0;i<nb_subvect;i++)
+ {
+ float s=1;
+ if (signs[i])
+ s=-1;
+ for (j=0;j<subvect_size;j++)
+ e[subvect_size*i+j]=s*shape_cb[ind[i]*subvect_size+j];
+ }
+ /* Update excitation */
+ for (j=0;j<nsf;j++)
+ exc[j]+=e[j];
+
+ /* Update target */
+ residue_zero(e, awk1, r, nsf, p);
+ syn_filt_zero(r, ak, r, nsf, p);
+ syn_filt_zero(r, awk2, r, nsf,p);
+ for (j=0;j<nsf;j++)
+ target[j]-=r[j];
+
+
+
+ POP(stack);
+ POP(stack);
+ POP(stack);
+ POP(stack);
+ POP(stack);
+ POP(stack);
+}
+
void split_cb_search2(
float target[], /* target vector */
@@ -965,3 +1194,45 @@ float *stack
POP(stack);
}
+
+void split_cb_shape_sign_unquant(
+float *exc,
+void *par, /* non-overlapping codebook */
+int nsf, /* number of samples in subframe */
+SpeexBits *bits,
+float *stack
+)
+{
+ int i,j;
+ int *ind, *signs;
+ float *shape_cb;
+ int shape_cb_size, subvect_size, nb_subvect;
+ split_cb_params *params;
+
+ params = (split_cb_params *) par;
+ subvect_size = params->subvect_size;
+ nb_subvect = params->nb_subvect;
+ shape_cb_size = 1<<params->shape_bits;
+ shape_cb = params->shape_cb;
+
+ ind = (int*)PUSH(stack, nb_subvect);
+ signs = (int*)PUSH(stack, nb_subvect);
+
+ /* Decode codewords and gains */
+ for (i=0;i<nb_subvect;i++)
+ {
+ signs[i] = speex_bits_unpack_unsigned(bits, 1);
+ ind[i] = speex_bits_unpack_unsigned(bits, params->shape_bits);
+ }
+ /* Compute decoded excitation */
+ for (i=0;i<nb_subvect;i++)
+ {
+ float s=1;
+ if (signs[i])
+ s=-1;
+ for (j=0;j<subvect_size;j++)
+ exc[subvect_size*i+j]+=s*shape_cb[ind[i]*subvect_size+j];
+ }
+ POP(stack);
+ POP(stack);
+}
diff --git a/libspeex/cb_search.h b/libspeex/cb_search.h
index ae74b58..8d45eaa 100644
--- a/libspeex/cb_search.h
+++ b/libspeex/cb_search.h
@@ -82,6 +82,26 @@ SpeexBits *bits,
float *stack
);
+void split_cb_search_shape_sign(
+float target[], /* target vector */
+float ak[], /* LPCs for this subframe */
+float awk1[], /* Weighted LPCs for this subframe */
+float awk2[], /* Weighted LPCs for this subframe */
+void *par, /* Codebook/search parameters*/
+int p, /* number of LPC coeffs */
+int nsf, /* number of samples in subframe */
+float *exc,
+SpeexBits *bits,
+float *stack
+);
+
+void split_cb_shape_sign_unquant(
+float *exc,
+void *par, /* non-overlapping codebook */
+int nsf, /* number of samples in subframe */
+SpeexBits *bits,
+float *stack
+);
void split_cb_search2(
float target[], /* target vector */
diff --git a/libspeex/hexc_table.c b/libspeex/hexc_table.c
index e405384..308719d 100644
--- a/libspeex/hexc_table.c
+++ b/libspeex/hexc_table.c
@@ -1,257 +1,129 @@
float hexc_table[256][8]={
-{-0.808777,0.522889,-0.585996,0.00203914,-0.628691,-0.371588,0.380914,-0.317525},
-{0.15673,-0.576408,0.728236,-0.323157,0.191227,-0.99638,0.93673,1.01064},
-{0.0959034,-0.277018,-1.71916,0.224231,0.637612,-0.672212,-0.236905,1.70337},
-{1.35613,0.458604,-1.36192,0.177675,-0.706717,0.322615,-0.95508,0.880085},
-{-0.40989,-1.0725,-1.1971,0.100905,0.395604,-0.162363,-0.464094,-0.5957},
-{1.61305,-1.83844,-0.883322,1.02425,-1.18022,0.223562,-0.115054,0.558894},
-{0.351025,-0.552213,-0.786358,-0.459102,1.58681,0.888893,-1.37592,-0.201812},
-{0.138743,-0.265277,1.17915,-1.24899,0.267171,1.34758,-1.87008,0.586374},
-{-0.600932,-0.613149,-0.47943,1.12824,-0.408298,0.826508,0.0477193,1.24647},
-{1.48869,-0.81186,-0.261784,-0.503374,-0.629299,0.662346,0.279251,-0.509087},
-{-0.0934602,-0.17457,-0.758435,1.08457,0.239585,-0.504587,0.686232,0.582796},
-{0.84693,1.38514,0.699449,1.25807,0.295049,-0.0894298,-0.10184,-0.806657},
-{-0.368078,0.210787,-2.20296,-0.65638,1.56279,-0.16844,1.61318,-0.120006},
-{-0.10194,0.0106725,0.120997,0.36348,-0.302064,-0.442791,0.00923203,0.578896},
-{0.0293595,-0.203684,0.545515,-0.120283,-1.0069,0.137839,0.126781,0.00352654},
-{-0.119486,0.154518,0.285092,3.33185,-1.33059,-0.983331,-1.05646,-0.506898},
-{-1.59366,0.660099,0.998661,-0.314723,0.658744,-0.831439,1.22569,-0.486493},
-{0.132164,-1.05403,1.78377,-1.59051,0.676839,0.224812,1.12597,-1.03693},
-{-0.0600416,-0.135391,-1.31914,0.102171,-0.937818,-0.496109,1.74828,0.447002},
-{0.520821,0.0324353,1.27146,-0.835034,-1.0944,-1.24635,-0.149284,1.39264},
-{-0.145715,0.839715,0.513449,0.180693,0.374319,0.404758,-0.902613,-0.741751},
-{3.34802,-0.109164,0.0169975,0.0553642,-1.05882,-0.451845,-0.492785,-0.443551},
-{-0.0560106,0.319378,-0.168577,0.226488,-0.440823,0.56149,-2.7563,2.05412},
-{0.118746,0.516211,-0.0143968,0.772312,-0.367631,0.691226,-3.23937,-0.330117},
-{0.165231,-0.235354,-0.433716,-0.880436,-0.659189,-0.897381,1.11856,2.82471},
-{0.588413,-1.41287,0.0470025,-0.446261,2.3859,-0.390315,0.439154,-1.15802},
-{0.603859,1.41714,-1.58189,-1.44953,-0.940504,0.333627,0.782746,0.596901},
-{0.329154,1.32764,0.272124,-0.080474,-1.03789,0.922687,0.176309,-0.250927},
-{-0.276147,-0.0525192,-0.322986,-0.0330593,0.687889,0.565872,0.630147,-0.495979},
-{-1.31743,0.150537,-0.169827,-0.0960073,0.905746,-0.420937,-0.58555,-0.469233},
-{0.109767,0.192229,-0.537553,0.09561,-0.602509,1.29395,-0.941109,-0.571217},
-{-0.253559,-0.468608,1.74868,-0.196019,1.14608,-0.386698,-0.980027,-0.494255},
-{-0.73753,0.68799,-0.943899,0.830381,-0.330815,0.704227,0.975151,-0.219969},
-{0.325216,0.115189,0.267397,-1.11632,1.71594,-2.11495,1.31783,-0.227522},
-{-0.0622045,0.0197852,-0.416733,-0.0019605,-0.765851,0.516627,-1.07842,3.83718},
-{0.427202,0.260416,0.159638,0.203798,-2.58566,-1.42905,1.84324,0.361801},
-{-0.0170446,0.0899078,0.631411,-0.0989984,2.69772,-0.34365,-1.53167,-1.46737},
-{0.439624,-3.04784,-0.560917,0.553406,0.203279,-0.238426,0.42574,0.748935},
-{-0.556707,-0.0942741,-0.25737,0.701488,-0.219897,2.55963,-1.44952,0.430409},
-{-0.295808,-0.0966204,0.837206,-0.39557,0.221283,0.348662,-0.131419,0.245537},
-{-0.432811,-2.24016,1.80876,0.796433,-0.02536,0.910951,-0.422385,-0.274461},
-{1.96178,0.36996,-0.198854,-1.35782,-1.16426,-0.312176,0.681845,0.462948},
-{-0.459443,-0.749728,-2.37122,1.236,1.62279,0.668355,0.342503,-0.0838306},
-{0.304269,0.262004,0.220552,0.570633,0.0833619,0.390873,0.208076,-0.0809892},
-{0.367254,-1.68072,-1.17645,-0.446899,0.792627,0.853643,1.01843,-0.186805},
-{0.337864,0.557125,0.751848,-0.533723,1.2263,-0.137238,0.205549,-0.013345},
-{0.331314,-0.798549,2.87356,-0.39505,-0.193366,-1.14558,-0.0373992,-0.00878555},
-{-2.1208,0.83966,0.737303,1.98379,-0.838669,-0.0178801,-0.485471,0.159222},
-{-1.11582,-0.0638764,0.824772,-0.0352022,-0.211324,0.369823,0.282492,-1.01858},
-{1.45412,0.492399,1.32568,-0.900533,0.352761,-1.54909,-0.167461,-0.581635},
-{0.313625,0.148285,-0.473284,0.115123,-1.79888,0.442188,0.644912,1.37658},
-{1.38859,1.94091,0.22186,0.180213,-0.273428,-1.01283,-1.03173,-0.897502},
-{0.771184,-0.25248,1.2455,0.517539,0.691557,-0.183637,0.63611,-1.15696},
-{1.85036,-1.25111,-1.45311,0.601111,1.0399,-0.239207,-0.927822,0.161069},
-{-1.79724,1.51284,-0.912954,0.990636,-1.19074,1.13124,-0.691979,0.82091},
-{0.292346,0.368185,0.385619,0.111567,-0.277132,-0.952879,-1.78787,-1.08619},
-{-0.71588,-0.744422,-0.125341,-0.122294,0.0917814,0.106495,0.474856,0.338462},
-{-0.427987,0.728385,-0.701375,-1.56086,0.436273,-0.389922,-0.268771,1.61832},
-{0.871989,1.23289,-0.394881,-0.538355,0.964153,-0.729176,-0.979271,0.0710916},
-{-0.61563,1.28199,0.157971,-1.17571,0.946734,0.444829,-1.09012,0.250331},
-{-1.13856,-0.688581,-0.0940012,0.452695,0.431558,1.73898,1.47172,-0.689541},
-{0.824974,0.0114767,-0.313246,-0.892286,-0.591019,-0.855078,-0.975519,-0.429125},
-{-0.0528536,-0.201216,1.35063,0.974641,-1.34623,0.0666181,0.665035,-1.12152},
-{0.313711,0.0441856,0.0955668,0.704854,-0.0354564,-1.20593,-1.8752,1.05217},
-{-0.695493,1.2416,-0.0320361,-0.0619316,0.183647,0.306643,-0.0217553,0.389798},
-{0.17934,-0.421392,0.0748884,-0.660978,-0.193801,-1.52173,3.13886,0.450854},
-{-0.0396398,0.0540767,-0.374352,-0.187403,-0.03619,0.217266,0.405445,1.09984},
-{1.04235,0.485276,-1.01031,0.46025,-0.15311,0.177342,0.742341,-0.688384},
-{-1.69186,-1.15831,0.0983169,1.13975,1.35315,0.854954,-0.21213,-0.851528},
-{2.09461,-1.73005,1.56185,-0.563142,-0.372469,0.115402,-0.555429,-0.0822499},
-{-0.0795778,-0.069224,-0.218627,0.13899,-0.301441,2.61665,-0.00878438,-2.27138},
-{-0.668836,-1.20384,1.25871,-0.737445,-0.517894,0.734018,-0.280888,1.13245},
-{-0.830671,-1.49774,0.209523,1.86076,-1.00498,0.179658,0.857851,0.0910563},
-{0.345519,-0.350603,-0.787428,-0.391039,-0.349897,0.159728,0.47223,0.205563},
-{1.54183,-0.0948628,-1.02113,0.650511,-0.485278,-1.36601,0.562137,0.524121},
-{2.90999,1.78334,2.05806,1.82433,1.5106,1.04695,0.72339,0.591056},
-{-1.30733,-1.24676,-1.61786,-0.067692,0.468792,1.22463,0.83458,0.703393},
-{-0.0155242,-0.0213231,0.00225538,0.723512,-0.356651,-0.299559,-0.155354,-0.754868},
-{-0.606517,1.47653,1.22334,0.18925,-0.962231,-1.00246,0.365475,-0.213715},
-{-0.164931,-1.20109,0.0430696,0.846456,-0.0651136,-0.941185,-0.398855,0.455344},
-{-2.76299,1.74181,-0.458678,0.440893,0.733256,-0.433325,-0.171665,0.721036},
-{1.58363,-1.09832,1.2246,-1.52276,0.95571,-1.1379,0.980383,-0.918086},
-{-0.643503,0.442085,0.287107,-1.10492,-0.591021,-0.192952,0.752239,0.549148},
-{0.195071,2.43492,-1.06219,-0.0949268,-0.885581,-1.47083,0.211643,0.535758},
-{0.0720198,0.250183,0.12972,-0.216719,-0.0317595,-0.857157,-0.298859,-1.67954},
-{0.999568,0.0687439,-1.61274,-1.40093,0.695667,-0.374883,-0.31825,0.206975},
-{0.105676,-0.0115208,-0.0175211,0.0465023,-0.348852,0.350671,-0.735256,0.537047},
-{0.174997,0.158472,0.553584,0.0843251,1.47625,-0.706212,-2.84033,0.448321},
-{0.0594142,-1.45687,-1.03239,-1.34435,-0.475703,0.769129,1.06548,1.33537},
-{0.773339,-0.451576,0.257821,-1.36492,0.42478,0.522859,0.775457,0.0230162},
-{0.528344,0.830586,-0.693501,-0.675812,0.383242,-0.684998,1.06472,0.617906},
-{0.722796,1.16666,-0.857913,-2.00835,0.204133,1.78738,-0.0914676,-0.609118},
-{0.0185043,-0.164745,-0.353897,-0.489875,-0.441889,0.366605,3.19346,-1.40696},
-{-0.361573,0.83363,0.38689,-0.141691,0.225086,-1.42919,-0.448093,0.983676},
-{-0.043528,-1.21209,-0.198167,0.508588,-0.488381,0.75472,0.314166,-0.316087},
-{-0.0787701,0.344402,1.85144,1.32925,0.143855,-1.34127,-1.26755,-1.04038},
-{-1.03463,2.61701,-1.23752,1.60173,-0.892178,-0.203644,-0.0435452,-0.156978},
-{-0.385499,2.16763,-1.31903,-0.830889,1.38589,-0.971437,0.341876,-0.621655},
-{-0.982007,0.483396,0.234676,0.325206,-1.15629,0.272426,-0.452657,1.10688},
-{-0.814407,0.0248399,0.519375,0.520542,-1.22835,-1.05489,0.791287,1.30571},
-{-0.587444,-0.168542,-0.662712,0.19709,3.21792,-1.40667,0.309692,-0.393578},
-{1.11184,-1.12929,0.160326,0.166788,-0.756938,1.45929,-0.823309,0.299687},
-{-0.0576646,-0.637203,-0.217167,-1.87038,0.187128,2.98001,0.269578,-0.0542942},
-{-0.778295,0.771084,1.79295,0.546435,-0.548952,1.22395,-0.75231,-0.797754},
-{-2.08654,-1.42989,1.03557,0.166929,-0.23891,-0.082845,1.12907,0.52266},
-{0.284327,0.414842,-0.494532,-1.12157,-0.450422,1.15686,1.53709,-0.0175749},
-{-0.639228,-0.0646058,-1.40381,2.55341,0.688712,-0.542615,0.841051,-0.901197},
-{0.763406,-0.568188,-0.00087138,0.413695,0.767502,0.740268,1.22465,0.552355},
-{0.0415443,0.38186,-3.06332,-0.177463,-0.369302,1.59641,0.62692,0.704707},
-{0.0812399,-0.813035,0.376212,-0.264687,0.16326,-0.0333936,-0.0502651,-0.951403},
-{0.384816,0.55555,2.90495,-1.85337,-1.14819,0.129403,-0.476643,-0.439153},
-{-1.40799,0.454224,0.114894,1.04154,1.63284,-0.0359158,0.30784,0.077151},
-{-1.31494,-0.813242,1.77587,-1.4204,1.27696,-0.0261728,0.105655,0.176416},
-{1.22696,-1.42075,0.614181,0.388936,0.579128,-1.12721,-0.568678,0.00162247},
-{0.147985,1.0085,0.307689,-1.64006,-1.73847,0.443712,0.378749,1.2384},
-{1.08718,-0.0593162,0.085134,-0.17511,-0.430982,-0.424982,0.186084,-0.135354},
-{0.179978,0.0977914,0.431251,-0.0309529,0.510113,-0.693534,0.50011,-3.4506},
-{1.19026,0.0486908,0.356885,0.167754,0.617369,-0.154919,-0.73482,-1.01514},
-{-0.0387573,0.414342,-1.80526,2.11058,-1.54069,0.917013,-0.109245,-0.289524},
-{-0.454713,1.52397,0.737781,1.12684,-0.680711,-0.790029,-1.42535,0.173591},
-{-0.328012,0.261804,0.746791,0.564532,-0.553552,0.0441862,1.38248,0.186016},
-{0.667876,1.38717,1.35139,-2.96378,-0.0395241,-0.567713,-0.145259,0.30536},
-{0.135526,0.911312,-1.26862,-0.32518,0.538648,0.417322,-0.0360691,-0.398564},
-{-0.98413,2.9185,0.654757,-1.09717,-0.950289,0.26985,0.0916787,-0.411594},
-{-0.335957,-0.0634045,-1.00525,0.133848,-1.34124,2.98978,0.7772,-0.200313},
-{-2.77015,-1.78929,-1.68706,-1.55953,-1.38527,-0.983483,-0.794544,-0.358305},
-{0.422973,-0.660658,1.31996,-0.426988,-0.468712,1.12782,0.14786,-0.806196},
-{0.361743,0.23277,0.25592,0.554855,0.998512,-2.28186,0.135399,-1.2093},
-{-0.687769,0.0452033,-0.262838,0.20035,0.0353051,0.460395,-0.155171,-0.00192579},
-{0.31032,-0.136012,0.137005,-0.945442,0.14841,-2.79005,1.45757,1.42989},
-{-0.900737,-1.35268,-0.471629,1.17497,1.18787,0.350648,-1.24437,0.964389},
-{1.56127,1.82359,-0.925776,1.01511,-1.45534,-0.297508,0.0559301,-0.139561},
-{-0.0462621,-0.796178,0.00627632,0.487887,1.14132,0.895285,-0.409346,-0.239578},
-{1.49325,-0.457553,-0.562713,1.49225,-0.230491,-0.132286,-0.0372553,-0.779219},
-{-0.074052,-0.430304,0.672071,-0.956253,1.49798,1.61828,-0.876909,-1.27406},
-{1.0187,0.253654,0.959619,-0.729613,-0.199576,-0.0358726,-1.21267,0.546944},
-{-0.966716,-1.27168,-1.03772,-0.327353,-0.632859,-0.0430861,0.10775,0.8553},
-{0.640816,0.206735,-0.344336,-0.524876,0.301453,0.635547,-0.136396,-0.0988855},
-{0.184806,0.27398,-0.850987,0.161236,0.0455893,-0.984509,-0.168223,0.0759809},
-{0.854671,-0.136258,1.39416,0.902722,0.199242,0.275231,-0.404062,0.2226},
-{-1.94917,-0.733045,-0.772245,0.0691312,0.568955,-0.188401,1.11741,0.0813894},
-{-0.0231792,0.0406332,-0.0422235,-0.0237807,0.00645228,-0.014091,-0.00328628,-0.0269731},
-{-0.906194,-0.363433,1.06006,0.360859,-0.503677,-0.786459,0.0167893,0.0133404},
-{0.422269,-0.343991,0.0560596,1.58514,-0.762344,0.318524,-0.97429,0.364358},
-{-3.27627,0.673321,1.32766,0.470124,0.44532,0.278163,-0.156709,-0.171223},
-{-0.123139,-1.49281,0.0668417,-1.51375,0.829185,-0.698139,0.904836,-0.0540672},
-{0.458845,-0.200406,-0.90056,0.0409038,-1.87272,-0.059603,0.117528,-0.341763},
-{0.311415,0.084379,0.200552,-0.256706,0.14961,-2.39829,-0.957787,2.49645},
-{0.0325073,0.516325,0.142447,0.775278,-0.0761688,0.471091,-1.43209,-2.50531},
-{2.35513,0.611441,0.32354,0.125114,0.53332,-0.186619,-0.117798,0.0939877},
-{0.281024,0.722204,0.368336,0.368587,-1.71743,0.664121,-1.96004,0.801418},
-{-0.0399085,-0.0233632,0.181302,0.716231,0.944008,1.9438,-2.5673,-1.24767},
-{-0.427528,-0.18767,-0.557845,-0.390206,-0.405721,1.04527,0.863514,2.54192},
-{-0.0880345,-0.459539,-0.912484,-0.65522,1.64758,1.67046,0.840719,-1.32067},
-{-0.147995,2.54311,-1.1464,-0.371562,-0.731225,0.910382,-0.950371,0.253017},
-{0.494899,1.59301,0.110902,-1.20394,-0.542264,-0.455406,0.616078,-0.751476},
-{0.0416721,0.00096097,-0.332705,-0.133402,-0.592335,0.469598,0.843544,-1.5787},
-{-0.28804,-0.147371,-0.148735,-0.89819,0.444204,-0.350171,-0.242063,0.216802},
-{0.0235683,-0.154932,0.329484,1.49847,-2.55488,1.53946,-0.52761,-0.292228},
-{-0.320628,0.56586,0.95019,0.860762,0.465814,-0.57876,-0.207143,0.0336202},
-{-1.89591,1.69693,-1.01986,0.291905,0.0337999,-0.304789,0.80978,-0.907923},
-{0.201753,-0.173085,0.57677,-0.541242,0.965199,-1.32738,2.05467,-2.2066},
-{-0.0423064,0.595229,-0.567897,0.903553,-1.62325,-1.0837,-0.758215,2.19196},
-{-0.0995138,1.16365,0.504768,1.15474,-2.97384,-0.639325,-0.157529,0.265709},
-{-0.171421,-0.293915,-0.0931648,1.62147,1.59152,-0.421573,-1.26656,-0.973813},
-{0.567538,-2.67901,0.384474,-0.825834,0.553463,1.14339,-0.162028,0.221003},
-{-0.200415,-0.498812,-0.719186,-0.068236,0.349007,1.10351,-0.74929,1.10836},
-{-0.227523,0.203778,0.250793,-1.22197,-0.626241,0.513681,-0.325717,-0.454119},
-{-0.00361921,-2.26803,1.59277,0.444606,1.00568,-1.12035,0.660596,-0.304733},
-{0.198435,-0.389408,-0.564997,-0.912806,-1.02791,-0.885569,0.0274177,0.655909},
-{-0.724919,-0.107059,-2.02767,2.517,0.127475,-0.421874,-0.670363,0.821456},
-{0.408334,0.604139,-0.0257201,0.962369,0.659979,0.604856,-0.652068,0.800184},
-{1.92652,-0.70313,-1.80901,-1.32288,-0.138311,0.695327,1.03039,0.435844},
-{0.0690851,-0.0623718,0.169685,-0.289407,0.141078,-0.281387,0.70663,-0.393098},
-{0.377194,-0.385657,2.19488,0.602355,-1.91452,-0.411003,-0.953451,0.47299},
-{-1.2391,0.289887,-0.611413,1.27895,0.130686,0.266617,-1.02355,0.169671},
-{-0.797655,1.07721,0.537033,-0.828331,0.623273,0.943434,0.239111,-1.2561},
-{0.208696,-0.0416711,1.07258,-0.724576,1.75278,-2.45005,-1.08247,0.165616},
-{-0.146516,0.0763024,-0.623232,-0.403905,-2.06184,2.23284,-0.725328,1.45169},
-{0.738275,1.21216,1.74647,-0.123546,-0.733204,-0.341279,-0.640132,-0.752561},
-{-0.235637,-0.244096,0.35929,0.344935,1.19224,0.234872,-0.0568987,-2.19267},
-{0.585596,-0.0452693,-0.605202,0.433336,1.2855,-0.605342,-0.0913277,-0.038099},
-{-0.411354,0.838034,-1.49501,1.15931,-0.845042,1.17135,-1.31966,1.15102},
-{1.29489,0.546986,0.317687,0.388757,-1.19381,0.291949,-0.988666,-0.790527},
-{0.463076,-0.634534,-0.00213198,0.0555478,0.278823,-0.003153,-0.0730633,0.130724},
-{-0.680517,-0.146837,-0.434109,-0.730404,1.35604,0.646014,0.547171,0.75849},
-{0.494406,0.898478,-0.141296,-0.307567,-0.414651,-0.168474,-0.169992,0.249803},
-{-1.40652,0.899466,1.45931,-0.86589,-0.120286,-0.0571926,-0.631404,0.350938},
-{-0.547421,-0.352653,0.0902851,-0.284476,-0.395727,1.46829,0.776707,0.326405},
-{-0.269792,-0.678802,-0.858414,-1.14491,-1.07189,-0.982154,-1.03886,-0.962474},
-{1.23972,-1.21529,0.7549,0.823635,-1.07411,-0.183865,0.312112,-0.981306},
-{-0.223371,-0.0609721,-0.0130559,1.76329,1.34323,-2.23744,-0.968509,0.553359},
-{-0.83723,0.945377,-0.0130015,0.7976,-0.802271,0.337151,-0.466119,-0.222138},
-{0.391602,0.503566,0.0480818,0.0673739,-0.647474,-1.56068,1.32505,-0.762175},
-{1.39401,-0.601129,-0.532522,-0.356412,0.231133,-0.38761,-0.260244,1.01642},
-{-0.0916899,0.947205,-0.473112,1.495,-1.10378,-0.309157,1.01827,-1.81116},
-{-0.0327095,-2.17732,-0.296067,1.76383,1.14406,0.470282,0.102904,-0.294464},
-{2.79548,-2.00851,-0.0650745,-0.56353,0.515563,-0.384438,0.379329,-0.303786},
-{-0.938677,0.790154,-1.28689,0.816583,0.729919,1.4185,-0.510592,-1.07938},
-{0.750844,-0.916416,0.960228,-2.26194,0.387169,-0.143917,-0.525221,1.02498},
-{-2.56175,-0.369587,-0.520176,1.1574,-0.386785,0.863226,0.222942,0.415037},
-{-0.590394,-0.815283,-0.929596,-1.35301,-0.275245,0.239319,0.360759,-0.343421},
-{0.613533,-1.29497,-0.224972,0.793246,-0.142523,-0.74719,1.17681,-0.29032},
-{0.66837,1.12645,0.887062,0.814444,0.96737,1.00758,0.745419,0.251183},
-{-1.39397,-2.09185,0.20586,-0.115216,1.29928,0.795985,0.553848,0.431367},
-{0.105604,-0.0561841,-0.238679,0.331352,0.348262,-0.0654908,-1.04148,-0.39253},
-{-1.73263,0.56412,0.790091,-0.350418,-1.3668,0.881681,0.570515,-0.11346},
-{-1.29172,-1.0458,1.03927,1.78312,0.209826,-0.878176,-0.667996,0.311771},
-{-2.02997,0.76276,-0.48451,-1.12103,0.0675854,0.666788,0.288789,0.311225},
-{1.28467,-0.216596,-0.248218,-0.76594,0.639806,-0.744657,0.995064,-1.01644},
-{-1.06103,0.557376,-1.46966,0.0673947,-0.531373,0.480932,-0.0105433,0.789753},
-{1.32469,1.42319,0.548429,-0.803708,-1.43431,-1.34565,-0.297593,0.547584},
-{-0.273803,1.04973,-0.174112,0.232881,0.405845,-0.512552,0.344319,-0.815064},
-{2.51955,1.57409,-1.39338,-0.937761,-0.0497074,-0.128205,-0.333554,-0.52516},
-{-0.352971,0.713345,-0.558412,-0.431516,-0.635593,-0.135521,-1.30022,0.669742},
-{0.246198,-0.698022,0.335394,-0.502827,1.58476,-0.426501,-0.796604,1.11315},
-{-0.367488,-0.503223,-0.211863,-0.525563,0.0375716,0.204918,2.01842,1.15478},
-{0.107188,-0.719032,-0.648959,-2.39294,2.46049,0.850218,0.18543,0.701523},
-{0.407559,1.31236,-2.89593,0.611598,-0.152036,-0.72166,0.920559,-0.383882},
-{1.28091,0.925667,0.313489,-1.10136,0.191921,0.638277,-0.356922,-1.11068},
-{-0.240606,-0.443837,0.155519,-0.470245,0.906559,-0.213211,2.30216,-0.722409},
-{-1.41226,-0.288547,0.332802,-0.187539,0.796591,-0.41168,-0.356223,1.33626},
-{-0.114571,-0.371635,0.108278,1.38411,-0.191887,1.28419,-0.0299939,-1.14145},
-{-1.13655,0.332799,1.10611,1.91257,0.726154,0.0727846,-0.652235,-1.19888},
-{0.189963,1.40878,-1.27619,1.09449,0.284361,-0.527403,-0.734522,-0.0705183},
-{-1.05085,0.810117,-0.641032,-0.283443,0.657092,-1.1502,0.777061,0.503461},
-{-0.0696791,0.188862,-0.0880076,0.11709,-0.262023,0.181331,-0.677646,2.10793},
-{-0.169008,0.192039,-0.110151,2.07904,-0.599761,-1.58628,1.00301,-0.0286543},
-{-0.2082,-1.1611,-0.715412,-0.0343943,1.20253,-0.988453,0.73203,0.740159},
-{0.738459,-1.18892,0.49685,-0.0177689,-0.458849,0.170949,-0.459235,1.25229},
-{0.345414,-0.120539,-0.481404,-1.75731,0.0219378,1.44327,-0.574763,1.36348},
-{-0.404927,-0.615118,0.908928,0.34826,-0.27947,0.389891,-1.43437,-0.0741029},
-{-1.56463,-0.364887,2.75591,0.667894,-0.57053,-0.13117,0.538331,-0.0885438},
-{0.518327,-0.215243,0.050454,-2.86284,-0.619997,0.155151,2.06075,0.471453},
-{-0.62011,-0.352696,-0.145548,0.876026,0.666619,-0.413956,1.11097,-1.30323},
-{-0.385767,0.170404,0.538993,0.961485,0.891708,1.22576,0.960098,1.11406},
-{0.388173,-0.598376,-1.7336,0.129233,-0.1874,1.26948,0.0620169,-0.0968803},
-{-0.19228,-0.471001,0.641792,-0.304033,0.772593,-1.03034,0.604548,-0.543104},
-{0.236728,0.232818,1.44882,-1.05148,-0.828635,-0.531352,1.08306,-0.814594},
-{-0.717436,-0.477879,0.650262,0.726283,0.623916,0.184593,0.138505,-0.0524061},
-{-1.65222,-0.3664,0.264498,-0.335065,0.462571,1.50107,-0.68202,0.38008},
-{0.852734,-0.893088,0.822156,-0.737121,0.493278,-0.482329,0.219251,-0.160266},
-{0.733272,0.0144073,1.1664,-1.4086,-2.45165,1.45537,-0.0296166,-0.0845569},
-{0.246836,0.26554,0.549598,-0.23729,-0.0491141,-0.575949,-0.311769,-0.230354},
-{0.128284,-0.261473,0.105539,0.293469,0.51569,0.803836,1.89172,-3.07493},
-{1.64698,-0.329134,-1.20051,0.000372357,0.810401,0.779316,-0.37545,-1.23125},
-{-0.132155,0.419303,-0.732552,0.667706,-0.626713,0.339305,-0.32,0.289691},
-{0.808921,0.354669,0.392377,0.671615,-0.803726,-1.28414,-0.556139,0.0837814},
-{0.835236,0.620821,0.717716,-0.0309147,-0.223465,0.124068,0.667246,1.04023},
-{-0.0521935,0.618173,0.241935,-2.14632,1.49656,-0.491607,0.372421,-0.678658},
-{-0.40883,0.823298,-1.92246,-0.388639,1.55592,0.392341,-1.13516,0.595127},
-{-0.958854,2.3407,1.30073,-0.280573,0.911012,-1.05048,-0.513848,-0.546581},
-{-0.17029,-0.09665,-0.684148,0.150044,-2.35408,1.49623,2.21859,-0.0558014},
-{-1.19796,-0.719742,-0.263796,-0.494669,-0.723702,-0.821728,-0.638013,-0.151613},
-{0.410444,-1.75187,0.966378,-0.396605,-0.975379,0.0302732,1.08905,0.168156},
-{0.195242,0.309484,1.07001,0.591054,-0.535163,-3.19281,0.13333,0.269121}};
+{-0.832280,0.602346,-0.560115,0.167680,-0.314430,-0.214323,0.482515,-0.353925},
+{0.223509,-0.620498,0.624377,-0.595327,0.053103,-0.994383,0.742378,0.465689},
+{0.123678,-0.308868,-1.493745,0.588987,0.705033,-0.737404,-0.826796,1.359984},
+{1.394344,0.774886,-0.879959,0.706302,-0.467630,0.468063,-0.984297,0.845379},
+{-0.368248,-0.858701,-0.876197,0.336581,0.593624,0.055559,-0.143175,-0.220802},
+{2.155218,-1.027000,-0.454930,1.590675,-1.021255,0.635631,-0.170857,0.134992},
+{0.690515,-0.393873,-0.586696,-0.519591,1.558230,1.070732,-1.411309,0.205749},
+{0.454174,-0.301409,0.830701,-1.119527,0.124592,1.518211,-2.118384,1.229133},
+{-0.604917,-0.691883,-0.587432,1.000739,-0.635092,0.421306,-0.815323,1.041446},
+{1.725259,-0.732087,0.034233,-0.069087,-0.434880,0.721474,0.272473,-0.494338},
+{-0.214157,-0.200435,-0.762648,0.967241,0.113683,-0.880408,0.387549,0.274355},
+{0.899149,1.403463,0.692711,1.160717,0.117461,-0.038202,0.155570,-0.676557},
+{-0.271212,0.199861,-1.899348,-0.330220,1.481044,-0.813378,1.511461,-0.752603},
+{-0.170258,0.038102,-0.000386,0.231904,-0.190576,-0.304610,-0.063720,0.316574},
+{0.073603,-0.226561,0.470825,-0.088988,-0.644688,0.339521,0.051494,0.002446},
+{-0.102045,0.392581,0.155490,2.974790,-1.996640,-0.359992,-0.509910,-0.039892},
+{-1.599489,0.239436,0.623951,-0.797969,0.562948,-1.101736,1.078782,-0.562288},
+{0.338906,-0.985567,1.493714,-1.683343,0.668433,-0.104435,1.204108,-0.876913},
+{-0.148561,0.054664,-1.091334,0.331119,-0.801290,-0.579339,1.612688,-0.127755},
+{0.489030,-0.014172,1.164302,-0.755285,-0.645843,-1.072932,-0.131331,1.469590},
+{-0.241129,0.438264,0.206105,-0.039306,0.206308,0.637525,-0.674223,-0.340431},
+{4.096793,0.191578,0.353805,0.833658,-0.175351,0.496152,-0.034709,0.134797},
+{-0.023852,0.230532,-0.191825,0.190761,-0.683548,0.629999,-2.761560,2.880906},
+{0.042227,0.397761,-0.147964,0.874548,-0.406355,0.902272,-2.334215,0.529654},
+{0.100123,-0.193177,-0.366872,-0.748251,-0.566081,-0.910172,0.935383,2.597818},
+{0.369373,-1.160451,0.315336,-0.629979,2.072574,-0.960778,0.924840,-1.040264},
+{0.998154,1.928411,-1.190751,-0.825741,-0.719263,0.364534,0.356495,0.341056},
+{0.231155,0.951067,0.136711,0.015627,-0.971382,0.722064,0.086276,-0.258284},
+{-0.387367,-0.038091,-0.412356,-0.171179,0.469019,0.179470,0.536647,-0.640090},
+{-1.559246,-0.049700,-0.298943,-0.557185,0.685624,-0.246528,-0.034443,-0.174674},
+{0.203791,0.196831,-0.288128,0.207277,-0.540519,1.438115,-0.876295,-0.055813},
+{-0.556169,-0.758462,1.302039,-0.718046,0.984675,-0.165604,-0.476743,-0.081323},
+{-0.981381,0.601008,-0.919132,0.874686,-0.770209,0.251448,0.642656,-0.675310},
+{0.015478,-0.098347,0.410328,-1.299897,2.276125,-2.379774,1.867343,-0.862582},
+{-0.180873,0.165740,-0.441134,0.239003,-0.854430,0.447657,-1.395852,4.785034},
+{0.656946,0.279702,0.121700,0.732308,-2.086384,-1.377342,2.019109,-0.035635},
+{-0.146154,-0.217754,0.149005,-0.630533,2.745872,-0.581260,-0.969982,-0.301015},
+{0.425965,-2.894024,-0.072881,0.354270,-0.349737,-0.274695,0.328390,0.302141},
+{-0.416644,0.038268,-0.413069,0.399314,-0.925991,2.845834,-2.005719,0.451704},
+{-0.261579,-0.216498,0.699231,-0.439508,0.140732,0.070305,-0.079718,0.027726},
+{0.059041,-2.230085,1.974291,0.562896,-0.714065,0.731473,-0.518938,0.092363},
+{2.203601,0.481734,0.065948,-1.136962,-0.439324,-0.086786,0.719763,0.169942},
+{-0.176329,-0.462994,-2.333004,1.039957,1.125143,0.200339,-0.102680,-0.189562},
+{0.016981,0.034504,-0.016484,0.120725,-0.086147,0.116413,-0.039664,-0.021697},
+{0.342947,-1.719988,-1.350704,-0.330378,0.805778,0.474144,0.906205,-0.675453},
+{0.042829,0.138848,0.471025,-0.789681,0.808724,-0.376155,0.095035,-0.095014},
+{0.386595,-1.371873,2.338925,-0.787709,0.140351,-0.541997,0.234354,0.116136},
+{-3.004894,0.209202,-0.245636,1.114270,-1.049203,0.204091,-0.357611,0.188928},
+{-1.147810,-0.046399,0.743520,-0.191627,-0.181239,0.395339,0.359034,-0.832205},
+{1.256774,0.097483,1.075037,-0.767940,0.854298,-1.041373,0.544401,-0.296204},
+{0.828614,0.248557,-0.199247,0.452193,-1.706949,0.273385,-0.013889,1.004178},
+{1.602618,2.096315,0.232427,0.337458,0.171404,-0.466847,-0.127899,-0.157426},
+{0.675444,-0.574150,0.981215,0.243498,0.104767,-0.568385,1.029990,-1.141564},
+{2.497265,-0.488979,-1.179411,0.757833,0.823635,-0.042440,-0.596424,0.241332},
+{-2.171172,1.463427,-1.353310,0.606630,-1.204981,1.030154,-0.933891,0.523175},
+{0.301360,0.324486,0.559120,0.420470,0.218546,-0.264922,-1.166298,-0.374077},
+{-0.630407,-0.647944,-0.107679,-0.119954,-0.014076,-0.074598,0.189276,0.030661},
+{-0.783204,0.694240,-0.511951,-1.505997,0.515796,-0.587731,-0.344406,1.617094},
+{1.045699,1.345509,-0.267897,-0.106000,1.287672,-0.516164,-0.719459,0.211953},
+{-0.999976,0.984652,0.081610,-1.196359,0.754654,0.400453,-1.066100,0.437713},
+{-1.084924,-0.573553,-0.380590,0.194507,-0.166434,1.168553,0.984201,-1.293893},
+{0.787696,0.092015,0.109413,-0.235304,0.073398,-0.086010,-0.225405,0.115092},
+{0.257367,-0.218819,1.435003,0.745216,-1.503138,0.089044,0.946732,-1.017036},
+{0.200816,0.012988,0.144469,0.442492,-0.024241,-0.607072,-1.705528,1.750982},
+{-0.830128,1.048074,-0.373913,-0.176251,0.041243,0.237614,-0.251550,0.206515},
+{0.443499,-0.149056,0.153578,-0.284995,-0.306524,-2.281193,3.129705,-0.118274},
+{-0.129108,0.054034,-0.353900,-0.208948,-0.182241,0.144986,-0.041409,0.601953},
+{1.416017,0.532981,-0.981492,0.728147,-0.332914,0.250446,0.751655,-0.909366},
+{-1.950695,-1.540158,-0.242649,0.541209,0.801851,0.455435,-0.148904,-0.545304},
+{2.347112,-1.658450,1.774442,-0.504975,-0.023925,0.428164,-0.364922,0.341901},
+{-0.166228,-0.061801,-0.171083,0.201799,-0.657055,2.480911,0.174099,-1.916991},
+{-0.547850,-1.268582,1.168489,-0.843246,-0.655711,0.682729,-0.733602,0.941106},
+{-0.369495,-1.197877,-0.033952,1.809013,-1.129699,-0.030686,0.439634,-0.208864},
+{0.456134,-0.209331,-0.496804,-0.151786,-0.182905,0.082390,0.276059,0.024224},
+{1.869258,0.252611,-0.688416,1.099229,-0.022152,-0.960212,0.560657,0.069736},
+{3.274954,1.506363,1.778409,1.021140,1.046098,0.511055,-0.190809,0.311272},
+{-1.164931,-1.152651,-1.497099,-0.121768,-0.081895,0.706283,0.099963,0.306703},
+{-0.054276,-0.094741,0.020378,0.798964,-0.383634,-0.073826,0.119401,-0.491029},
+{-0.733339,1.273912,0.869925,0.130914,-0.556640,-0.840988,0.619486,-0.271043},
+{0.014981,-1.134990,0.073203,0.868539,-0.022179,-0.600950,-0.243091,0.497803},
+{-3.660710,1.232092,-0.885276,-0.369324,0.061247,-0.260303,-0.371883,0.198639},
+{1.153146,-0.897095,1.736239,-1.902701,1.629850,-1.530732,1.588206,-0.801185},
+{-0.845448,0.244247,0.314377,-1.059838,-0.290153,-0.161003,0.548616,0.172438},
+{-0.408399,2.130193,-0.997421,0.473956,-0.476695,-0.983620,0.371059,0.201112},
+{0.190533,0.291515,0.328523,0.091677,0.306143,-0.328350,0.400929,-1.851406},
+{1.323022,0.342972,-1.070776,-0.893991,0.961938,-0.089411,0.038467,0.078289},
+{0.067018,0.028972,-0.099610,0.149615,-0.284795,0.485201,-0.671551,0.480180},
+{0.187650,-0.172929,0.448778,-0.255444,1.534490,-0.658232,-2.404972,1.484805},
+{0.284101,-1.202617,-0.747633,-1.301354,-0.732936,0.587194,0.658519,1.014653},
+{0.842230,-0.378030,0.521340,-1.178764,0.354198,0.196210,0.415769,-0.213960},
+{0.367643,0.778878,-0.560292,-0.525382,0.364347,-0.899824,0.953784,0.032542},
+{0.842926,1.331821,-0.521174,-1.610593,0.293996,1.525177,-0.355238,-0.325794},
+{0.137842,0.008957,0.006281,0.016926,-0.168158,-0.328214,2.456947,-1.818164},
+{-0.616171,0.374509,0.301159,-0.099137,0.326755,-1.394168,-0.314204,1.044775},
+{0.119023,-1.123636,-0.217497,0.515819,-0.613546,0.638016,0.014644,-0.074251},
+{-0.236468,0.240783,1.722621,1.105436,0.290573,-1.047014,-0.501289,-0.513975},
+{-1.369977,2.343551,-1.966917,1.531762,-0.949734,0.032643,0.112204,-0.130345},
+{-1.318450,1.948178,-1.287431,-0.747651,1.492822,-1.090136,0.680508,-0.506093},
+{-1.258388,0.192852,0.057604,0.135939,-1.001607,0.558940,-0.766022,0.932338},
+{-0.745050,-0.047848,0.371824,0.570995,-1.204112,-1.233286,0.405072,1.249406},
+{-0.629357,0.190334,-0.827573,-0.601408,2.722264,-1.909022,0.721005,-0.357665},
+{1.169332,-0.810400,0.393158,0.334853,-0.691230,1.378341,-1.196513,0.466419},
+{-0.008721,-0.498672,0.081530,-1.452605,-0.113727,2.440697,-0.488621,-0.128960},
+{-1.262450,0.195722,1.013261,-0.115690,-0.850997,1.166724,-0.738126,-0.195526},
+{-2.435908,-1.591555,0.789726,-0.371691,-0.326302,-0.595849,0.488604,0.055721},
+{0.456449,0.489112,-0.312675,-1.140395,-0.789736,0.812687,1.339665,-0.431598},
+{-0.771968,0.306481,-1.408258,2.167170,-0.130136,-1.026478,1.132890,-1.057900},
+{0.671300,-0.596799,-0.238445,0.100173,0.441947,-0.104096,0.463029,-0.098153},
+{0.356589,0.857521,-2.450599,-0.047046,-0.631894,1.282488,-0.250394,0.412160},
+{0.059856,-0.585458,0.423195,-0.303706,0.283444,-0.089959,0.321341,-0.431920},
+{0.060669,-0.385921,2.764031,-2.148305,-0.547237,0.661333,-0.225978,-0.024212},
+{-1.612045,0.089003,-0.580094,0.460054,0.863515,-0.712456,0.469113,-0.433370},
+{-2.028606,-1.077142,1.453258,-1.919952,0.993344,-0.428486,0.150522,0.008683},
+{1.744490,-0.937855,0.849633,0.233917,0.649430,-0.671007,0.073790,0.014633},
+{0.036939,0.856177,0.396913,-1.478972,-1.423382,0.624502,-0.063128,1.197376},
+{0.937510,0.056992,0.351854,0.081729,-0.148350,-0.187182,0.260690,-0.155276},
+{0.142627,-0.131972,0.291355,-0.016157,0.734708,-0.327626,0.968334,-2.906772},
+{1.216957,0.094049,0.403230,0.071355,0.849479,-0.096772,-0.311777,-0.517607},
+{-0.149855,0.451617,-1.580693,2.373276,-2.136219,1.190228,-0.145455,-0.285199},
+{-0.541653,1.402525,0.286591,0.955480,-0.454946,-0.272534,-1.226290,0.577949},
+{-0.319323,0.012771,0.335767,0.257900,-0.653751,-0.392800,1.011664,-0.361068},
+{0.411514,1.045434,1.467921,-2.659990,0.468622,-0.166632,-0.111635,0.416977},
+{0.038933,0.894807,-1.161452,-0.308040,0.566157,0.291836,-0.073931,-0.244760},
+{-2.069564,2.074868,0.405906,-1.008995,-0.894998,0.386126,0.085950,-0.047490},
+{-0.181617,0.011234,-0.656782,0.494631,-1.942429,2.432688,0.098158,-0.313548},
+{-3.029000,-1.749642,-0.747152,-0.843399,-0.811249,-0.313704,-0.448934,0.319464},
+{0.498320,-0.742194,1.308212,-0.495912,-0.666645,0.991647,0.217673,-0.595566},
+{0.217734,0.205176,0.033304,0.641149,0.996732,-1.952382,1.013184,-1.100263}};
diff --git a/libspeex/modes.c b/libspeex/modes.c
index a0647ee..2415026 100644
--- a/libspeex/modes.c
+++ b/libspeex/modes.c
@@ -74,7 +74,7 @@ static split_cb_params split_cb_high = {
8, /*subvect_size*/
5, /*nb_subvect*/
hexc_table, /*shape_cb*/
- 8, /*shape_bits*/
+ 7, /*shape_bits*/
};
/* Default mode for narrowband */
@@ -176,8 +176,8 @@ static SpeexSBMode sb_wb_mode = {
lsp_quant_high,
lsp_unquant_high,
/*Innovation quantization*/
- split_cb_search_nogain2,
- split_cb_nogain_unquant,
+ split_cb_search_shape_sign,
+ split_cb_shape_sign_unquant,
&split_cb_high
};
diff --git a/libspeex/testenc_wb.c b/libspeex/testenc_wb.c
index 32b1939..6fa6a75 100644
--- a/libspeex/testenc_wb.c
+++ b/libspeex/testenc_wb.c
@@ -23,7 +23,7 @@ int main(int argc, char **argv)
st = speex_encoder_init(&speex_wb_mode);
dec = speex_decoder_init(&speex_wb_mode);
- pf=1;
+ pf=0;
speex_decoder_ctl(dec, SPEEX_SET_PF, &pf);
if (argc != 4 && argc != 3)