mrw_gmm.c
来自「LastWave」· C语言 代码 · 共 123 行
C
123 行
//// // File that implements GMM for MRW////#include "lastwave.h"#include "signals.h"#define EULER .577215664901static LWFLOAT lntau;static SIGNAL m = NULL;static SIGNAL m2 = NULL;static LWFLOAT var2;static SIGNAL theLags = NULL;/* The GMM Vector */#define GMMV_Var2 0#define GMMV_VarLn -1#define GMMV_AutoCorLn 1 /* !!!!!!! Must be the last one and must be right after GMMV_VarLn */ /* The Parameters */#define GMMP_Sigma2 0#define GMMP_Lambda2 1#define GMMP_LnT 2#define GMMP_Last 3/* Ln epsilon theoretical variance */static LWFLOAT VarianceLnEps(SIGNAL params){ return(M_PI*M_PI/8);}/* Ln epsilon theoretical order 4 centered moment */static LWFLOAT M4LnEps(SIGNAL params){ return(M_PI*M_PI*M_PI*M_PI*7./64.);}/* Ln epsilon theoretical order 3 centered moment */static LWFLOAT M3LnEps(SIGNAL params){ return(-2.1036);}/* Mean of epsilon^2 * (centered_ln(epsilon)) */static LWFLOAT MeanEps2lnEps(SIGNAL params){ return(1.0);}/* Mean of epsilon^2 * (centered_ln(epsilon)^2) */static LWFLOAT MeanEps2lnEps2(SIGNAL params){ return(1.2337);}/* omega theoretical auto-correlation */// ??????? A CHANGER // LWFLOAT CovLnSqrtVol (int m1, int n1, int m2, int n2, LWFLOAT lambda2, LWFLOAT T)static LWFLOAT AutoCovarianceOm(SIGNAL params,int lag){ LWFLOAT lambda2 = params->Y[GMMP_Lambda2]; LWFLOAT lnT = params->Y[GMMP_LnT]; lag = (lag<0 ? -lag : lag); switch(lag) { case 0: return(lambda2*(lnT-lntau+1.5)); case 1: return(lambda2*( lnT-lntau+1.5 -.5*(lag+1)*(lag+1)*log(lag+1) )); default: if (lag>=exp(lnT)) return(0); return(lambda2*( lnT-lntau+1.5+lag*lag*log(lag) -.5*(lag-1)*(lag-1)*log(lag-1) -.5*(lag+1)*(lag+1)*log(lag+1) )); } }/* log(mrw) theoretical auto-correlation */// ????? A CHANGER// LWFLOAT CovLnX (int n, int m, LWFLOAT lambda2, LWFLOAT T)static LWFLOAT AutoCovarianceLn(SIGNAL params,int lag){ if (lag != 0) return(AutoCovarianceOm(params,lag)); else return(AutoCovarianceOm(params,lag)+VarianceLnEps(params));}/* * log(mrw) theoretical gradient autocorrelation according to parameter number i */static LWFLOAT DAutoCovarianceLn(SIGNAL params, int lag, int i){ LWFLOAT lambda2 = params->Y[GMMP_Lambda2]; LWFLOAT lnT = params->Y[GMMP_LnT]; switch (i) { case GMMP_Sigma2: return(0); case GMMP_Lambda2: switch(lag) { case 0: return(lnT-lntau+1.5); default: return(AutoCovarianceLn(params,lag)/lambda2); } case GMMP_LnT: // ???? A CHANGER Pas tout
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?