diff options
-rw-r--r-- | doc/programming.html | 157 | ||||
-rw-r--r-- | libspeex/cb_search.c | 271 | ||||
-rw-r--r-- | libspeex/cb_search.h | 20 | ||||
-rw-r--r-- | libspeex/hexc_table.c | 384 | ||||
-rw-r--r-- | libspeex/modes.c | 6 | ||||
-rw-r--r-- | libspeex/testenc_wb.c | 2 |
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 <speex.h></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(&bits);</big></pre> - <pre><big>enc_state = speex_encoder_init(&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(&bits);</big></pre> - <pre><big>speex_encode(enc_state, input_frame, &bits);</big></pre> - <pre><big>nbBytes = speex_bits_write(&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(&bits);</big></pre> - <pre><big>speex_encoder_destroy(&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 <speex.h></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(&bits);</big></pre> - <pre><big>dec_state = speex_decoder_init(&speex_nb_mode);</big></pre> + <pre><big>enc_state = speex_encoder_init(&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, &frame_size);</tt></big><br> +</blockquote> For every input frame:<br> - -<blockquote> - <pre><big>speex_bits_read_from(&bits, input_bytes, nbBytes);</big></pre> - <pre><big>speex_decode(st, &bits, output_frame, 0);</big></pre> + +<blockquote> + <pre><big>speex_bits_reset(&bits);</big></pre> + + <pre><big>speex_encode(enc_state, input_frame, &bits);</big></pre> + + <pre><big>nbBytes = speex_bits_write(&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(&bits);</big></pre> + + <pre><big>speex_encoder_destroy(&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 <speex.h></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(&bits);</big></pre> + + <pre><big>dec_state = speex_decoder_init(&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, &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, &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(&bits, input_bytes, nbBytes);</big></pre> + + <pre><big>speex_decode(st, &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) |