⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 forward.c

📁 隐马尔科夫模型的C代码
💻 C
字号:
/***      Author: Tapas Kanungo, kanungo@cfar.umd.edu**      Date:   15 December 1997**      File:   forward.c**      Purpose: Foward algorithm for computing the probabilty **		of observing a sequence given a HMM model parameter.**      Organization: University of Maryland****      $Id: forward.c,v 1.2 1998/02/19 12:42:31 kanungo Exp kanungo $*/#include <stdio.h>#include "hmm.h"static char rcsid[] = "$Id: forward.c,v 1.2 1998/02/19 12:42:31 kanungo Exp kanungo $";void Forward(HMM *phmm, int T, int *O, double **alpha, double *pprob){        int     i, j;   /* state indices */        int     t;      /* time index */         double sum;     /* partial sum */         /* 1. Initialization */         for (i = 1; i <= phmm->N; i++)                alpha[1][i] = phmm->pi[i]* phmm->B[i][O[1]];         /* 2. Induction */         for (t = 1; t < T; t++) {                for (j = 1; j <= phmm->N; j++) {                        sum = 0.0;                        for (i = 1; i <= phmm->N; i++)                                sum += alpha[t][i]* (phmm->A[i][j]);                         alpha[t+1][j] = sum*(phmm->B[j][O[t+1]]);                }        }         /* 3. Termination */        *pprob = 0.0;        for (i = 1; i <= phmm->N; i++)                *pprob += alpha[T][i]; }void ForwardWithScale(HMM *phmm, int T, int *O, double **alpha, 	double *scale, double *pprob)/*  pprob is the LOG probability */{	int	i, j; 	/* state indices */	int	t;	/* time index */	double sum;	/* partial sum */	/* 1. Initialization */	scale[1] = 0.0;		for (i = 1; i <= phmm->N; i++) {		alpha[1][i] = phmm->pi[i]* (phmm->B[i][O[1]]);		scale[1] += alpha[1][i];	}	for (i = 1; i <= phmm->N; i++) 		alpha[1][i] /= scale[1]; 		/* 2. Induction */	for (t = 1; t <= T - 1; t++) {		scale[t+1] = 0.0;		for (j = 1; j <= phmm->N; j++) {			sum = 0.0;			for (i = 1; i <= phmm->N; i++) 				sum += alpha[t][i]* (phmm->A[i][j]); 			alpha[t+1][j] = sum*(phmm->B[j][O[t+1]]);			scale[t+1] += alpha[t+1][j];		}		for (j = 1; j <= phmm->N; j++) 			alpha[t+1][j] /= scale[t+1]; 	}	/* 3. Termination */	*pprob = 0.0;	for (t = 1; t <= T; t++)		*pprob += log(scale[t]);	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -