Skip to content

Commit db08847

Browse files
committed
rolling back correlation alg changes as no sig speed up. Moved weighting outside of mbest_search()
1 parent 23ee66b commit db08847

File tree

8 files changed

+60
-1105
lines changed

8 files changed

+60
-1105
lines changed

misc/vq_mbest.c

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@ void quant_mbest(float vec_out[],
2323
int indexes[],
2424
float vec_in[],
2525
int num_stages,
26-
float vq[], float vqsq[],
26+
float vq[],
2727
int m[], int k,
2828
int mbest_survivors, int st, int en);
2929

3030
int verbose = 0;
3131

3232
int main(int argc, char *argv[]) {
3333
float vq[MAX_STAGES*MAX_K*MAX_ENTRIES];
34-
float vqsq[MAX_STAGES*MAX_ENTRIES];
3534
int m[MAX_STAGES];
3635
int k=0, mbest_survivors=1, num_stages=0;
3736
char fnames[256], fn[256], *comma, *p;
@@ -144,15 +143,25 @@ int main(int argc, char *argv[]) {
144143
if (st == -1) st = 0;
145144
if (en == -1) en = k-1;
146145

147-
/* precompute vqsq table for efficient search */
146+
float w[k];
147+
for(int i=0; i<st; i++)
148+
w[i] = 0.0;
149+
for(int i=st; i<=en; i++)
150+
w[i] = 1.0;
151+
for(int i=en+1; i<k; i++)
152+
w[i] = 0.0;
153+
154+
/* apply weighting to codebook (rather than in search) */
148155
for(int s=0; s<num_stages; s++)
149-
mbest_precompute_cbsq(&vqsq[s*MAX_ENTRIES], &vq[s*k*MAX_ENTRIES], k, m[s]);
156+
mbest_precompute_weight(&vq[s*k*MAX_ENTRIES], w, k, m[s]);
150157

151-
int indexes[num_stages], nvecs = 0; int vec_usage[m[0]];
158+
int indexes[num_stages], nvecs = 0; int vec_usage[m[0]];
152159
for(int i=0; i<m[0]; i++) vec_usage[i] = 0;
153160
float target[k], quantised[k];
154161
float sqe = 0.0;
155162
while(fread(&target, sizeof(float), k, stdin) && (nvecs < num)) {
163+
for(int i=0; i<k; i++)
164+
target[i] *= w[i];
156165
int dont_count = 0;
157166
/* optional clamping to lower limit or mean */
158167
float mean = 0.0;
@@ -166,7 +175,7 @@ int main(int argc, char *argv[]) {
166175
target[i] += -difference;
167176
dont_count = 1;
168177
}
169-
quant_mbest(quantised, indexes, target, num_stages, vq, vqsq, m, k, mbest_survivors, st, en);
178+
quant_mbest(quantised, indexes, target, num_stages, vq, m, k, mbest_survivors, st, en);
170179
if (dont_count == 0) {
171180
for(int i=st; i<=en; i++)
172181
sqe += pow(target[i]-quantised[i], 2.0);
@@ -206,11 +215,10 @@ void quant_mbest(float vec_out[],
206215
float vec_in[],
207216
int num_stages,
208217
float vq[],
209-
float vqsq[],
210218
int m[], int k,
211219
int mbest_survivors, int st, int en)
212220
{
213-
float err[k], w[k], se1;
221+
float err[k], se1;
214222
int i,j,s,s1,ind;
215223

216224
struct MBEST *mbest_stage[num_stages];
@@ -222,23 +230,17 @@ void quant_mbest(float vec_out[],
222230
index[i] = 0;
223231
}
224232

225-
for(i=0; i<st; i++)
226-
w[i] = 0.0;
227-
for(i=st; i<=en; i++)
228-
w[i] = 1.0;
229-
for(i=en+1; i<k; i++)
230-
w[i] = 0.0;
231233
se1 = 0.0;
232234
for(i=0; i<k; i++) {
233235
err[i] = vec_in[i];
234-
se1 += err[i]*err[i]*w[i]*w[i];
236+
se1 += err[i]*err[i];
235237
}
236238
se1 /= k;
237239

238240
/* now quantise err[] using multi-stage mbest search, preserving
239241
mbest_survivors at each stage */
240242

241-
mbest_search(vq, vqsq, err, w, k, m[0], mbest_stage[0], index);
243+
mbest_search(vq, err, k, m[0], mbest_stage[0], index);
242244
if (verbose) mbest_print("Stage 1:", mbest_stage[0]);
243245

244246
for(s=1; s<num_stages; s++) {
@@ -260,7 +262,7 @@ void quant_mbest(float vec_out[],
260262
}
261263
}
262264
pv(" target: ", target, k);
263-
mbest_search(&vq[s*k*MAX_ENTRIES], &vqsq[s*MAX_ENTRIES], target, w, k, m[s], mbest_stage[s], index);
265+
mbest_search(&vq[s*k*MAX_ENTRIES], target, k, m[s], mbest_stage[s], index);
264266
}
265267
char str[80]; sprintf(str,"Stage %d:", s+1);
266268
if (verbose) mbest_print(str, mbest_stage[s]);
@@ -279,7 +281,7 @@ void quant_mbest(float vec_out[],
279281
for(i=0; i<k; i++) {
280282
err[i] -= vq[s*k*MAX_ENTRIES+ind*k+i];
281283
vec_out[i] += vq[s*k*MAX_ENTRIES+ind*k+i];
282-
se2 += err[i]*err[i]*w[i]*w[i];
284+
se2 += err[i]*err[i];
283285
}
284286
se2 /= k;
285287
pv(" err: ", err, k);

0 commit comments

Comments
 (0)