From 8e235230a4c16a042d2620fa7b58a9b0f4ba1914 Mon Sep 17 00:00:00 2001
From: ukashanoor
Date: Mon, 19 Jun 2017 10:42:03 +0530
Subject: after if and for

---
 src/c/signalProcessing/transforms/dct/cdcta.c   | 177 ++++++++++++++++++++++++
 src/c/signalProcessing/transforms/dct/ddcta.c   | 160 +++++++++++++++++++++
 src/c/signalProcessing/transforms/dct/zdcta.c   | 177 ++++++++++++++++++++++++
 src/c/signalProcessing/transforms/idct/cidcta.c |  97 +++++++++++++
 src/c/signalProcessing/transforms/idct/didcta.c |  83 +++++++++++
 src/c/signalProcessing/transforms/idct/zidcta.c |  97 +++++++++++++
 6 files changed, 791 insertions(+)
 create mode 100644 src/c/signalProcessing/transforms/dct/cdcta.c
 create mode 100644 src/c/signalProcessing/transforms/dct/ddcta.c
 create mode 100644 src/c/signalProcessing/transforms/dct/zdcta.c
 create mode 100644 src/c/signalProcessing/transforms/idct/cidcta.c
 create mode 100644 src/c/signalProcessing/transforms/idct/didcta.c
 create mode 100644 src/c/signalProcessing/transforms/idct/zidcta.c

(limited to 'src/c/signalProcessing/transforms')

