1
/* ====================================================================
2
* Copyright (c) 1994-2000 Carnegie Mellon University. All rights
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in
14
* the documentation and/or other materials provided with the
17
* This work was supported in part by funding from the Defense Advanced
18
* Research Projects Agency and the National Science Foundation of the
19
* United States of America, and the CMU Sphinx Speech Consortium.
21
* THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
22
* ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
25
* NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33
* ====================================================================
36
/*********************************************************************
41
* Initialize one Gaussian mixtures for each context independent
46
*********************************************************************/
50
#include <sphinxbase/prim_type.h>
51
#include <sphinxbase/ckd_alloc.h>
53
#include <s3/cvt2triphone.h>
54
#include <s3/mk_sseq.h>
59
static int32 did_warn = 0;
63
ts_cnt(uint32 *cnt, /* observation counts */
65
model_def_t *mdef, /* model definitions */
67
uint16 *seg, /* Viterbi (CI phone,state) pairs for all frames */
70
acmod_id_t *phone, /* CI phone sequence (already validated) */
74
acmod_set_t *acmod_set;
75
uint32 *ci_sseq = NULL;
79
acmod_set = mdef->acmod_set;
81
/* make a tied state id sequence from the state segmentation and the
83
ci_sseq = mk_sseq(seg, n_frame, phone, n_phone, mdef);
84
for (i = 0; i < n_frame; i++) {
88
if (cvt2triphone(acmod_set, phone, btw_mark, n_phone) != S3_SUCCESS) {
90
E_WARN("Conversion from CI phones to triphones failed\n");
96
/* make a tied state id sequence from the state segmentation and the
98
sseq = mk_sseq(seg, n_frame, phone, n_phone, mdef);
100
for (i = 0; i < n_frame; i++) {
101
if (ci_sseq[i] != sseq[i])