@@ -23,14 +23,15 @@ void quant_mbest(float vec_out[],
2323 int indexes [],
2424 float vec_in [],
2525 int num_stages ,
26- float vq [],
26+ float vqw [], float vq [],
2727 int m [], int k ,
28- int mbest_survivors , int st , int en );
28+ int mbest_survivors );
2929
3030int verbose = 0 ;
3131
3232int main (int argc , char * argv []) {
3333 float vq [MAX_STAGES * MAX_K * MAX_ENTRIES ];
34+ float vqw [MAX_STAGES * MAX_K * MAX_ENTRIES ];
3435 int m [MAX_STAGES ];
3536 int k = 0 , mbest_survivors = 1 , num_stages = 0 ;
3637 char fnames [256 ], fn [256 ], * comma , * p ;
@@ -152,8 +153,10 @@ int main(int argc, char *argv[]) {
152153 w [i ] = 0.0 ;
153154
154155 /* apply weighting to codebook (rather than in search) */
155- for (int s = 0 ; s < num_stages ; s ++ )
156- mbest_precompute_weight (& vq [s * k * MAX_ENTRIES ], w , k , m [s ]);
156+ memcpy (vqw , vq , sizeof (vq ));
157+ for (int s = 0 ; s < num_stages ; s ++ ) {
158+ mbest_precompute_weight (& vqw [s * k * MAX_ENTRIES ], w , k , m [s ]);
159+ }
157160
158161 int indexes [num_stages ], nvecs = 0 ; int vec_usage [m [0 ]];
159162 for (int i = 0 ; i < m [0 ]; i ++ ) vec_usage [i ] = 0 ;
@@ -175,7 +178,7 @@ int main(int argc, char *argv[]) {
175178 target [i ] += - difference ;
176179 dont_count = 1 ;
177180 }
178- quant_mbest (quantised , indexes , target , num_stages , vq , m , k , mbest_survivors , st , en );
181+ quant_mbest (quantised , indexes , target , num_stages , vqw , vq , m , k , mbest_survivors );
179182 if (dont_count == 0 ) {
180183 for (int i = st ; i <=en ; i ++ )
181184 sqe += pow (target [i ]- quantised [i ], 2.0 );
@@ -186,7 +189,7 @@ int main(int argc, char *argv[]) {
186189 vec_usage [indexes [0 ]]++ ;
187190 }
188191
189- fprintf (stderr , "%4.2f\n" , sqe /(nvecs * (en - st + 1 )));
192+ fprintf (stderr , "MSE: %4.2f\n" , sqe /(nvecs * (en - st + 1 )));
190193
191194 if (output_vec_usage ) {
192195 for (int i = 0 ; i < m [0 ]; i ++ )
@@ -214,9 +217,9 @@ void quant_mbest(float vec_out[],
214217 int indexes [],
215218 float vec_in [],
216219 int num_stages ,
217- float vq [],
220+ float vqw [], float vq [],
218221 int m [], int k ,
219- int mbest_survivors , int st , int en )
222+ int mbest_survivors )
220223{
221224 float err [k ], se1 ;
222225 int i ,j ,s ,s1 ,ind ;
@@ -240,7 +243,7 @@ void quant_mbest(float vec_out[],
240243 /* now quantise err[] using multi-stage mbest search, preserving
241244 mbest_survivors at each stage */
242245
243- mbest_search (vq , err , k , m [0 ], mbest_stage [0 ], index );
246+ mbest_search (vqw , err , k , m [0 ], mbest_stage [0 ], index );
244247 if (verbose ) mbest_print ("Stage 1:" , mbest_stage [0 ]);
245248
246249 for (s = 1 ; s < num_stages ; s ++ ) {
@@ -258,11 +261,11 @@ void quant_mbest(float vec_out[],
258261 ind = index [s - s1 ];
259262 if (verbose ) fprintf (stderr , " s: %d s1: %d s-s1: %d ind: %d\n" , s ,s1 ,s - s1 ,ind );
260263 for (i = 0 ; i < k ; i ++ ) {
261- target [i ] -= vq [s1 * k * MAX_ENTRIES + ind * k + i ];
264+ target [i ] -= vqw [s1 * k * MAX_ENTRIES + ind * k + i ];
262265 }
263266 }
264267 pv (" target: " , target , k );
265- mbest_search (& vq [s * k * MAX_ENTRIES ], target , k , m [s ], mbest_stage [s ], index );
268+ mbest_search (& vqw [s * k * MAX_ENTRIES ], target , k , m [s ], mbest_stage [s ], index );
266269 }
267270 char str [80 ]; sprintf (str ,"Stage %d:" , s + 1 );
268271 if (verbose ) mbest_print (str , mbest_stage [s ]);
@@ -279,7 +282,7 @@ void quant_mbest(float vec_out[],
279282 int ind = indexes [s ];
280283 float se2 = 0.0 ;
281284 for (i = 0 ; i < k ; i ++ ) {
282- err [i ] -= vq [s * k * MAX_ENTRIES + ind * k + i ];
285+ err [i ] -= vqw [s * k * MAX_ENTRIES + ind * k + i ];
283286 vec_out [i ] += vq [s * k * MAX_ENTRIES + ind * k + i ];
284287 se2 += err [i ]* err [i ];
285288 }
0 commit comments