/** * 1d inverse discrete fourier transform see matlab's fft2 for more examples. Note that this will * throw an exception if the input isn't a vector * * @param inputC the input to transform * @return the inverse fourier transform of the passed in input */ public static ComplexNDArray complexInverseDisceteFourierTransform1d(ComplexNDArray inputC) { if (inputC.shape().length != 1) throw new IllegalArgumentException("Illegal input: Must be a vector"); double len = MatrixUtil.length(inputC); ComplexDouble c2 = new ComplexDouble(0, -2).muli(FastMath.PI).divi(len); ComplexDoubleMatrix range = MatrixUtil.complexRangeVector(0, len); ComplexDoubleMatrix div2 = range.transpose().mul(c2); ComplexDoubleMatrix div3 = range.mmul(div2).negi(); ComplexDoubleMatrix matrix = exp(div3).div(len); ComplexDoubleMatrix complexRet = matrix.mmul(inputC); return ComplexNDArray.wrap(inputC, complexRet); }
/** * 1d inverse discrete fourier transform see matlab's fft2 for more examples. Note that this will * throw an exception if the input isn't a vector * * @param inputC the input to transform * @return the inverse fourier transform of the passed in input */ public static ComplexFloatMatrix complexInverseDisceteFourierTransform1d( ComplexFloatMatrix inputC) { if (inputC.rows != 1 && inputC.columns != 1) throw new IllegalArgumentException("Illegal input: Must be a vector"); float len = MatrixUtil.length(inputC); ComplexFloat c2 = new ComplexFloat(0, -2).muli((float) FastMath.PI).divi(len); ComplexFloatMatrix range = MatrixUtil.complexRangeVector(0, (int) len); ComplexFloatMatrix div2 = range.transpose().mul(c2); ComplexFloatMatrix div3 = range.mmul(div2).negi(); ComplexFloatMatrix matrix = exp(div3).div(len); ComplexFloatMatrix complexRet = inputC.isRowVector() ? matrix.mmul(inputC) : inputC.mmul(matrix); return complexRet; }