package testinterpolation;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.math3.util.MathArrays;

public class TestJavaConvolution {

	public static double[] convolution(double a[],double b[]){
		return MathArrays.convolve(a,b);
	 * Convolution U(m)=Sum( H(m)X(n-m) )    0<=m=<(size(H)-1) n=size(H)
	 * This function reproduce the matlab conv function with shape='valid'
	 * @param a
	 * @param b
	 * @return
	public static double[] linearConvolutionMatlabValid(double a[],double b[]){
		//size of the array result without zero padd values
		int sizeResult=a.length+b.length-1;
		int matlabSizeResult=a.length-b.length+1;
		List<Integer> idxPadded=new ArrayList<Integer>();
		double[] u=new double[sizeResult];
		int idU=0;
		for(int n=0;n<sizeResult;n++){
			double val=0;
			for(int m=0;m<=n;m++){
				int idx1=m;
				int idx2=n-m;

		int diff=(sizeResult-matlabSizeResult);
		int idxStart=diff/2+diff%2;
		int idxEnd=u.length-diff/2;
		u=ArrayUtils.subarray(u, idxStart, idxEnd);
		return u; 
	public static void main(String[] args){
		double []a={1,2,3};
		double []b={1,2};
		//double[] r=TestJavaConvolution.convolution(a,b);
		double[] r=TestJavaConvolution.linearConvolutionMatlabValid(a,b);
		for(int i=0;i<r.length;i++){
			System.out.println("  "+r[i]+"  ");