/** * Interpolates multiple complex values y(x). * Complex output samples are packed in the specified output array as * real, imag, real, imag, .... * @param nxu number of input samples. * @param dxu input sampling interval. * @param fxu first input sampled x value. * @param yu input array[2*nxu] of sampled complex values y(x). * @param nxi number of output samples. * @param xi input array[nxi] of x values at which to interpolate. * @param yi output array[2*nxi] of interpolated complex values y(x). */ public void interpolateComplex( int nxu, double dxu, double fxu, float[] yu, int nxi, float[] xi, float[] yi) { double xscale = 1.0/dxu; double xshift = _lsinc-fxu*xscale; int nxum = nxu-_lsinc; for (int ixi=0; ixi<nxi; ++ixi) interpolateComplex(xscale,xshift,nxum,nxu,yu,ixi,xi[ixi],yi); }
/** * Interpolates multiple complex values y(x). * Complex output samples are packed in the specified output array as * real, imag, real, imag, .... * @param nxu number of input samples. * @param dxu input sampling interval. * @param fxu first input sampled x value. * @param yu input array[2*nxu] of sampled complex values y(x). * @param nxi number of output samples. * @param dxi output sampling interval. * @param fxi first output sampled x value. * @param yi output array[2*nxi] of interpolated complex values y(x). */ public void interpolateComplex( int nxu, double dxu, double fxu, float[] yu, int nxi, double dxi, double fxi, float[] yi) { double xscale = 1.0/dxu; double xshift = _lsinc-fxu*xscale; int nxum = nxu-_lsinc; for (int ixi=0; ixi<nxi; ++ixi) { double xi = fxi+ixi*dxi; interpolateComplex(xscale,xshift,nxum,nxu,yu,ixi,xi,yi); } }
/** * Interpolates multiple complex values y(x). * Complex output samples are packed in the specified output array as * real, imag, real, imag, .... * @param sxu sampling of input samples. * @param yu input array[2*nxu] of sampled complex values y(x). * @param sxi sampling of output samples. * @param yi output array[2*nxi] of interpolated complex values y(x). */ public void interpolateComplex( Sampling sxu, float[] yu, Sampling sxi, float[] yi) { Check.argument(sxu.isUniform(),"input sampling is uniform"); if (sxi.isUniform()) { interpolateComplex(sxu.getCount(),sxu.getDelta(),sxu.getFirst(),yu, sxi.getCount(),sxi.getDelta(),sxi.getFirst(),yi); } else { int nxu = sxu.getCount(); int nxi = sxi.getCount(); double xscale = 1.0/sxu.getDelta(); double xshift = _lsinc-sxu.getFirst()*xscale; int nxum = nxu-_lsinc; for (int ixi=0; ixi<nxi; ++ixi) { double xi = sxi.getValue(ixi); interpolateComplex(xscale,xshift,nxum,nxu,yu,ixi,xi,yi); } } }
si.interpolate(nxu,dxu,fxu,yr,nx,dx,fx,zr); si.interpolate(nxu,dxu,fxu,yi,nx,dx,fx,zi); si.interpolateComplex(nxu,dxu,fxu,yc,nx,dx,fx,zc); for (int ix=0; ix<nx; ++ix) { assertEquals(zr[ix],zc[2*ix ],0.0); si.interpolate(nxu,dxu,fxu,yr,nx,dx,fx,zr); si.interpolate(nxu,dxu,fxu,yi,nx,dx,fx,zi); si.interpolateComplex(nxu,dxu,fxu,yc,nx,dx,fx,zc); for (int ix=0; ix<nx; ++ix) { assertEquals(zr[ix],zc[2*ix ],0.0);