diff --git a/src/c/signalProcessing/transforms/dct/cdcta.c b/src/c/signalProcessing/transforms/dct/cdcta.c
new file mode 100644
index 00000000..5bc27929
--- /dev/null
+++ b/src/c/signalProcessing/transforms/dct/cdcta.c
@@ -0,0 +1,177 @@
+/* Copyright (C) 2016 - 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: Ukasha Noor
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+
+
+#include "dct.h"
+#include "addition.h"
+#include "types.h"
+#include "floatComplex.h" 
+/*#include "matrixMultiplication"*/
+/*#include <fftw3.h>*/
+#include <math.h>
+
+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 re,z,q,m;
+	floatComplex accu = DoubleComplex(0, 0);
+	floatComplex temp,mm;
+	if(sign==-1)
+	{
+		if(row==1)
+		{
+			n=col;
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=FloatComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;		
+							temp=in[y]*(cos(((M_PI)*(y+1-1./2.)*(x))/n));
+							out[x]=cadds(out[x],temp);
+						}
+					}
+					if(x==0)
+					out[x]*=1./(sqrt(n));
+					else
+					{
+						float res=2./n;
+						out[x]*=sqrt(res);
+					}
+				}
+			}
+		}
+		else
+		{	
+			n=col*row;
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=FloatComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						temp=FloatComplex(0,0);
+						mm=FloatComplex(0,0);
+						for(j=0;j<col;j++)
+						{
+							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));	
+							temp=cadds(temp,mm);
+						}
+						z=(float)(((float)i+1.0/2.0)*(float)u);
+						q=(float)(M_PI/(float)row);
+						temp*=cos(q*z);
+						out[x]=cadds(out[x],temp);
+						}
+					if(u==0)
+					{
+						out[x]*=1./sqrt((float)row);
+						if(v==0)
+						out[x]*=1./sqrt((float)col);
+						else
+						out[x]*=sqrt(2./col);
+					}
+					else
+					{
+						out[x]*=sqrt(2./row);
+						if(v==0)
+						out[x]*=1./sqrt((float)col);
+						else
+						out[x]*=sqrt(2./col);
+					}
+				}
+			}
+		}
+	}
+	else if(sign==1)
+	{
+		n=col;
+		if(row==1)
+		{
+			res=1./sqrt(n);
+			ress=sqrt(2./n);
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=FloatComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;		
+							if(y==0)
+							{
+								q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
+								out[x]=cadds(out[x],in[y]*q);
+							}
+							else
+							{
+								q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
+								out[x]=cadds(out[x],in[y]*q);
+							}
+						}
+					}
+				}
+					
+			}
+		}	
+		else	
+		{
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=FloatComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						re=0;
+						mm=FloatComplex(0,0);
+						temp=FloatComplex(0,0);
+						for(j=0;j<col;j++)
+						{
+							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));
+							if(j==0)
+							temp=cadds(temp,mm*(1./sqrt((float)col)));
+							else
+							temp=cadds(temp,mm*sqrt(2./col));
+						}
+						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))));
+						else
+						out[x]=cadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+					}
+				}
+			}
+		}					
+	}
+}
diff --git a/src/c/signalProcessing/transforms/dct/ddcta.c b/src/c/signalProcessing/transforms/dct/ddcta.c
new file mode 100644
index 00000000..3802c816
--- /dev/null
+++ b/src/c/signalProcessing/transforms/dct/ddcta.c
@@ -0,0 +1,160 @@
+/* Copyright (C) 2016 - 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: Ukasha Noor
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+
+
+#include "dct.h"
+/*#include <fftw3.h>*/
+#include <math.h>
+
+void ddcta(double *in,int row,int col,int sign,double *out)
+{
+	int i,j,k,u,v;
+	int n;
+	int x,y;
+	double res,ress;
+	double re,z,q,m;
+	if(sign==-1)
+	{
+		if(row==1)
+		{
+			n=col;
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=0;
+					for(i=0;i<row;i++)
+					{
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;		
+							out[x]+=in[y]*(cos(((M_PI)*(y+1-1./2.)*(x))/n));
+						}
+					}
+					if(x==0)
+					out[x]*=1./(sqrt(n));
+					else
+					{
+						double res=2./n;
+						out[x]*=sqrt(res);
+					}
+				}
+			}
+		}
+		else
+		{
+			n=col*row;
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=0;
+					for(i=0;i<row;i++)
+					{
+						re=0;
+						for(j=0;j<col;j++)
+						{
+							m=(double)in[j*row+i];
+							z=(double)(((double)j+1.0/2.0)*(double)v);
+							q=(double)(M_PI/(double)col);	
+							re+=m*(cos(q*z));
+						}
+						z=(double)(((double)i+1.0/2.0)*(double)u);
+						q=(double)(M_PI/(double)row);
+						out[x]+=re*(cos(q*z));
+					}
+					if(u==0)
+					{
+						out[x]/=sqrt((double)row);
+						if(v==0)
+						out[x]/=sqrt((double)col);
+						else
+						out[x]*=sqrt(2./col);
+					}
+					else
+					{
+						out[x]*=sqrt(2./row);
+						if(v==0)
+						out[x]/=sqrt((double)col);
+						else
+						out[x]*=sqrt(2./col);
+					}
+				}
+			}
+		
+		}
+	}
+	else if(sign==1)
+	{
+		n=col;
+		if(row==1)
+		{
+			res=1./sqrt(n);
+			ress=sqrt(2./n);
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=0;
+					for(i=0;i<row;i++)
+					{
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;		
+							if(y==0)
+							out[x]+=res*in[y]*(cos(((M_PI)*(j)*(v+1./2.))/n));
+							else
+							out[x]+=ress*in[y]*(cos(((M_PI)*(j)*(v+1./2.))/n));
+						}
+					}
+				}
+					
+			}
+		}	
+		else	
+		{
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=0;
+					for(i=0;i<row;i++)
+					{
+						re=0;
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;
+							m=(double)in[j*row+i];
+							z=(double)(((double)v+1.0/2.0)*(double)j);
+							q=(double)(M_PI/(double)col);	
+							m=m*(cos(q*z));
+							if(j==0)
+							re+=m/sqrt((double)col);
+							else
+							re+=m*sqrt(2./col);
+						}
+						z=(double)(((double)u+1.0/2.0)*(double)i);
+						q=(double)(M_PI/(double)row);	
+						if(i==0)
+						out[x]+=(re*(cos(z*q)))/sqrt((double)row);
+						else
+						out[x]+=(re*(cos(z*q))*sqrt(2./row));
+					}
+				}
+			}
+		}					
+	}
+}
diff --git a/src/c/signalProcessing/transforms/dct/zdcta.c b/src/c/signalProcessing/transforms/dct/zdcta.c
new file mode 100644
index 00000000..0204d682
--- /dev/null
+++ b/src/c/signalProcessing/transforms/dct/zdcta.c
@@ -0,0 +1,177 @@
+/* Copyright (C) 2016 - 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: Ukasha Noor
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+
+
+#include "dct.h"
+#include "addition.h"
+#include "types.h"
+#include "doubleComplex.h" 
+/*#include "matrixMultiplication"*/
+/*#include <fftw3.h>*/
+#include <math.h>
+
+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;
+	doubleComplex accu = DoubleComplex(0, 0);
+	doubleComplex temp,mm;
+	if(sign==-1)
+	{
+		if(row==1)
+		{
+			n=col;
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=DoubleComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;		
+							temp=in[y]*(cos(((M_PI)*(y+1-1./2.)*(x))/n));
+							out[x]=zadds(out[x],temp);
+						}
+					}
+					if(x==0)
+					out[x]*=1./(sqrt(n));
+					else
+					{
+						double res=2./n;
+						out[x]*=sqrt(res);
+					}
+				}
+			}
+		}	
+		else	
+		{	
+			n=col*row;
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=DoubleComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						temp=DoubleComplex(0,0);
+						mm=DoubleComplex(0,0);
+						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));	
+							temp=zadds(temp,mm);
+						}
+						z=(double)(((double)i+1.0/2.0)*(double)u);
+						q=(double)(M_PI/(double)row);
+						temp*=cos(q*z);
+						out[x]=zadds(out[x],temp);
+					}
+					if(u==0)
+					{
+						out[x]*=1./sqrt((double)row);
+						if(v==0)
+						out[x]*=1./sqrt((double)col);
+						else
+						out[x]*=sqrt(2./col);
+					}
+					else
+					{
+						out[x]*=sqrt(2./row);
+						if(v==0)
+						out[x]*=1./sqrt((double)col);
+						else
+						out[x]*=sqrt(2./col);
+					}
+				}
+			}
+		}
+	}
+	else if(sign==1)
+	{
+		n=col;
+		if(row==1)
+		{
+			res=1./sqrt(n);
+			ress=sqrt(2./n);
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=DoubleComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						for(j=0;j<col;j++)
+						{
+							y=row*j+i;		
+							if(y==0)
+							{
+								q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
+								out[x]=zadds(out[x],in[y]*q);
+							}
+							else
+							{
+								q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
+								out[x]=zadds(out[x],in[y]*q);
+							}
+						}
+					}
+				}
+					
+			}
+		}	
+		else	
+		{
+			for(u=0;u<row;u++)
+			{
+				for(v=0;v<col;v++)
+				{
+					x=v*row+u;
+					out[x]=DoubleComplex(0,0);
+					for(i=0;i<row;i++)
+					{
+						re=0;
+						mm=DoubleComplex(0,0);
+						temp=DoubleComplex(0,0);
+						for(j=0;j<col;j++)
+						{
+							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));
+							if(j==0)
+							temp=zadds(temp,mm*(1./sqrt((double)col)));
+							else
+							temp=zadds(temp,mm*sqrt(2./col));
+						}
+						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))));
+						else
+						out[x]=zadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+					}
+				}
+			}
+		}					
+	}
+}
diff --git a/src/c/signalProcessing/transforms/idct/cidcta.c b/src/c/signalProcessing/transforms/idct/cidcta.c
new file mode 100644
index 00000000..ec0df0c7
--- /dev/null
+++ b/src/c/signalProcessing/transforms/idct/cidcta.c
@@ -0,0 +1,97 @@
+/* Copyright (C) 2016 - 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: Ukasha Noor
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+
+
+#include "idct.h"
+#include "addition.h"
+#include "types.h"
+#include "floatComplex.h" 
+/*#include "matrixMultiplication"*/
+/*#include <fftw3.h>*/
+#include <math.h>
+
+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 re,z,q,m;
+	floatComplex accu = DoubleComplex(0, 0);
+	floatComplex temp,mm;
+	if(row==1)
+	{
+		res=1./sqrt(n);
+		ress=sqrt(2./n);
+		for(u=0;u<row;u++)
+		{
+			for(v=0;v<col;v++)
+			{
+				x=v*row+u;
+				out[x]=FloatComplex(0,0);
+				for(i=0;i<row;i++)
+				{
+					for(j=0;j<col;j++)
+					{
+						y=row*j+i;		
+						if(y==0)
+						{
+							q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
+							out[x]=cadds(out[x],in[y]*q);
+						}
+						else
+						{
+							q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
+							out[x]=cadds(out[x],in[y]*q);
+						}
+					}
+				}
+			}
+			
+		}
+	}	
+	else	
+	{
+		for(u=0;u<row;u++)
+		{
+			for(v=0;v<col;v++)
+			{
+				x=v*row+u;
+				out[x]=FloatComplex(0,0);
+				for(i=0;i<row;i++)
+				{
+					re=0;
+					mm=FloatComplex(0,0);
+					temp=FloatComplex(0,0);
+					for(j=0;j<col;j++)
+					{
+						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));
+						if(j==0)
+						temp=cadds(temp,mm*(1./sqrt((float)col)));
+						else
+						temp=cadds(temp,mm*sqrt(2./col));
+					}
+					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))));
+					else
+					out[x]=cadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+				}
+			}
+		}
+	}					
+}
diff --git a/src/c/signalProcessing/transforms/idct/didcta.c b/src/c/signalProcessing/transforms/idct/didcta.c
new file mode 100644
index 00000000..5f475160
--- /dev/null
+++ b/src/c/signalProcessing/transforms/idct/didcta.c
@@ -0,0 +1,83 @@
+/* Copyright (C) 2016 - 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: Ukasha Noor
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+
+
+#include "idct.h"
+/*#include <fftw3.h>*/
+#include <math.h>
+
+void didcta(double *in,int row,int col,double *out)
+{
+	int i,j,k,u,v;
+	int n=col;
+	int x,y;
+	double res,ress;
+	double re,z,q,m;
+	if(row==1)
+	{
+		res=1./sqrt(n);
+		ress=sqrt(2./n);
+		for(u=0;u<row;u++)
+		{
+			for(v=0;v<col;v++)
+			{
+				x=v*row+u;
+				out[x]=0;
+				for(i=0;i<row;i++)
+				{
+					for(j=0;j<col;j++)
+					{
+						y=row*j+i;		
+						if(y==0)
+						out[x]+=res*in[y]*(cos(((M_PI)*(j)*(v+1./2.))/n));
+						else
+						out[x]+=ress*in[y]*(cos(((M_PI)*(j)*(v+1./2.))/n));
+					}
+				}
+			}
+				
+		}
+	}
+	else
+	{
+		for(u=0;u<row;u++)
+		{
+			for(v=0;v<col;v++)
+			{
+				x=v*row+u;
+				out[x]=0;
+				for(i=0;i<row;i++)
+				{
+					re=0;
+					for(j=0;j<col;j++)
+					{
+						y=row*j+i;
+						m=(double)in[j*row+i];
+						z=(double)(((double)v+1.0/2.0)*(double)j);
+						q=(double)(M_PI/(double)col);	
+						m=m*(cos(q*z));
+						if(j==0)
+						re+=m/sqrt((double)col);
+						else
+						re+=m*sqrt(2./col);
+					}
+					z=(double)(((double)u+1.0/2.0)*(double)i);
+					q=(double)(M_PI/(double)row);	
+					if(i==0)
+					out[x]+=(re*(cos(z*q)))/sqrt((double)row);
+					else
+					out[x]+=(re*(cos(z*q))*sqrt(2./row));
+				}
+			}
+		}
+	}					
+}
diff --git a/src/c/signalProcessing/transforms/idct/zidcta.c b/src/c/signalProcessing/transforms/idct/zidcta.c
new file mode 100644
index 00000000..2177b18c
--- /dev/null
+++ b/src/c/signalProcessing/transforms/idct/zidcta.c
@@ -0,0 +1,97 @@
+/* Copyright (C) 2016 - 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: Ukasha Noor
+ Organization: FOSSEE, IIT Bombay
+ Email: toolbox@scilab.in
+*/
+
+
+#include "idct.h"
+#include "addition.h"
+#include "types.h"
+#include "doubleComplex.h" 
+/*#include "matrixMultiplication"*/
+/*#include <fftw3.h>*/
+#include <math.h>
+
+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 re,z,q,m;
+	doubleComplex accu = DoubleComplex(0, 0);
+	doubleComplex temp,mm;
+	if(row==1)
+	{
+		res=1./sqrt(n);
+		ress=sqrt(2./n);
+		for(u=0;u<row;u++)
+		{
+			for(v=0;v<col;v++)
+			{
+				x=v*row+u;
+				out[x]=DoubleComplex(0,0);
+				for(i=0;i<row;i++)
+				{
+					for(j=0;j<col;j++)
+					{
+						y=row*j+i;		
+						if(y==0)
+						{
+							q=res*(cos(((M_PI)*(j)*(v+1./2.))/n));
+							out[x]=zadds(out[x],in[y]*q);
+						}
+						else
+						{
+							q=ress*(cos(((M_PI)*(j)*(v+1./2.))/n));
+							out[x]=zadds(out[x],in[y]*q);
+						}
+					}
+				}
+			}
+				
+		}
+	}	
+	else	
+	{
+		for(u=0;u<row;u++)
+		{
+			for(v=0;v<col;v++)
+			{
+				x=v*row+u;
+				out[x]=DoubleComplex(0,0);
+				for(i=0;i<row;i++)
+				{
+					re=0;
+					mm=DoubleComplex(0,0);
+					temp=DoubleComplex(0,0);
+					for(j=0;j<col;j++)
+					{
+						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));
+						if(j==0)
+						temp=zadds(temp,mm*(1./sqrt((double)col)));
+						else
+						temp=zadds(temp,mm*sqrt(2./col));
+					}
+					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))));
+					else
+					out[x]=zadds(out[x],temp*((cos(z*q))*sqrt(2./row)));
+				}
+			}
+		}
+	}					
+}
-- 
cgit