1 #ifdef HAVE_CONFIG_H
2 #include <config.h>
3 #endif
4 
5 #include <stdio.h>
6 #include <string.h>
7 #include <math.h>
8 
9 #include "feat.h"
10 #include "ckd_alloc.h"
11 
12 const mfcc_t data[6][13] = {
13 	{ FLOAT2MFCC(15.114), FLOAT2MFCC(-1.424), FLOAT2MFCC(-0.953),
14 	  FLOAT2MFCC(0.186), FLOAT2MFCC(-0.656), FLOAT2MFCC(-0.226),
15 	  FLOAT2MFCC(-0.105), FLOAT2MFCC(-0.412), FLOAT2MFCC(-0.024),
16 	  FLOAT2MFCC(-0.091), FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.158), FLOAT2MFCC(-0.197)},
17 	{ FLOAT2MFCC(14.729), FLOAT2MFCC(-1.313), FLOAT2MFCC(-0.892),
18 	  FLOAT2MFCC(0.140), FLOAT2MFCC(-0.676), FLOAT2MFCC(-0.089),
19 	  FLOAT2MFCC(-0.313), FLOAT2MFCC(-0.422), FLOAT2MFCC(-0.058),
20 	  FLOAT2MFCC(-0.101), FLOAT2MFCC(-0.100), FLOAT2MFCC(-0.128), FLOAT2MFCC(-0.123)},
21 	{ FLOAT2MFCC(14.502), FLOAT2MFCC(-1.351), FLOAT2MFCC(-1.028),
22 	  FLOAT2MFCC(-0.189), FLOAT2MFCC(-0.718), FLOAT2MFCC(-0.139),
23 	  FLOAT2MFCC(-0.121), FLOAT2MFCC(-0.365), FLOAT2MFCC(-0.139),
24 	  FLOAT2MFCC(-0.154), FLOAT2MFCC(0.041), FLOAT2MFCC(0.009), FLOAT2MFCC(-0.073)},
25 	{ FLOAT2MFCC(14.557), FLOAT2MFCC(-1.676), FLOAT2MFCC(-0.864),
26 	  FLOAT2MFCC(0.118), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.168),
27 	  FLOAT2MFCC(-0.069), FLOAT2MFCC(-0.503), FLOAT2MFCC(-0.013),
28 	  FLOAT2MFCC(0.007), FLOAT2MFCC(-0.056), FLOAT2MFCC(-0.075), FLOAT2MFCC(-0.237)},
29 	{ FLOAT2MFCC(14.665), FLOAT2MFCC(-1.498), FLOAT2MFCC(-0.582),
30 	  FLOAT2MFCC(0.209), FLOAT2MFCC(-0.487), FLOAT2MFCC(-0.247),
31 	  FLOAT2MFCC(-0.142), FLOAT2MFCC(-0.439), FLOAT2MFCC(0.059),
32 	  FLOAT2MFCC(-0.058), FLOAT2MFCC(-0.265), FLOAT2MFCC(-0.109), FLOAT2MFCC(-0.196)},
33 	{ FLOAT2MFCC(15.025), FLOAT2MFCC(-1.199), FLOAT2MFCC(-0.607),
34 	  FLOAT2MFCC(0.235), FLOAT2MFCC(-0.499), FLOAT2MFCC(-0.080),
35 	  FLOAT2MFCC(-0.062), FLOAT2MFCC(-0.554), FLOAT2MFCC(-0.209),
36 	  FLOAT2MFCC(-0.124), FLOAT2MFCC(-0.445), FLOAT2MFCC(-0.352), FLOAT2MFCC(-0.400)},
37 };
38 
39 int
main(int argc,char * argv[])40 main(int argc, char *argv[])
41 {
42 	feat_t *fcb;
43 	mfcc_t **in_feats, ***out_feats;
44 	int32 i, j, ncep;
45 
46 	/* Test "raw" features without concatenation */
47 	fcb = feat_init("13", CMN_NONE, 0, AGC_NONE, 1, 13);
48 
49 	in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t));
50 	out_feats = (mfcc_t ***)ckd_calloc_3d(6, 1, 13, sizeof(mfcc_t));
51 	ncep = 6;
52 	feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
53 
54 	for (i = 0; i < 6; ++i) {
55 		for (j = 0; j < 13; ++j) {
56 			printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
57 		}
58 		printf("\n");
59 	}
60 	feat_free(fcb);
61 	ckd_free(in_feats);
62 	ckd_free_3d(out_feats);
63 
64 	/* Test "raw" features with concatenation */
65 	fcb = feat_init("13:1", CMN_NONE, 0, AGC_NONE, 1, 13);
66 
67 	in_feats = (mfcc_t **)ckd_alloc_2d_ptr(6, 13, data, sizeof(mfcc_t));
68 	out_feats = (mfcc_t ***)ckd_calloc_3d(8, 1, 39, sizeof(mfcc_t));
69 	ncep = 6;
70 	feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
71 
72 	for (i = 0; i < 6; ++i) {
73 		for (j = 0; j < 39; ++j) {
74 			printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
75 		}
76 		printf("\n");
77 	}
78 	feat_free(fcb);
79 
80 	/* Test 1s_c_d_dd features */
81 	fcb = feat_init("1s_c_d_dd", CMN_NONE, 0, AGC_NONE, 1, 13);
82 	ncep = 6;
83 	feat_s2mfc2feat_live(fcb, in_feats, &ncep, 1, 1, out_feats);
84 
85 	for (i = 0; i < 6; ++i) {
86 		for (j = 0; j < 39; ++j) {
87 			printf("%.3f ", MFCC2FLOAT(out_feats[i][0][j]));
88 		}
89 		printf("\n");
90 	}
91 
92 	/* Verify that the deltas are correct. */
93 	for (i = 2; i < 4; ++i) {
94 		for (j = 0; j < 13; ++j) {
95 			if (fabs(MFCC2FLOAT(out_feats[i][0][13+j] -
96 					    (out_feats[i+2][0][j]
97 					     - out_feats[i-2][0][j]))) > 0.01) {
98 				printf("Delta mismatch in [%d][%d]\n", i, j);
99 				return 1;
100 			}
101 		}
102 	}
103 	feat_free(fcb);
104 	ckd_free(in_feats);
105 	ckd_free_3d(out_feats);
106 
107 	return 0;
108 }
109