14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * swicms.h * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef __SWICMS_H__ 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define __SWICMS_H__ 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include"all_defs.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include"sizes.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include"fronttyp.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include"pre_desc.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define DEBUG_SWICMS 0 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_CACHED_FRAMES 800 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SWICMS_CACHE_RESOLUTION_DEFAULT 8 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define SWICMS_CACHE_SIZE_DEFAULT 100 /* equals #frames/resolution */ 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * This is used for casting in debugger, just type (imelvec*)tmn. 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata vec[MAX_CHAN_DIM]; 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectimelvec; 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/** 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Does channel normalization without using fine recognition segmenation. It remembers the 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * frames of speech and uses that as a channel mean for the next utterance. A forget_factor 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * is used to weigh the new speech mean estimate with an older one. 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata tmn [MAX_CHAN_DIM]; /* target mean */ 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata cmn [MAX_CHAN_DIM]; /* channel mean */ 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata lda_tmn [MAX_CHAN_DIM]; /* target mean */ 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata lda_cmn [MAX_CHAN_DIM]; /* channel mean */ 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata adjust[MAX_CHAN_DIM]; /* target less channel */ 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int is_valid; 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int forget_factor; /* in frames, mass of cmn average */ 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int sbindex; /* speech to background index 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 100 -> use only speech to calculate CMN 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 000 -> use only background to calculate CMN 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 050 -> use half/half .. 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project all numbers in between are acceptable */ 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_frames_in_cmn; /* num frames used to estimate cmn (or lda_cmn) */ 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* for in-utterance channel normalization */ 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project struct { 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int forget_factor2; /* cmn is given this weight to start off */ 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int disable_after; /* we disable in-utt cms after this many fr*/ 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int enable_after; /* we enable in-utt cms after this many fr*/ 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_bou_frames_to_skip; /* don't start accum 'til this many frames */ 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_frames_since_bou; /* counter for above, bou=begin-of-utt */ 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_frames_in_accum; /* number of frames in accum */ 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata accum[MAX_CHAN_DIM]; /* accumulates frames of the current utt */ 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } inutt; 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int cached_num_frames; /* we cache frames, until recognition is done 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project and can calculate speech mean from these */ 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int cache_resolution; /* we'll avg this many frames per section */ 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata cached_sections[SWICMS_CACHE_SIZE_DEFAULT][MAX_CHAN_DIM]; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /*const*/ preprocessed* _prep; 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectswicms_norm_info; 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint swicms_init(swicms_norm_info* swicms); 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint swicms_cache_frame(swicms_norm_info* swicms, imeldata* frame, int dimen); 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint apply_channel_normalization_in_swicms(swicms_norm_info *swicms, 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project imeldata* oframe, imeldata* iframe, 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int dimen); 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint swicms_lda_process(swicms_norm_info* swicms, preprocessed* prep); 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint swicms_update(swicms_norm_info* swicms, int speech_start_frame, int speech_end_frame); 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode swicms_set_cmn(swicms_norm_info *swicms, const LCHAR *new_cmn_params ); 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectESR_ReturnCode swicms_get_cmn(swicms_norm_info *swicms, LCHAR *cmn_params, size_t* len ); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if DEBUG_SWICMS 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint swicms_compare(swicms_norm_info* swicms, imeldata* imelda_adjust); 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint swicms_dump_stats(swicms_norm_info* swicms); 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#else 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define swicms_compare(swicms,ia) 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define swicms_dump_stats(swicms) 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 108