summaryrefslogtreecommitdiff
path: root/src/signalProcessing/conv/zconva.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/signalProcessing/conv/zconva.c')
-rw-r--r--src/signalProcessing/conv/zconva.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/signalProcessing/conv/zconva.c b/src/signalProcessing/conv/zconva.c
new file mode 100644
index 00000000..688023a7
--- /dev/null
+++ b/src/signalProcessing/conv/zconva.c
@@ -0,0 +1,34 @@
+#include "conv.h"
+
+void zconva(doubleComplex *in1, int size1, doubleComplex *in2,int size2, doubleComplex *out){
+ int m1,i;
+ doubleComplex *in1b, *in2b, *result;
+
+
+ m1=(int)floor(log(size1+size2-1)/log(2)+1);
+ m1=(int)pow(2,m1);
+
+ in1b=malloc(2*(unsigned int)m1*sizeof(double));
+ for(i=0;i<m1;i++){
+ if (i<size1) in1b[i]=in1[i];
+ else in1b[i]=DoubleComplex(0,0);
+ }
+
+ in2b=malloc(2*(unsigned int)m1*sizeof(double));
+ for(i=0;i<m1;i++){
+ if (i<size2) in2b[i]=in2[i];
+ else in2b[i]=DoubleComplex(0,0);
+ }
+
+
+ zfftma(in1b,m1,1,in1b);
+ zfftma(in2b,m1,1,in2b);
+
+ result=malloc(2*(unsigned int)m1*sizeof(double));
+ zmula(in1b,in2b,m1,result);
+ zifftma(result,m1,1,result);
+
+ for (i=0;i<size1+size2-1;i++){
+ out[i]=result[i];
+ }
+}