summaryrefslogtreecommitdiff
path: root/src/signalProcessing/levin/dlevina.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/signalProcessing/levin/dlevina.c')
-rw-r--r--src/signalProcessing/levin/dlevina.c186
1 files changed, 0 insertions, 186 deletions
diff --git a/src/signalProcessing/levin/dlevina.c b/src/signalProcessing/levin/dlevina.c
deleted file mode 100644
index 48388689..00000000
--- a/src/signalProcessing/levin/dlevina.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- * Copyright (C) 2008 - INRIA - Arnaud TORSET
- *
- * This file must be used under the terms of the CeCILL.
- * This source file is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at
- * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- */
-
-#include "levin.h"
-#include "levinUtils.h"
-#include "matrixInversion.h"
-#include "matrixMultiplication.h"
-#include "zeros.h"
-#include <malloc.h>
-#include <stdio.h>
-
-void dlevina (int n, double* cov, int lCov, int cCov, double* la, double* sig, double* lb){
-/*
- [la and lb]
- In Scilab, the return value la is a list of n elements. Each element is a matrix cCov*cCov,
- and each element of the matrix is a polynome whose degree is n, so the polynome got n+1 elements.
- The greatest size of a element of the list is : (n+1)*cCov*cCov.
-
- Here, la is a matrix which contain all elements of the list, its size is n*(n+1)*cCov*cCov. We take the
- maximum size for all elements.
- The first element of the list is the first (n+1)*cCov*cCov elements of la, namely la[0] to la[(n+1)*cCov*cCov-1].
- The second element of the list is the elements of la between (n+1)*cCov*cCov and 2*(n+1)*cCov*cCov,namely la[(n+1)*cCov*cCov]
- to la[2*(n+1)*cCov*cCov-1],...
-
- Enter now in a element of the list. Take the first for example.
- This is, like said before, a cCov*cCov matrix. In la, it contains (n+1)*cCov*cCov. Each element of the matrix contains (n+1)
- elements. As it's stocked by columns, if we represent a matrix like [a c], for example, the elements 0 to n of la represent
- [b d]
- a, the elements (n+1) to 2(n+1)-1 represent b,...
-
- To finish, look at the elements of the matrix, the polynomes. The coefficients of the polynomes are stocked in increasing order.
-
- For example, if la in Scilab is : list( [3+2x 5-2x ])
- ( [-5+x -2+4x])
- ([3+x-x^2 -1+2x ])
- ([1+6x+3x^2 -2x-x^2 ])
- the result in dlevin will be :
- -la is a table of 2*3*2*2 elements(n=2,cCov=2);
- -la[]={3,2,0, -5,1,0, 5,-2,0, -2,4,0, 3,1,-1, 1,6,3 -1,2,0, 0,-2,-1}.
-
- It's the same for lb.
-
- [sig]
- In Scilab, the return value sig is a list of n elements. Each element is a matrix cCov*cCov,
- and each element of the matrix is a scalar, so 1 element.
- The greatest size of a element of the list is : cCov*cCov.
-
- Let see an example so know how it's stocked.
- In Scilab, if sig is : list( [1 3])
- ( [2 4])
- ( [5 7])
- ( [6 8])
- the result in dlevin will be :
- -sig={1,2, 5,6, 3,4, 7,8}.
- It's as if we put the matrix the ones under the others and we take the first column, the second,...
-
- >>>CAREFUL<<<
- la/lb and sig are stored differently
-
-
-*/
-
-
- int i=0;
-
-
-/*version ISO C99
- double tmp1[n*cCov*cCov], tmp2[n*cCov*cCov];
- double sig1[cCov], gam[cCov];
- double R1[n*cCov],R2[n*cCov],R3[n*cCov],R4[n*cCov];
-*/
-/*version pas ISO C99 */
- double *tmp1, *tmp2;
- double *sig1, *gam;
- double *R1,*R2,*R3,*R4;
-
- /* FIXME : malloc here */
-
- tmp1=(double *)malloc((unsigned int)((n+1)*cCov*cCov)*sizeof(double));
- tmp2=(double *)malloc((unsigned int)((n+1)*cCov*cCov)*sizeof(double));
- sig1=(double *)malloc((unsigned int)(cCov*cCov)*sizeof(double));
- gam=(double *)malloc((unsigned int)(cCov*cCov)*sizeof(double));
- R1=(double *)malloc((unsigned int)(n*cCov*cCov)*sizeof(double));
- R2=(double *)malloc((unsigned int)(n*cCov*cCov)*sizeof(double));
- R3=(double *)malloc((unsigned int)(n*cCov*cCov)*sizeof(double));
- R4=(double *)malloc((unsigned int)(n*cCov*cCov)*sizeof(double));
-
-
-
- /*
- * Initializations
- * */
- dzerosa(sig,n*cCov*cCov,1);
- dzerosa(la,n*(n+1)*cCov*cCov,1);
- dzerosa(lb,n*(n+1)*cCov*cCov,1);
-
- /*equal to eye(la) and eye(lb)
- but we can't use eye cause to the indexation*/
- for (i=0;i<cCov;i++){
- la[i*((n+1)*(cCov+1))]=1;
- lb[i*((n+1)*(cCov+1))]=1;
- }
-
- dr1(cov,lCov,cCov,n,R1);
- dr2(cov,lCov,cCov,n,R2);
- dr3(cov,lCov,cCov,n,R3);
- dr4(cov,lCov,cCov,n,R4);
-
-/* case i=0 */
-
-
- /*computation of sig */
- dlevinmul(la,R4,n,cCov,0,sig,n*cCov,0,'d');
- /*computation of gam1 */
- dlevinmul(lb,R2,n,cCov,0,gam,cCov,0,'u');
- /*computation of c1*r1 */
- dlevinmul(la,R1,n,cCov,0,tmp1,cCov,0,'u');
- /*computation of inv(gam1) */
- dinverma(gam,sig1,cCov);
- /*computation of k1 = c1*r1*inv(gam1) */
- dmulma(tmp1,cCov,cCov,sig1,cCov,cCov,tmp2);
- /*computation of k1*lb */
- dlevinmul2(tmp2,lb,0,n,cCov,tmp1);
- /*computation of k1*lb*z */
- ddecalage(tmp1,0,n,cCov,tmp1);
- /*computation of la */
- dlevinsub(la,tmp1,n,cCov,0,0,la);
-
- /*computation of sig1 (we extract the value if sig at time 0)*/
- dlevinsig(sig,0,cCov,n*cCov,sig1);
- /*computation of c2*r3 */
- dlevinmul(lb,R3,n,cCov,0,tmp1,cCov,0,'d');
- /*computation of inv(sig1)*/
- dinverma(sig1,gam,cCov);
- /*computation of k2 = c2*r3*inv(sig1) */
- dmulma(tmp1,cCov,cCov,gam,cCov,cCov,tmp2);
- /*computation of k2*la (here it's lb cause la have been modified
- and the precedent values hadn't been saved)*/
- dlevinmul2(tmp2,lb,0,n,cCov,tmp1);
- /*computation of lb*z */
- ddecalage(lb,0,n,cCov,lb);
- /*computation of lb */
- dlevinsub(lb,tmp1,n,cCov,0,0,lb);
-
-
- for (i=1;i<n;i++){
- dlevinmul(la,R4,n,cCov,i,sig,n*cCov,1,'d');
- dlevinmul(lb,R2,n,cCov,i,gam,cCov,0,'u');
- dlevinmul(la,R1,n,cCov,i,tmp1,cCov,0,'u');
- dinverma(gam,sig1,cCov);
- dmulma(tmp1,cCov,cCov,sig1,cCov,cCov,tmp2);
-
- dlevinmul2(tmp2,lb,i-1,n,cCov,tmp1);
- ddecalage(tmp1,0,n,cCov,tmp1);
- dlevinsub(la,tmp1,n,cCov,i,i,la);/*a*/
-
- /*computation of sig1 (we extract the value if sig at time i)*/
- dlevinsig(sig,i,cCov,n*cCov,sig1);
- dlevinmul(lb,R3,n,cCov,i,tmp1,cCov,0,'d');
- dinverma(sig1,gam,cCov);
- dmulma(tmp1,cCov,cCov,gam,cCov,cCov,tmp2);
- /*computation of k2*la (now it's la at time (i-1))*/
- dlevinmul2(tmp2,la,i-1,n,cCov,tmp1);
- ddecalage(lb,(i-1)*(n+1)*cCov*cCov,n,cCov,tmp2);
- dlevinsub(tmp2,tmp1,n,cCov,0,i,lb);
- }
-
-
- free(R4);
- free(R3);
- free(R2);
- free(R1);
- free(gam);
- free(sig1);
- free(tmp2);
- free(tmp1);
-}