Julius 4.2
マクロ定義 | 関数
plugin/calcmix.c

ガウス分布計算プラグインのサンプル [詳細]

#include <sent/stddefs.h>
#include <sent/hmm_calc.h>

ソースコードを見る。

マクロ定義

#define PLUGIN_TITLE   "Gaussian calculation plugin for Julius"
 Required for a file.
#define GPRUNE_OPT   "mycalc"

関数

int initialize ()
 読み込み時の初期化(任意)
int get_plugin_info (int opcode, char *buf, int buflen)
 プラグイン情報取得(必須)
void calcmix_get_optname (char *buf, int buflen)
 計算方法選択用オプションのための文字列を返す(必須)
void calcmix (HMMWork *wrk, HTK_HMM_Dens **g, int num, int *last_id, int lnum)
 ガウス分布計算関数
void calcmix_free (HMMWork *wrk)
 calcmix_init() で確保されたワークエリアを開放する.
boolean calcmix_init (HMMWork *wrk)
 計算用のワークエリアを確保する.

説明

ガウス分布計算プラグインのサンプル

このサンプルは julius のライブラリを使用します.

作者:
Akinobu Lee
日付:
Mon Aug 11 15:29:45 2008
Revision:
1.1

calcmix.c で定義されています。


マクロ定義

#define PLUGIN_TITLE   "Gaussian calculation plugin for Julius"

Required for a file.

Optional for a file

Required:

calcmix.c49 行で定義されています。

参照元 get_plugin_info().


関数

int initialize ( )

読み込み時の初期化(任意)

起動時,Julius がこのプラグインを読み込む際に最初に呼ばれる. -1 を返すと,このプラグイン全体が読み込まれなくなる. 実行可能性のチェックに使える.

戻り値:
0 on success, -1 on failure.

calcmix.c75 行で定義されています。

int get_plugin_info ( int  opcode,
char *  buf,
int  buflen 
)

プラグイン情報取得(必須)

このプラグインに関する情報を返す.与えられた opcode によって動作する.

  • 0 の場合,このプラグインファイルの名称を与えられたバッファに格納する

この関数は,Julius がこのプラグインを読み込んだ直後に呼ばれる.

引数:
opcode[in] 要求動作コード (現在 0 のみ実装)
buf[out] 値を格納するバッファ
buflen[in] buf の最大長
戻り値:
エラー時 -1, 成功時 0 を返す.エラーとして -1 を返した場合, このプラグイン全体は読み込まれない.

calcmix.c117 行で定義されています。

void calcmix_get_optname ( char *  buf,
int  buflen 
)

計算方法選択用オプションのための文字列を返す(必須)

Julius で起動時に "-gprune ここで返す値" と指定するとこのプラグイン が使用される.この関数では,上記の "-gprune" に与えるべき文字列を格 納して返す.返す文字は,システムの "-gprune" オプションにすでにある ものや,他のプラグインが使用しているものと同じでないこと.(もし同 じだった場合システム側が優先される)

この関数は,起動時のオプション解析時に何度か呼ばれる.

引数:
buf[out] 値を格納して返すバッファ
buflen[in] buf の最大長

calcmix.c162 行で定義されています。

void calcmix ( HMMWork wrk,
HTK_HMM_Dens **  g,
int  num,
int *  last_id,
int  lnum 
)

ガウス分布計算関数

この関数では,与えられた複数のガウス分布に対して入力ベクトルの 出力確率を求める.この関数が行うのは,複数のガウス分布それぞれの 出力確率の算出と格納のみであり,混合分布としての重み計算や addlog はこの関数が返ったあとに Julius 側で行われる.

入力ベクトルは wrk->OP_vec[] に格納されており,長さは wrk->OP_veclen である.ガウス分布定義は g[] に配列として複数渡され,その数は num である.

なお,last_id と lnum はこのガウス分布集合 g[] において直前の入力フ レームで計算されたものの id が入っている.Julius の内部処理用なので, 使わなくても差し支えない.

各ガウス分布に対する入力ベクトルの対数出力確率は,そのガウス分布の ID (0 から始まる配列の添え字) を wrk->OP_calced_id に,値を wrk->OP_calced_score に格納すること.また,実際に計算された ガウス分布の数を wrk->OP_calced_num に格納すること. (これは Gaussian pruning を想定した実装である)

以下は,pruning 等を行わない単純な出力確率計算を実装したものである. ガウス分布は対角共分散を仮定している.なお Julius では読み込み時に HTK でいうところの gconst 値はあらかじめ計算される.このため,計算時に 下記の dens->gconst のように利用できる.

引数:
wrk[i/o] HMM計算用ワークエリア
g[in] 出力確率を計算するガウス分布の列
num[in] g のガウス分布の数
last_id[in] 直前入力フレームで上位だったガウス分布のIDリスト, または内場合は NULL
lnum[in] last_id の長さ

calcmix.c227 行で定義されています。

void calcmix_free ( HMMWork wrk)

calcmix_init() で確保されたワークエリアを開放する.

引数:
wrk[i/o] HMM 計算用ワークエリア

calcmix.c281 行で定義されています。

boolean calcmix_init ( HMMWork wrk)

計算用のワークエリアを確保する.

ガウス分布計算用のワークエリアを確保する.下記にすでに書いてある分は, そのまま Julius の内部でも使用しているので,削らないこと.

この関数は最初に音響尤度計算インスタンスが作成されるときに呼び出される.

引数:
wrk[i/o] HMM 計算用ワークエリア
戻り値:
成功時 TRUE,失敗時 FALSE を返す.

calcmix.c314 行で定義されています。