Skip to content

Commit dafc7fe

Browse files
committed
vq_mbest test includes --st and --en to give weighting a work out
1 parent 1af289e commit dafc7fe

File tree

3 files changed

+28
-22
lines changed

3 files changed

+28
-22
lines changed

CMakeLists.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -991,10 +991,11 @@ endif(NOT APPLE)
991991

992992
add_test(NAME test_vq_mbest
993993
COMMAND sh -c "./tvq_mbest; \
994-
cat target.f32 | ../misc/vq_mbest -k 2 -q vq1.f32,vq2.f32 --mbest 2 -v > out.f32; \
995-
diff target.f32 out.f32"
994+
cat target.f32 | \
995+
../misc/vq_mbest -k 4 -q vq1.f32,vq2.f32 --st 1 --en 2 --mbest 2 -v > /dev/null;"
996996
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/unittest
997997
)
998+
set_tests_properties(test_vq_mbest PROPERTIES PASS_REGULAR_EXPRESSION "MSE: 0.00")
998999

9991000
add_test(NAME test_700c_eq
10001001
COMMAND sh -c "cd ${CMAKE_CURRENT_SOURCE_DIR}/unittest;

misc/vq_mbest.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3030
int verbose = 0;
3131

3232
int 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
}

unittest/tvq_mbest.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ void write_float_file(char fn[], float *values, int n) {
1717
}
1818

1919
int main(void) {
20-
float target[] = {1.0,1.0};
21-
write_float_file("target.f32", target, 2);
22-
float vq1[] = {0.9,0.9, /* this will be a better match on first stage */
23-
0.8,0.8}; /* but after second stage should choose this */
24-
write_float_file("vq1.f32", vq1, 4);
25-
float vq2[] = {0.3,0.3,
26-
0.2,0.2}; /* 0.8+0.2 == 1.0 so best 2nd stage entry */
27-
write_float_file("vq2.f32", vq2, 4);
20+
/* we're only interested in searching the inner 2 values, outer elements should be
21+
ignored */
22+
float target[] = {0.0,1.0,1.0,0.0};
23+
write_float_file("target.f32", target, 4);
24+
float vq1[] = {1.0,0.9,0.9,1.0, /* this will be a better match on first stage */
25+
2.0,0.8,0.8,2.0}; /* but after second stage should choose this */
26+
write_float_file("vq1.f32", vq1, 8);
27+
float vq2[] = {10.0,0.3,0.3,10.0,
28+
20.0,0.2,0.2,20.0}; /* 0.8+0.2 == 1.0 so best 2nd stage entry */
29+
write_float_file("vq2.f32", vq2, 8);
2830
return 0;
2931
}

0 commit comments

Comments
 (0)