1919#define MAX_ENTRIES 4096
2020#define MAX_STAGES 5
2121
22- void quant_pred_mbest (float vec_out [],
23- int indexes [],
24- float vec_in [],
25- int num_stages ,
26- float vq [],
27- int m [], int k ,
28- int mbest_survivors , int st , int en );
22+ void quant_mbest (float vec_out [],
23+ int indexes [],
24+ float vec_in [],
25+ int num_stages ,
26+ float vq [], float vqsq [],
27+ int m [], int k ,
28+ int mbest_survivors , int st , int en );
2929
3030int verbose = 0 ;
3131
3232int main (int argc , char * argv []) {
3333 float vq [MAX_STAGES * MAX_K * MAX_ENTRIES ];
34+ float vqsq [MAX_STAGES * 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 ;
@@ -143,6 +144,10 @@ int main(int argc, char *argv[]) {
143144 if (st == -1 ) st = 0 ;
144145 if (en == -1 ) en = k - 1 ;
145146
147+ /* precompute vqsq table for efficient search */
148+ for (int s = 0 ; s < num_stages ; s ++ )
149+ mbest_precompute_cbsq (& vqsq [s * MAX_ENTRIES ], & vq [s * k * MAX_ENTRIES ], k , m [s ]);
150+
146151 int indexes [num_stages ], nvecs = 0 ; int vec_usage [m [0 ]];
147152 for (int i = 0 ; i < m [0 ]; i ++ ) vec_usage [i ] = 0 ;
148153 float target [k ], quantised [k ];
@@ -161,7 +166,7 @@ int main(int argc, char *argv[]) {
161166 target [i ] += - difference ;
162167 dont_count = 1 ;
163168 }
164- quant_pred_mbest (quantised , indexes , target , num_stages , vq , m , k , mbest_survivors , st , en );
169+ quant_mbest (quantised , indexes , target , num_stages , vq , vqsq , m , k , mbest_survivors , st , en );
165170 if (dont_count == 0 ) {
166171 for (int i = st ; i <=en ; i ++ )
167172 sqe += pow (target [i ]- quantised [i ], 2.0 );
@@ -196,13 +201,14 @@ void pv(char s[], float v[], int k) {
196201
197202// mbest algorithm version, backported from LPCNet/src
198203
199- void quant_pred_mbest (float vec_out [],
200- int indexes [],
201- float vec_in [],
202- int num_stages ,
203- float vq [],
204- int m [], int k ,
205- int mbest_survivors , int st , int en )
204+ void quant_mbest (float vec_out [],
205+ int indexes [],
206+ float vec_in [],
207+ int num_stages ,
208+ float vq [],
209+ float vqsq [],
210+ int m [], int k ,
211+ int mbest_survivors , int st , int en )
206212{
207213 float err [k ], w [k ], se1 ;
208214 int i ,j ,s ,s1 ,ind ;
@@ -233,7 +239,7 @@ void quant_pred_mbest(float vec_out[],
233239 /* now quantise err[] using multi-stage mbest search, preserving
234240 mbest_survivors at each stage */
235241
236- mbest_search (vq , err , w , k , m [0 ], mbest_stage [0 ], index );
242+ mbest_search (vq , vqsq , err , w , k , m [0 ], mbest_stage [0 ], index );
237243 if (verbose ) mbest_print ("Stage 1:" , mbest_stage [0 ]);
238244
239245 for (s = 1 ; s < num_stages ; s ++ ) {
@@ -255,7 +261,7 @@ void quant_pred_mbest(float vec_out[],
255261 }
256262 }
257263 pv (" target: " , target , k );
258- mbest_search (& vq [s * k * MAX_ENTRIES ], target , w , k , m [s ], mbest_stage [s ], index );
264+ mbest_search (& vq [s * k * MAX_ENTRIES ], & vqsq [ s * MAX_ENTRIES ], target , w , k , m [s ], mbest_stage [s ], index );
259265 }
260266 char str [80 ]; sprintf (str ,"Stage %d:" , s + 1 );
261267 if (verbose ) mbest_print (str , mbest_stage [s ]);
0 commit comments