summaryrefslogtreecommitdiff
path: root/src/c
diff options
context:
space:
mode:
Diffstat (limited to 'src/c')
-rw-r--r--src/c/elementaryFunctions/Trigonometry/sinc/zsinca.c10
-rw-r--r--src/c/linearAlgebra/includes/svd.h2
-rw-r--r--src/c/linearAlgebra/interfaces/int_sva.h2
-rw-r--r--src/c/linearAlgebra/interfaces/int_svd.h10
-rw-r--r--src/c/linearAlgebra/sva/dsvaa.c18
-rw-r--r--src/c/linearAlgebra/svd/dsvda.c82
-rw-r--r--src/c/signalProcessing/%sn/zmodsna.c143
-rw-r--r--src/c/signalProcessing/amell/amell.h27
-rw-r--r--src/c/signalProcessing/amell/damella.c23
-rw-r--r--src/c/signalProcessing/amell/damells.c57
-rw-r--r--src/c/signalProcessing/amell/int_amell.h18
-rw-r--r--src/c/signalProcessing/ell1mag/dell1maga.c40
-rw-r--r--src/c/signalProcessing/ell1mag/ell1mag.h28
-rw-r--r--src/c/signalProcessing/ell1mag/int_ell1mag.h18
-rw-r--r--src/c/signalProcessing/ell1mag/zell1maga.c40
-rw-r--r--src/c/signalProcessing/filt_sinc/dfilt_sincs.c11
-rw-r--r--src/c/signalProcessing/includes/amell.h28
-rw-r--r--src/c/signalProcessing/includes/ell1mag.h29
-rw-r--r--src/c/signalProcessing/interfaces/int_amell.h19
-rw-r--r--src/c/signalProcessing/interfaces/int_ell1mag.h19
-rw-r--r--src/c/signalProcessing/interfaces/int_modsn.h2
-rw-r--r--src/c/signalProcessing/transforms/dct/cdcta.c99
-rw-r--r--src/c/signalProcessing/transforms/dct/zdcta.c121
-rw-r--r--src/c/signalProcessing/transforms/idct/cidcta.c43
-rw-r--r--src/c/signalProcessing/transforms/idct/zidcta.c43
-rw-r--r--src/c/string/ascii/gasciia.c2
-rw-r--r--src/c/string/disp/ddispa.c2
-rw-r--r--src/c/string/strcspn/gstrcspna.c4
28 files changed, 814 insertions, 126 deletions
diff --git a/src/c/elementaryFunctions/Trigonometry/sinc/zsinca.c b/src/c/elementaryFunctions/Trigonometry/sinc/zsinca.c
index ad7d095b..1f6cf9ba 100644
--- a/src/c/elementaryFunctions/Trigonometry/sinc/zsinca.c
+++ b/src/c/elementaryFunctions/Trigonometry/sinc/zsinca.c
@@ -14,18 +14,22 @@
#include "sinc.h"
#include "sin.h"
#include "doubleComplex.h"
+#include "division.h"
void zsinca(doubleComplex* sample,int size,doubleComplex* oup)
{
int j;
+ double r,i;
for(j=0;j<size;j++)
{
- if(sample[j]==0)
+ r=zreals(sample[j]);
+ i=zimags(sample[j]);
+ if(r==0 && i==0)
{
- oup[j]==DoubleComplex(1,0);
+ oup[j]=DoubleComplex(1,0);
}
else
{
- oup[j]=zsins(sample[j])/sample[j];
+ oup[j]=zrdivs(zsins(sample[j]),sample[j]);
}
}
}
diff --git a/src/c/linearAlgebra/includes/svd.h b/src/c/linearAlgebra/includes/svd.h
index 260b87fb..dea681fc 100644
--- a/src/c/linearAlgebra/includes/svd.h
+++ b/src/c/linearAlgebra/includes/svd.h
@@ -18,7 +18,7 @@
extern "C" {
#endif
-void dsvda(double *in1,int row,int col,double in2,double nout,double *out1, \
+double dsvda(double tol,double *in1,int row,int col,double in2,double nout,double *out1, \
double *out2,double *out3);
void zsvda(doubleComplex *in1,int row,int col,int in2,int nout, doubleComplex *out1,\
doubleComplex *out2,doubleComplex *out3);
diff --git a/src/c/linearAlgebra/interfaces/int_sva.h b/src/c/linearAlgebra/interfaces/int_sva.h
index 4a2ec56b..f1f8260a 100644
--- a/src/c/linearAlgebra/interfaces/int_sva.h
+++ b/src/c/linearAlgebra/interfaces/int_sva.h
@@ -18,7 +18,7 @@ extern "C" {
#endif
#define d2svad2d2d2(in1,size,out1,out2,out3) dsvaa(1,in1,size[0],size[1],0,out1,out2,out3);
-#define d2d0svad2d2d2(in1,size1,in2,size2,out1,out2,out3) dsvaa(2,in1,size1[0],size1[1],in2,out1,out2,out3);
+#define d2d0svad2d2d2(in1,size1,in2,out1,out2,out3) dsvaa(2,in1,size1[0],size1[1],in2,out1,out2,out3);
#ifdef __cplusplus
} /* extern "C" */
diff --git a/src/c/linearAlgebra/interfaces/int_svd.h b/src/c/linearAlgebra/interfaces/int_svd.h
index 449ee741..8f40bffe 100644
--- a/src/c/linearAlgebra/interfaces/int_svd.h
+++ b/src/c/linearAlgebra/interfaces/int_svd.h
@@ -17,9 +17,13 @@
extern "C" {
#endif
-#define d2svdd2(in1,size1,out1) dsvda(in1,size1[0],size1[1],0,1,out1,NULL,NULL)
-#define d2g2svdd2d2d2(in1,size1,in2,size2,out1,out2,out3) dsvda(in1,size1[0],size1[1],1,3,out1,out2,out3);
-#define d2svdd2d2d2(in1,size1,out1,out2,out3) dsvda(in1,size1[0],size1[1],0,3,out1,out2,out3);
+#define d2svdd2(in1,size1,out1) dsvda(0,in1,size1[0],size1[1],0,1,out1,NULL,NULL)
+#define d2g2svdd2d2d2(in1,size1,in2,size2,out1,out2,out3) dsvda(0,in1,size1[0],size1[1],1,3,out1,out2,out3);
+#define d2svdd2d2d2(in1,size1,out1,out2,out3) dsvda(0,in1,size1[0],size1[1],0,3,out1,out2,out3);
+
+#define d2svdd2d2d2d0(in1,size1,out1,out2,out3) dsvda(0,in1,size1[0],size1[1],0,4,out1,out2,out3);
+#define d2d0svdd2d2d2d0(in1,size1,tol,out1,out2,out3) dsvda(tol,in1,size1[0],size1[1],0,4,out1,out2,out3);
+
#define z2svdz2(in1,size1,out2) zsvda(in1,size1[0],size1[1],0,1,NULL,out2,NULL);
#define z2g2svdz2z2z2(in1,size1,in2,size2,out1,out2,out3) zsvda(in1,size1[0],size1[1],1,3,out1,out2,out3);
#define z2svdz2z2z2(in1,size1,out1,out2,out3) zsvda(in1,size1[0],size1[1],0,3,out1,out2,out3);
diff --git a/src/c/linearAlgebra/sva/dsvaa.c b/src/c/linearAlgebra/sva/dsvaa.c
index ee27eef7..b7d07d8c 100644
--- a/src/c/linearAlgebra/sva/dsvaa.c
+++ b/src/c/linearAlgebra/sva/dsvaa.c
@@ -33,14 +33,14 @@ void dsvaa(int ninp,double *in1,int row,int col,double in2,double *out1, \
/* Calculation of svd of a given matrix */
double *U,*S,*V;
- U = (double *)malloc((double)row*Min(row,col)*sizeof(double));
- S = (double *)malloc((double)Min(row,col)*Min(row,col)*sizeof(double));
- V = (double *)malloc((double)col*Min(row,col)*sizeof(double));
+ U = (double *)malloc((double)row*min(row,col)*sizeof(double));
+ S = (double *)malloc((double)min(row,col)*min(row,col)*sizeof(double));
+ V = (double *)malloc((double)col*min(row,col)*sizeof(double));
- dsvda(in1,M,N,1,3,U,S,V);
+ dsvda(0,in1,M,N,1,3,U,S,V);
if (ninp == 1){ /* [u,s,v] = sva(A) when input is only matrix */
- tol = Max(row,col)*S[0]*eps;
+ tol = max(row,col)*S[0]*eps;
rk = 0;
for(i=0;i<col;i++){
if(S[i+i*row] > tol){
@@ -52,7 +52,7 @@ void dsvaa(int ninp,double *in1,int row,int col,double in2,double *out1, \
tol = in2;
if(tol > 1){
rk = tol;
- if(rk > Min(row,col)){
+ if(rk > min(row,col)){
printf("ERROR: Wrong value for input argument !");
out1 = NULL;
out2 = NULL;
@@ -70,20 +70,20 @@ void dsvaa(int ninp,double *in1,int row,int col,double in2,double *out1, \
}
}
arow = M;
- acol = Min(M,N);
+ acol = min(M,N);
for(i=0;i<arow;i++){
for(j=0;j<rk;j++){
out1[i+j*row]=U[i+j*arow];
}
}
- arow = Min(M,N);
+ arow = min(M,N);
for(i=0;i<rk;i++){
for(j=0;j<rk;j++){
out2[i+j*(int)rk] = S[i+j*arow];
}
}
arow = N;
- acol = Min(M,N);
+ acol = min(M,N);
for(i=0;i<arow;i++){
for(j=0;j<rk;j++){
out3[i+j*arow] = V[i+j*arow];
diff --git a/src/c/linearAlgebra/svd/dsvda.c b/src/c/linearAlgebra/svd/dsvda.c
index e6af3008..c3bcfc29 100644
--- a/src/c/linearAlgebra/svd/dsvda.c
+++ b/src/c/linearAlgebra/svd/dsvda.c
@@ -27,26 +27,40 @@ int max(int a,int b);
extern double dgesvd_(char*,char*,int*,int*,double*,int*,double*,double*,int*,\
double*,int*,double *,int*,int*);
+#define eps 2.22044604925e-16 /* pow(2,-52) */
+
/* DGESVD computes the singular value decomposition (SVD) of a real
M-by-N matrix A, optionally computing the left and/or right singular
vectors. The SVD is written
A = U * SIGMA * transpose(V) */
-void dsvda(double *in1,int row,int col,double in2,double nout,double *out1, \
- double *out2,double *out3){
+/*Function support -
+
+s=svd(X)
+[U,S,V]=svd(X)
+[U,S,V]=svd(X,0) (obsolete)
+[U,S,V]=svd(X,"e")
+[U,S,V,rk]=svd(X [,tol])
+*/
+
+double dsvda(double tol,double *in1,int row,int col,double in2,double nout,double *out1, \
+ double *out2,double *out3){
+
char JOBU,JOBVT;
- int j,k;
+ int i,j,k;
int LDU=1; /*Leading Dimension of U */
int LDVT=1; /*Leading Dimension of VT */
int M = row;
int N = col;
double *buf;
double *S,*U,*VT;
- double *WORK;
+ double *WORK;
- if((nout > 1 && in2 == 1) && (M != N)){ /* [U,S,VT] = svd(x,'e') */
+ int rk; /*Fourth output if needed */
+
+ /*if((nout > 1 && in2 == 1) && (M != N)){ // [U,S,VT] = svd(x,'e')
if(M > N){
JOBU = 'S';
JOBVT = 'A';
@@ -61,7 +75,7 @@ void dsvda(double *in1,int row,int col,double in2,double nout,double *out1, \
U = (double*) malloc((double) (LDU)*min(M,N)*sizeof(double));
VT = (double*) malloc((double) (LDVT)*N*sizeof(double));
}
- else if(nout > 1){ /* [U,S,VT = svd(x)] */
+ else */if(nout > 1){ /* [U,S,VT = svd(x)] */
JOBU = 'A'; /*If JOBU = 'A', U contains the M-by-M orthogonal matrix U */
JOBVT = 'A'; /*JOBVT = 'A': all N rows of V**T are returned in the array VT;*/
LDU = M;
@@ -74,7 +88,7 @@ void dsvda(double *in1,int row,int col,double in2,double nout,double *out1, \
JOBVT = 'N';
}
int LDA = max(1,M);
-
+
/* Making a copy of input matrix */
buf = (double*) malloc((double)M*N*sizeof(double));
memcpy(buf,in1,M*N*sizeof(double));
@@ -100,19 +114,63 @@ void dsvda(double *in1,int row,int col,double in2,double nout,double *out1, \
if(j == k) *((out2+j*(min(M,N)))+k) = *(S+j);
else *((out2+j*(min(M,N)))+k) = 0;
}
- }
- dtransposea(VT,LDVT,N,out3);
+ }
+
+ //dtransposea(VT,LDVT,N,out3);
+ /*As there is some patch of error in SVD, these lines are added */
+
+ for(j=1;j<=N;j++){
+ for(i=j;i<=N;i++){
+ *(out3+i+(j-1)*N-1) = VT[j+(i-1)*N-1];
+ *(out3+j+(i-1)*N-1) = VT[i+(j-1)*N-1];
+ }
+ }
+ /*for(i=0;i<N;i++){
+ for(j=0;j<N;j++){
+ printf("%lf ",VT[i*row+j]);
+ }
+ printf("\n");
+ }*/
}
else{
- memcpy(out1,U,LDU*min(row,col)*sizeof(double));
+ memcpy(out1,U,M*min(M,N)*sizeof(double));
for(j=0;j<min(M,N);j++){
for(k=0;k<min(M,N);k++){
if(j == k) *((out2+j*(min(M,N)))+k) = *(S+j);
else *((out2+j*(min(M,N)))+k) = 0;
}
}
- dtransposea(VT,LDVT,N,out3);
- }
+ //dtransposea(VT,LDVT,N,out3);
+ /*As there is some patch of error in DGESVD, these lines are added */
+ /* out3 first taken in some array then will be copied from it. */
+ double *outV;
+ outV = (double *)malloc(N*N*sizeof(double));
+ for(j=1;j<=N;j++){
+ for(i=j;i<=N;i++){
+ *(outV+i+(j-1)*N-1) = VT[j+(i-1)*N-1];
+ *(outV+j+(i-1)*N-1) = VT[i+(j-1)*N-1];
+ }
+ }
+
+ for(j=0;j<min(M,N)*N;j++){
+ *(out3+j) = *(outV+j);
+ }
+ }
+
+ /* From the fortran file of scilab code - if(tol.eq.0.0d0) tol=dble(max(M,N))*eps*stk(lSV) */
+ if(tol == 0){
+ tol = (double)max(M,N)*eps*S[0];
+ }
+ if(nout == 4){ /*[U,S,VT,rk] = svd(X,tol) where tol - tolerance*/
+ rk = 0;
+ for(i=0;i<min(M,N);i++){
+ if(S[i] > tol){
+ rk = i+1;
+ }
+ }
+ return rk;
+ }
+ return 0;
}
int min(int a,int b){
diff --git a/src/c/signalProcessing/%sn/zmodsna.c b/src/c/signalProcessing/%sn/zmodsna.c
index 33052a32..85bc0c16 100644
--- a/src/c/signalProcessing/%sn/zmodsna.c
+++ b/src/c/signalProcessing/%sn/zmodsna.c
@@ -13,12 +13,153 @@
#include<math.h>
#include "modsn.h"
#include "doubleComplex.h"
+#define CA 0.0003
+
+
+doubleComplex zmodsnsproto(doubleComplex uu,double emmc,doubleComplex* sni)
+{
+ doubleComplex ans;
+ double uur,uui;
+ uur=zreals(uu);
+ uui=zimags(uu);
+ double sr,cr,dr;
+ //Performing Elliptic Function operation for the real values
+ double a1,b1,c1,d1,emc1,u1;
+ double em1[14],en1[14];
+ int i1,ii1,l1,bo1;
+ emc1=1-emmc;
+ u1=uur;
+ if(emc1)
+ {
+ bo1=(emc1<0.0);
+ if(bo1)
+ {
+ d1=1.0-emc1;
+ emc1/=-1.0/d1;
+ u1*=(d1=sqrt(d1));
+ }
+ a1=1.0;
+ dr=1.0;
+ for(i1=1;i1<=13;i1++)
+ {
+ l1=i1;
+ em1[i1]=a1;
+ en1[i1]=(emc1=sqrt(emc1));
+ c1=0.5*(a1+emc1);
+ if(fabs(a1-emc1)<=CA*a1)break;
+ emc1*=a1;
+ a1=c1;
+ }
+ u1*=c1;
+ sr=sin(u1);
+ cr=cos(u1);
+ if(sr)
+ {
+ a1=cr/sr;
+ c1*=a1;
+ for(ii1=l1;ii1>=1;ii1--)
+ {
+ b1=em1[ii1];
+ a1*=c1;
+ c1*=dr;
+ dr=(en1[ii1]+a1)/(b1+a1);
+ a1=c1/b1;
+ }
+ a1=1.0/sqrt(c1*c1+1.0);
+ sr=(sr>=0.0?a1:-a1);
+ cr=c1*(sr);
+ }
+ if(bo1)
+ {
+ a1=dr;
+ dr=cr;
+ cr=a1;
+ sr/=d1;
+ }
+ }
+ else
+ {
+ cr=1.0/cosh(u1);
+ dr=cr;
+ sr=tanh(u1);
+ }
+ ////////////////////////////////////////////////////////////////
+ double si,ci,di;
+ //Performing Elleptic Function operation for the imaginary values
+ double a,b,c,d,emc,u;
+ double em[14],en[14];
+ int i,ii,l,bo;
+ //double s1,c1,d1;
+ emc=emmc;
+ u=uui;
+ if(emc)
+ {
+ bo=(emc<0.0);
+ if(bo)
+ {
+ d=1.0-emc;
+ emc/=-1.0/d;
+ u*=(d=sqrt(d));
+ }
+ a=1.0;
+ di=1.0;
+ for(i=1;i<=13;i++)
+ {
+ l=i;
+ em[i]=a;
+ en[i]=(emc=sqrt(emc));
+ c=0.5*(a+emc);
+ if(fabs(a-emc)<=CA*a)break;
+ emc*=a;
+ a=c;
+ }
+ u*=c;
+ si=sin(u);
+ ci=cos(u);
+ if(si)
+ {
+ a=ci/si;
+ c*=a;
+ for(ii=l;ii>=1;ii--)
+ {
+ b=em[ii];
+ a*=c;
+ c*=di;
+ di=(en[ii]+a)/(b+a);
+ a=c/b;
+ }
+ a=1.0/sqrt(c*c+1.0);
+ si=(si>=0.0?a:-a);
+ ci=c*(si);
+ }
+ if(bo)
+ {
+ a=di;
+ di=ci;
+ ci=a;
+ si/=d;
+ }
+ }
+ else
+ {
+ ci=1.0/cosh(u);
+ di=ci;
+ si=tanh(u);
+ }
+ /////////////////////////////////////////////////////////
+ double delta;
+ delta=ci*ci + emmc*sr*sr*si*si;
+ double snir,snii;
+ snir=(sr*di)/delta;
+ snii=(cr*dr*si*ci)/delta;
+ *sni=DoubleComplex(snir,snii);
+}
void zmodsna(doubleComplex* uu,int size,double emmc,doubleComplex* sn)
{
int i;
for(i=0;i<size;i++)
{
- sn[i]=zmodsns(uu[i],emmc);
+ zmodsnsproto(uu[i],emmc,&sn[i]);
}
}
diff --git a/src/c/signalProcessing/amell/amell.h b/src/c/signalProcessing/amell/amell.h
new file mode 100644
index 00000000..30bd6c82
--- /dev/null
+++ b/src/c/signalProcessing/amell/amell.h
@@ -0,0 +1,27 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __AMELL_H__
+#define __AMELL_H__
+#include "types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+double damells(double u,double x);
+
+#ifdef __cplusplus
+} /* extern "c" */
+#endif
+
+#endif /*__AMELL_H__*/
diff --git a/src/c/signalProcessing/amell/damella.c b/src/c/signalProcessing/amell/damella.c
new file mode 100644
index 00000000..5c37e2a5
--- /dev/null
+++ b/src/c/signalProcessing/amell/damella.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+#include<stdio.h>
+#include<math.h>
+#include "amell.h"
+
+void damella(double* u,int size,double x,double* oup)
+{
+ int i;
+ for(i=0;i<size;i++)
+ {
+ oup[i]=damells(u[i],x);
+ }
+}
diff --git a/src/c/signalProcessing/amell/damells.c b/src/c/signalProcessing/amell/damells.c
new file mode 100644
index 00000000..90c20530
--- /dev/null
+++ b/src/c/signalProcessing/amell/damells.c
@@ -0,0 +1,57 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#include<stdio.h>
+#include<math.h>
+#include "amell.h"
+#define N 30
+#define DBL_EPSILON 2.2204460492503131E-16
+
+
+double damells(double u,double x)
+{
+ double a[N+1];
+ double g[N+1];
+ double c[N+1];
+ double two_n;
+ double phi;
+ double k;
+ int n;
+ k=(long double)fabs(x);
+ if(k==1.0)
+ return 0;
+ if(k>1.0)
+ printf("Wrong type of input argument type #2");
+
+ a[0]=1.0;
+ g[0]=sqrt(1.0-k*k);
+ c[0]=k;
+ two_n=1.0;
+ for(n=0;n<N;n++)
+ {
+ if(fabs(a[n]-g[n])<(a[n]*DBL_EPSILON))
+ {
+ break;
+ }
+ two_n+=two_n;
+ a[n+1]=0.5*(a[n]+g[n]);
+ g[n+1]=sqrt(a[n]*g[n]);
+ c[n+1]=0.5*(a[n]-g[n]);
+ }
+ phi=two_n*a[n]*u;
+ for(;n>0;n--)
+ {
+ phi=0.5*(phi+asin(c[n]*sin(phi)/a[n]));
+ }
+ return (double)phi;
+}
+
diff --git a/src/c/signalProcessing/amell/int_amell.h b/src/c/signalProcessing/amell/int_amell.h
new file mode 100644
index 00000000..5d0c86f6
--- /dev/null
+++ b/src/c/signalProcessing/amell/int_amell.h
@@ -0,0 +1,18 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __INT_AMELL_H__
+#define __INT_AMELL_H__
+
+#define d0d0amelld0(u,x) damells(u,x)
+
+#endif /* !__INT_AMELL_H__! */
diff --git a/src/c/signalProcessing/ell1mag/dell1maga.c b/src/c/signalProcessing/ell1mag/dell1maga.c
new file mode 100644
index 00000000..9af0c8e8
--- /dev/null
+++ b/src/c/signalProcessing/ell1mag/dell1maga.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#include<stdio.h>
+#include "modsn.h"
+#include "ell1mag.h"
+#include "doubleComplex.h"
+
+void dell1maga(double eps,double m1,double* z,int size,double* oup )
+{
+ double s[size];
+ int i;
+ for(i=0;i<size;i++)
+ {
+ s[i]=zmodsns(z[i],m1);
+ }
+ double un[size];
+ int j;
+ for(j=0;j<size;j++)
+ {
+ un[j]=1;
+ }
+ double v;
+ int k;
+ for(k=0;k<size;k++)
+ {
+ v=un[k]/(un[k]+(eps*eps*s[k]*s[k]));
+ oup[k]=v;
+ }
+}
+
diff --git a/src/c/signalProcessing/ell1mag/ell1mag.h b/src/c/signalProcessing/ell1mag/ell1mag.h
new file mode 100644
index 00000000..8fffc0c6
--- /dev/null
+++ b/src/c/signalProcessing/ell1mag/ell1mag.h
@@ -0,0 +1,28 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __ELL1MAG_H__
+#define __ELL1MAG_H__
+#include "types.h"
+#include "doubleComplex.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void dell1mags(double eps,double m1,doubleComplex* z,int size,double* oup);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*__ELL1MAG_H__*/
diff --git a/src/c/signalProcessing/ell1mag/int_ell1mag.h b/src/c/signalProcessing/ell1mag/int_ell1mag.h
new file mode 100644
index 00000000..590a0abd
--- /dev/null
+++ b/src/c/signalProcessing/ell1mag/int_ell1mag.h
@@ -0,0 +1,18 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __INT_ELL1MAG_H__
+#define __INT_ELL1MAG_H__
+
+#define d0d0z2ell1magd2(eps,m1,z,size,oup) dell1mags(eps,m1,z,size,oup)
+
+#endif /* !__INT_ELL1MAG_H__! */
diff --git a/src/c/signalProcessing/ell1mag/zell1maga.c b/src/c/signalProcessing/ell1mag/zell1maga.c
new file mode 100644
index 00000000..6e7a6f93
--- /dev/null
+++ b/src/c/signalProcessing/ell1mag/zell1maga.c
@@ -0,0 +1,40 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#include<stdio.h>
+#include "modsn.h"
+#include "ell1mag.h"
+#include "doubleComplex.h"
+
+void zell1maga(double eps,double m1,doubleComplex* z,int size,double* oup )
+{
+ doubleComplex s[size];
+ int i;
+ for(i=0;i<size;i++)
+ {
+ s[i]=zmodsns(z[i],m1);
+ }
+ double un[size];
+ int j;
+ for(j=0;j<size;j++)
+ {
+ un[j]=1;
+ }
+ doubleComplex v;
+ int k;
+ for(k=0;k<size;k++)
+ {
+ v=un[k]/(un[k]+(eps*eps*s[k]*s[k]));
+ oup[k]=zreals(v);
+ }
+}
+
diff --git a/src/c/signalProcessing/filt_sinc/dfilt_sincs.c b/src/c/signalProcessing/filt_sinc/dfilt_sincs.c
index 65aaaa65..1b7d1b18 100644
--- a/src/c/signalProcessing/filt_sinc/dfilt_sincs.c
+++ b/src/c/signalProcessing/filt_sinc/dfilt_sincs.c
@@ -46,13 +46,4 @@ void dfilt_sincs(double N,double fc,double* oup)
oup[k]=xn[k]/xd[k];
}
}
-/*
-int main()
-{
- int n;
- double fl;
- n=5;
- fl=0.2;
- filt_sinc(n,fl);
-}
-*/
+
diff --git a/src/c/signalProcessing/includes/amell.h b/src/c/signalProcessing/includes/amell.h
new file mode 100644
index 00000000..2336d3cb
--- /dev/null
+++ b/src/c/signalProcessing/includes/amell.h
@@ -0,0 +1,28 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __AMELL_H__
+#define __AMELL_H__
+#include "types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+double damells(double u,double x);
+void damella(double* u,int size,double x,double* oup);
+
+#ifdef __cplusplus
+} /* extern "c" */
+#endif
+
+#endif /*__AMELL_H__*/
diff --git a/src/c/signalProcessing/includes/ell1mag.h b/src/c/signalProcessing/includes/ell1mag.h
new file mode 100644
index 00000000..e881cca9
--- /dev/null
+++ b/src/c/signalProcessing/includes/ell1mag.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __ELL1MAG_H__
+#define __ELL1MAG_H__
+#include "types.h"
+#include "doubleComplex.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void zell1maga(double eps,double m1,doubleComplex* z,int size,double* oup);
+void dell1maga(double eps,double m1,double* z,int size,double* oup);
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /*__ELL1MAG_H__*/
diff --git a/src/c/signalProcessing/interfaces/int_amell.h b/src/c/signalProcessing/interfaces/int_amell.h
new file mode 100644
index 00000000..10719ac5
--- /dev/null
+++ b/src/c/signalProcessing/interfaces/int_amell.h
@@ -0,0 +1,19 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __INT_AMELL_H__
+#define __INT_AMELL_H__
+
+#define d0d0amelld0(u,x) damells(u,x)
+#define d2d0amelld2(u,size,x,oup) damella(u,size[1],x,oup)
+
+#endif /* !__INT_AMELL_H__! */
diff --git a/src/c/signalProcessing/interfaces/int_ell1mag.h b/src/c/signalProcessing/interfaces/int_ell1mag.h
new file mode 100644
index 00000000..c30ffef6
--- /dev/null
+++ b/src/c/signalProcessing/interfaces/int_ell1mag.h
@@ -0,0 +1,19 @@
+/* Copyright (C) 2017 - IIT Bombay - FOSSEE
+
+ 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
+ Author: Ankit Raj
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+ */
+
+#ifndef __INT_ELL1MAG_H__
+#define __INT_ELL1MAG_H__
+
+#define d0d0z2ell1magd2(eps,m1,z,size,oup) zell1maga(eps,m1,z,size[1],oup)
+#define d0d0d2ell1magd2(eps,m1,z,size,oup) dell1maga(eps,m1,z,size[1],oup)
+
+#endif /* !__INT_ELL1MAG_H__! */
diff --git a/src/c/signalProcessing/interfaces/int_modsn.h b/src/c/signalProcessing/interfaces/int_modsn.h
index 0d32eb06..56c8f8cb 100644
--- a/src/c/signalProcessing/interfaces/int_modsn.h
+++ b/src/c/signalProcessing/interfaces/int_modsn.h
@@ -18,4 +18,4 @@
#define d2d0modsnd2(uu,size,emmc,sn) dmodsna(uu,size[1],emmc,sn)
#define z2d0modsnz2(uu,size,emmc,sn) zmodsna(uu,size[1],emmc,sn)
-#endif /* !INT_MODSN_H__! */
+#endif /* !__INT_MODSN_H__! */
diff --git a/src/c/signalProcessing/transforms/dct/cdcta.c b/src/c/signalProcessing/transforms/dct/cdcta.c
index 7a006a0e..7ff83645 100644
--- a/src/c/signalProcessing/transforms/dct/cdcta.c
+++ b/src/c/signalProcessing/transforms/dct/cdcta.c
@@ -25,10 +25,10 @@ void cdcta(floatComplex *in,int row,int col,int sign,floatComplex *out)
int i,j,k,u,v;
int n;
int x,y;
- float res,ress;
+ float res,ress,vv,ff;
float re,z,q,m;
floatComplex accu = FloatComplex(0, 0);
- floatComplex temp,mm;
+ floatComplex temp,mm,aa,bb,cc;
if(sign==-1)
{
if(row==1)
@@ -44,20 +44,25 @@ void cdcta(floatComplex *in,int row,int col,int sign,floatComplex *out)
{
for(j=0;j<col;j++)
{
- y=row*j+i;
- float a;
- a=(cos(((M_PI)*(y+1-1./2.)*(x))/n));
- floatComplex b=FloatComplex(a,0);
- temp=cmuls(in[y],b);
+ y=row*j+i;
+ vv = cos(((M_PI)*(y+1-1./2.)*(x))/n);
+ aa = FloatComplex(vv,0);
+ temp=cmuls(in[y],aa);
out[x]=cadds(out[x],temp);
}
}
if(x==0)
- out[x]*=1./(sqrt(n));
+ {
+ vv = 1./(sqrt(n));
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
+ }
else
{
float res=2./n;
- out[x]*=sqrt(res);
+ res = sqrt(res);
+ aa = FloatComplex(res,0);
+ out[x]=cmuls(out[x],aa);
}
}
}
@@ -80,29 +85,53 @@ void cdcta(floatComplex *in,int row,int col,int sign,floatComplex *out)
y=j*row+i;
z=(float)(((float)j+1.0/2.0)*(float)v);
q=(float)(M_PI/(float)col);
- mm=in[y]*(cos(q*z));
+ vv = cos(q*z);
+ aa = FloatComplex(vv,0);
+ mm=cmuls(in[y],aa);
temp=cadds(temp,mm);
}
z=(float)(((float)i+1.0/2.0)*(float)u);
q=(float)(M_PI/(float)row);
- temp*=cos(q*z);
+ ff = cos(q*z);
+ bb = FloatComplex(ff,0);
+ temp=cmuls(temp,bb);
out[x]=cadds(out[x],temp);
}
if(u==0)
{
- out[x]*=1./sqrt((float)row);
+ vv = 1./sqrt((float)row);
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
if(v==0)
- out[x]*=1./sqrt((float)col);
+ {
+ vv = 1./sqrt((float)col);
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
+ }
else
- out[x]*=sqrt(2./col);
+ {
+ vv = sqrt(2./col);
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
+ }
}
else
{
- out[x]*=sqrt(2./row);
+ vv = sqrt(2./row);
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
if(v==0)
- out[x]*=1./sqrt((float)col);
+ {
+ vv = 1./sqrt((float)col);
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
+ }
else
- out[x]*=sqrt(2./col);
+ {
+ vv = sqrt(2./col);
+ aa = FloatComplex(vv,0);
+ out[x]=cmuls(out[x],aa);
+ }
}
}
}
@@ -129,12 +158,14 @@ void cdcta(floatComplex *in,int row,int col,int sign,floatComplex *out)
if(y==0)
{
q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=cadds(out[x],in[y]*q);
+ aa = FloatComplex(q,0);
+ out[x]=cadds(out[x],cmuls(in[y],aa));
}
else
{
q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=cadds(out[x],in[y]*q);
+ aa = FloatComplex(q,0);
+ out[x]=cadds(out[x],cmuls(in[y],aa));
}
}
}
@@ -160,19 +191,37 @@ void cdcta(floatComplex *in,int row,int col,int sign,floatComplex *out)
y=row*j+i;
mm=in[j*row+i];
z=(float)(((float)v+1.0/2.0)*(float)j);
- q=(float)(M_PI/(float)col);
- mm=mm*(cos(q*z));
+ q=(float)(M_PI/(float)col);
+ vv = cos(q*z);
+ aa = FloatComplex(vv,0);
+ mm=cmuls(mm,aa);
if(j==0)
- temp=cadds(temp,mm*(1./sqrt((float)col)));
+ {
+ vv = 1./sqrt((float)col);
+ aa = FloatComplex(vv,0);
+ temp=cadds(temp,cmuls(mm,aa));
+ }
else
- temp=cadds(temp,mm*sqrt(2./col));
+ {
+ vv = sqrt(2./col);
+ aa = FloatComplex(vv,0);
+ temp=cadds(temp,cmuls(mm,aa));
+ }
}
z=(float)(((float)u+1.0/2.0)*(float)i);
q=(float)(M_PI/(float)row);
if(i==0)
- out[x]=cadds(out[x],temp*((cos(z*q))*(1./sqrt(row))));
+ {
+ vv = (cos(z*q))*(1./sqrt(row));
+ aa = FloatComplex(vv,0);
+ out[x]=cadds(out[x],cmuls(temp,aa));
+ }
else
- out[x]=cadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+ {
+ vv = (cos(z*q))*sqrt(2./row);
+ aa = FloatComplex(vv,0);
+ out[x]=cadds(out[x],cmuls(temp,aa));
+ }
}
}
}
diff --git a/src/c/signalProcessing/transforms/dct/zdcta.c b/src/c/signalProcessing/transforms/dct/zdcta.c
index 0204d682..3ae2e333 100644
--- a/src/c/signalProcessing/transforms/dct/zdcta.c
+++ b/src/c/signalProcessing/transforms/dct/zdcta.c
@@ -15,6 +15,7 @@
#include "addition.h"
#include "types.h"
#include "doubleComplex.h"
+#include "multiplication.h"
/*#include "matrixMultiplication"*/
/*#include <fftw3.h>*/
#include <math.h>
@@ -24,10 +25,10 @@ void zdcta(doubleComplex *in,int row,int col,int sign,doubleComplex *out)
int i,j,k,u,v;
int n;
int x,y;
- double res,ress;
- double re,z,q,m;
+ double res,ress,vv,ff;
+ double re,z,q,m;
doubleComplex accu = DoubleComplex(0, 0);
- doubleComplex temp,mm;
+ doubleComplex temp,mm,aa,bb,cc;
if(sign==-1)
{
if(row==1)
@@ -43,22 +44,30 @@ void zdcta(doubleComplex *in,int row,int col,int sign,doubleComplex *out)
{
for(j=0;j<col;j++)
{
- y=row*j+i;
- temp=in[y]*(cos(((M_PI)*(y+1-1./2.)*(x))/n));
+ y=row*j+i;
+ vv = cos(((M_PI)*(y+1-1./2.)*(x))/n);
+ aa = DoubleComplex(vv,0);
+ temp=zmuls(in[y],aa);
out[x]=zadds(out[x],temp);
}
}
if(x==0)
- out[x]*=1./(sqrt(n));
+ {
+ vv = 1./(sqrt(n));
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
+ }
else
{
- double res=2./n;
- out[x]*=sqrt(res);
+ double res=2./n;
+ res = sqrt(res);
+ aa = DoubleComplex(res,0);
+ out[x]=zmuls(out[x],aa);
}
}
}
- }
- else
+ }
+ else
{
n=col*row;
for(u=0;u<row;u++)
@@ -74,31 +83,55 @@ void zdcta(doubleComplex *in,int row,int col,int sign,doubleComplex *out)
for(j=0;j<col;j++)
{
y=j*row+i;
- z=(double)(((double)j+1.0/2.0)*(double)v);
- q=(double)(M_PI/(double)col);
- mm=in[y]*(cos(q*z));
+ z=(double )(((double )j+1.0/2.0)*(double )v);
+ q=(double )(M_PI/(double )col);
+ vv = cos(q*z);
+ aa = DoubleComplex(vv,0);
+ mm=zmuls(in[y],aa);
temp=zadds(temp,mm);
}
- z=(double)(((double)i+1.0/2.0)*(double)u);
- q=(double)(M_PI/(double)row);
- temp*=cos(q*z);
+ z=(double )(((double )i+1.0/2.0)*(double )u);
+ q=(double )(M_PI/(double )row);
+ ff = cos(q*z);
+ bb = DoubleComplex(ff,0);
+ temp=zmuls(temp,bb);
out[x]=zadds(out[x],temp);
- }
+ }
if(u==0)
{
- out[x]*=1./sqrt((double)row);
+ vv = 1./sqrt((double )row);
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
if(v==0)
- out[x]*=1./sqrt((double)col);
+ {
+ vv = 1./sqrt((double )col);
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
+ }
else
- out[x]*=sqrt(2./col);
+ {
+ vv = sqrt(2./col);
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
+ }
}
else
{
- out[x]*=sqrt(2./row);
+ vv = sqrt(2./row);
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
if(v==0)
- out[x]*=1./sqrt((double)col);
+ {
+ vv = 1./sqrt((double )col);
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
+ }
else
- out[x]*=sqrt(2./col);
+ {
+ vv = sqrt(2./col);
+ aa = DoubleComplex(vv,0);
+ out[x]=zmuls(out[x],aa);
+ }
}
}
}
@@ -125,12 +158,14 @@ void zdcta(doubleComplex *in,int row,int col,int sign,doubleComplex *out)
if(y==0)
{
q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=zadds(out[x],in[y]*q);
+ aa = DoubleComplex(q,0);
+ out[x]=zadds(out[x],zmuls(in[y],aa));
}
else
{
q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=zadds(out[x],in[y]*q);
+ aa = DoubleComplex(q,0);
+ out[x]=zadds(out[x],zmuls(in[y],aa));
}
}
}
@@ -155,20 +190,38 @@ void zdcta(doubleComplex *in,int row,int col,int sign,doubleComplex *out)
{
y=row*j+i;
mm=in[j*row+i];
- z=(double)(((double)v+1.0/2.0)*(double)j);
- q=(double)(M_PI/(double)col);
- mm=mm*(cos(q*z));
+ z=(double )(((double )v+1.0/2.0)*(double )j);
+ q=(double )(M_PI/(double )col);
+ vv = cos(q*z);
+ aa = DoubleComplex(vv,0);
+ mm=zmuls(mm,aa);
if(j==0)
- temp=zadds(temp,mm*(1./sqrt((double)col)));
+ {
+ vv = 1./sqrt((double )col);
+ aa = DoubleComplex(vv,0);
+ temp=zadds(temp,zmuls(mm,aa));
+ }
else
- temp=zadds(temp,mm*sqrt(2./col));
+ {
+ vv = sqrt(2./col);
+ aa = DoubleComplex(vv,0);
+ temp=zadds(temp,zmuls(mm,aa));
+ }
}
- z=(double)(((double)u+1.0/2.0)*(double)i);
- q=(double)(M_PI/(double)row);
+ z=(double )(((double )u+1.0/2.0)*(double )i);
+ q=(double )(M_PI/(double )row);
if(i==0)
- out[x]=zadds(out[x],temp*((cos(z*q))*(1./sqrt(row))));
+ {
+ vv = (cos(z*q))*(1./sqrt(row));
+ aa = DoubleComplex(vv,0);
+ out[x]=zadds(out[x],zmuls(temp,aa));
+ }
else
- out[x]=zadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+ {
+ vv = (cos(z*q))*sqrt(2./row);
+ aa = DoubleComplex(vv,0);
+ out[x]=zadds(out[x],zmuls(temp,aa));
+ }
}
}
}
diff --git a/src/c/signalProcessing/transforms/idct/cidcta.c b/src/c/signalProcessing/transforms/idct/cidcta.c
index e6c746ce..ae98ba19 100644
--- a/src/c/signalProcessing/transforms/idct/cidcta.c
+++ b/src/c/signalProcessing/transforms/idct/cidcta.c
@@ -14,7 +14,8 @@
#include "idct.h"
#include "addition.h"
#include "types.h"
-#include "floatComplex.h"
+#include "floatComplex.h"
+#include "multiplication.h"
/*#include "matrixMultiplication"*/
/*#include <fftw3.h>*/
#include <math.h>
@@ -24,10 +25,10 @@ void cidcta(floatComplex *in,int row,int col,floatComplex *out)
int i,j,k,u,v;
int n=col;
int x,y;
- float res,ress;
+ float res,ress,vv,ff;
float re,z,q,m;
floatComplex accu = FloatComplex(0, 0);
- floatComplex temp,mm;
+ floatComplex temp,mm,aa,bb;
if(row==1)
{
res=1./sqrt(n);
@@ -46,12 +47,14 @@ void cidcta(floatComplex *in,int row,int col,floatComplex *out)
if(y==0)
{
q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=cadds(out[x],in[y]*q);
+ aa=FloatComplex(q,0);
+ out[x]=cadds(out[x],cmuls(in[y],aa));
}
else
{
q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=cadds(out[x],in[y]*q);
+ aa=FloatComplex(q,0);
+ out[x]=cadds(out[x],cmuls(in[y],aa));
}
}
}
@@ -77,19 +80,37 @@ void cidcta(floatComplex *in,int row,int col,floatComplex *out)
y=row*j+i;
mm=in[j*row+i];
z=(float)(((float)v+1.0/2.0)*(float)j);
- q=(float)(M_PI/(float)col);
- mm=mm*(cos(q*z));
+ q=(float)(M_PI/(float)col);
+ vv=cos(q*z);
+ aa=FloatComplex(vv,0);
+ mm=cmuls(mm,aa);
if(j==0)
- temp=cadds(temp,mm*(1./sqrt((float)col)));
+ {
+ vv=1./sqrt((float)col);
+ aa=FloatComplex(vv,0);
+ temp=cadds(temp,cmuls(mm,aa));
+ }
else
- temp=cadds(temp,mm*sqrt(2./col));
+ {
+ vv=sqrt(2./col);
+ aa=FloatComplex(vv,0);
+ temp=cadds(temp,cmuls(mm,aa));
+ }
}
z=(float)(((float)u+1.0/2.0)*(float)i);
q=(float)(M_PI/(float)row);
if(i==0)
- out[x]=cadds(out[x],temp*((cos(z*q))*(1./sqrt(row))));
+ {
+ vv=(cos(z*q))*(1./sqrt(row));
+ aa=FloatComplex(vv,0);
+ out[x]=cadds(out[x],cmuls(temp,aa));
+ }
else
- out[x]=cadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+ {
+ vv=(cos(z*q))*sqrt(2./row);
+ aa=FloatComplex(vv,0);
+ out[x]=cadds(out[x],cmuls(temp,aa));
+ }
}
}
}
diff --git a/src/c/signalProcessing/transforms/idct/zidcta.c b/src/c/signalProcessing/transforms/idct/zidcta.c
index 2177b18c..cc01c966 100644
--- a/src/c/signalProcessing/transforms/idct/zidcta.c
+++ b/src/c/signalProcessing/transforms/idct/zidcta.c
@@ -15,6 +15,7 @@
#include "addition.h"
#include "types.h"
#include "doubleComplex.h"
+#include "multiplication.h"
/*#include "matrixMultiplication"*/
/*#include <fftw3.h>*/
#include <math.h>
@@ -24,10 +25,10 @@ void zidcta(doubleComplex *in,int row,int col,doubleComplex *out)
int i,j,k,u,v;
int n=col;
int x,y;
- double res,ress;
+ double res,ress,vv,ff;
double re,z,q,m;
doubleComplex accu = DoubleComplex(0, 0);
- doubleComplex temp,mm;
+ doubleComplex temp,mm,aa,bb;
if(row==1)
{
res=1./sqrt(n);
@@ -46,17 +47,19 @@ void zidcta(doubleComplex *in,int row,int col,doubleComplex *out)
if(y==0)
{
q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=zadds(out[x],in[y]*q);
+ aa=DoubleComplex(q,0);
+ out[x]=zadds(out[x],zmuls(in[y],aa));
}
else
{
q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
- out[x]=zadds(out[x],in[y]*q);
+ aa=DoubleComplex(q,0);
+ out[x]=zadds(out[x],zmuls(in[y],aa));
}
}
}
}
-
+
}
}
else
@@ -77,19 +80,37 @@ void zidcta(doubleComplex *in,int row,int col,doubleComplex *out)
y=row*j+i;
mm=in[j*row+i];
z=(double)(((double)v+1.0/2.0)*(double)j);
- q=(double)(M_PI/(double)col);
- mm=mm*(cos(q*z));
+ q=(double)(M_PI/(double)col);
+ vv=cos(q*z);
+ aa=DoubleComplex(vv,0);
+ mm=zmuls(mm,aa);
if(j==0)
- temp=zadds(temp,mm*(1./sqrt((double)col)));
+ {
+ vv=1./sqrt((double)col);
+ aa=DoubleComplex(vv,0);
+ temp=zadds(temp,zmuls(mm,aa));
+ }
else
- temp=zadds(temp,mm*sqrt(2./col));
+ {
+ vv=sqrt(2./col);
+ aa=DoubleComplex(vv,0);
+ temp=zadds(temp,zmuls(mm,aa));
+ }
}
z=(double)(((double)u+1.0/2.0)*(double)i);
q=(double)(M_PI/(double)row);
if(i==0)
- out[x]=zadds(out[x],temp*((cos(z*q))*(1./sqrt(row))));
+ {
+ vv=(cos(z*q))*(1./sqrt(row));
+ aa=DoubleComplex(vv,0);
+ out[x]=zadds(out[x],zmuls(temp,aa));
+ }
else
- out[x]=zadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+ {
+ vv=(cos(z*q))*sqrt(2./row);
+ aa=DoubleComplex(vv,0);
+ out[x]=zadds(out[x],zmuls(temp,aa));
+ }
}
}
}
diff --git a/src/c/string/ascii/gasciia.c b/src/c/string/ascii/gasciia.c
index 59c44a83..ec11d6e2 100644
--- a/src/c/string/ascii/gasciia.c
+++ b/src/c/string/ascii/gasciia.c
@@ -16,7 +16,7 @@
#include "ascii.h"
void gasciia(char *str,int size,int* oup)
{
- int i;
+ int i;
for(i=0;i<size;i++)
{
*(oup+i)=(int)str[i];
diff --git a/src/c/string/disp/ddispa.c b/src/c/string/disp/ddispa.c
index 5e6bb84e..29aaceeb 100644
--- a/src/c/string/disp/ddispa.c
+++ b/src/c/string/disp/ddispa.c
@@ -16,7 +16,7 @@ double ddispa (double* in, int rows, int columns){
int i = 0,j = 0;
for (i = 0; i < rows; ++i) {
- for (j=0;j<columns;j++) printf (" %1.20f ", in[i+j*rows]);
+ for (j=0;j<columns;j++) printf (" %e ", in[i+j*rows]);
printf("\n");
}
return 0;
diff --git a/src/c/string/strcspn/gstrcspna.c b/src/c/string/strcspn/gstrcspna.c
index 2871d336..75912e9d 100644
--- a/src/c/string/strcspn/gstrcspna.c
+++ b/src/c/string/strcspn/gstrcspna.c
@@ -14,8 +14,8 @@
#include "strcspn.h"
uint8 gstrcspna(char *str1,int size1,char *str2,int size2)
{
- int ind;
- int i;
+ int ind,i,j;;
+ for(i=0;i<=size1;i++)
int j;
for(i=0;i<=size1;i++)
{