/* * 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 "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]; } free(result); free(in2b); free(in1b); }