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 + -
显示快捷键?