/** * Returns a new array of random values. * @param n1 1st array dimension. * @param n2 2nd array dimension. * @param n3 3rd array dimension. */ public static float[][][] crandfloat(int n1, int n2, int n3) { return crandfloat(_random,n1,n2,n3); }
/** * Returns a new array of random values. * @param n1 1st array dimension. */ public static float[] crandfloat(int n1) { return crandfloat(_random,n1); }
/** * Returns a new array of random values. * @param n1 1st array dimension. * @param n2 2nd array dimension. */ public static float[][] crandfloat(int n1, int n2) { return crandfloat(_random,n1,n2); }
private static double time(int nfft) { double maxtime = 2.0; FftComplex fft = new FftComplex(nfft); float[] cx = crandfloat(nfft); int count; Stopwatch sw = new Stopwatch(); sw.start(); for (count=0; sw.time()<maxtime; ++count) { fft.complexToComplex(-1,cx,cx); fft.complexToComplex( 1,cx,cx); fft.scale(nfft,cx); } sw.stop(); double time = sw.time()/(float)count; return time; } }
public void test1Random() { int nmax = 1000; for (int n=2; n<nmax; ++n) { int nfft = FftComplex.nfftSmall(n); FftComplex fft = new FftComplex(nfft); float[] cr = crandfloat(nfft); float[] cx = ccopy(cr); float[] cy = czerofloat(nfft); fft.complexToComplex( 1,cx,cy); fft.complexToComplex(-1,cy,cx); fft.scale(nfft,cx); assertEqual(cr,cx); } }
private void test1( boolean complex, boolean overwrite, boolean center, int padding, int n1, double d1, double f1) { if (n1<=0) return; Sampling s1 = new Sampling(n1,d1,f1); Fft fft = new Fft(s1); fft.setComplex(complex); fft.setOverwrite(overwrite); fft.setCenter(center); fft.setPadding(padding); float[] f = (complex)?crandfloat(n1):randfloat(n1); float[] g = fft.applyForward(f); float[] h = fft.applyInverse(g); if (complex) assertComplexEqual(n1,f,h); else assertRealEqual(n1,f,h); } private void test2(
public void test2Random() { int n1max = 26; int n2max = 26; for (int n2=2; n2<n2max; ++n2) { int n2fft = FftComplex.nfftSmall(n2); FftComplex fft2 = new FftComplex(n2fft); for (int n1=2; n1<n1max; ++n1) { int n1fft = FftComplex.nfftSmall(n1); FftComplex fft1 = new FftComplex(n1fft); float[][] cr = crandfloat(n1fft,n2fft); float[][] cx = ccopy(cr); float[][] cy = czerofloat(n1fft,n2fft); fft1.complexToComplex1( 1,n2fft,cx,cy); fft2.complexToComplex2( 1,n1fft,cy,cy); fft1.complexToComplex1(-1,n2fft,cy,cx); fft2.complexToComplex2(-1,n1fft,cx,cx); fft1.scale(n1fft,n2fft,cx); fft2.scale(n1fft,n2fft,cx); assertEqual(cr,cx); } } }
private void test2( boolean complex, boolean overwrite, boolean center1, boolean center2, int padding1, int padding2, int n1, double d1, double f1, int n2, double d2, double f2) { if (n1<=0 || n2<=0) return; Sampling s1 = new Sampling(n1,d1,f1); Sampling s2 = new Sampling(n2,d2,f2); Fft fft = new Fft(s1,s2); fft.setComplex(complex); fft.setOverwrite(overwrite); fft.setCenter1(center1); fft.setCenter2(center2); fft.setPadding1(padding1); fft.setPadding2(padding2); float[][] f = (complex)?crandfloat(n1,n2):randfloat(n1,n2); float[][] g = fft.applyForward(f); float[][] h = fft.applyInverse(g); if (complex) assertComplexEqual(n1,n2,f,h); else assertRealEqual(n1,n2,f,h); } private void test3(
public void test3Random() { int n1 = 11; int n2 = 12; int n3 = 13; int n1fft = FftComplex.nfftSmall(n1); int n2fft = FftComplex.nfftSmall(n2); int n3fft = FftComplex.nfftSmall(n3); FftComplex fft1 = new FftComplex(n1fft); FftComplex fft2 = new FftComplex(n2fft); FftComplex fft3 = new FftComplex(n3fft); float[][][] cr = crandfloat(n1fft,n2fft,n3fft); float[][][] cx = ccopy(cr); fft1.complexToComplex1( 1,n2fft,n3fft,cx,cx); fft2.complexToComplex2( 1,n1fft,n3fft,cx,cx); fft3.complexToComplex3( 1,n1fft,n2fft,cx,cx); fft1.complexToComplex1(-1,n2fft,n3fft,cx,cx); fft2.complexToComplex2(-1,n1fft,n3fft,cx,cx); fft3.complexToComplex3(-1,n1fft,n2fft,cx,cx); fft1.scale(n1fft,n2fft,n3fft,cx); fft2.scale(n1fft,n2fft,n3fft,cx); fft3.scale(n1fft,n2fft,n3fft,cx); assertEqual(cr,cx); }
private void test3( boolean complex, boolean overwrite, boolean center1, boolean center2, boolean center3, int padding1, int padding2, int padding3, int n1, double d1, double f1, int n2, double d2, double f2, int n3, double d3, double f3) { if (n1<=0 || n2<=0 || n3<=0) return; Sampling s1 = new Sampling(n1,d1,f1); Sampling s2 = new Sampling(n2,d2,f2); Sampling s3 = new Sampling(n3,d3,f3); Fft fft = new Fft(s1,s2,s3); fft.setComplex(complex); fft.setOverwrite(overwrite); fft.setCenter1(center1); fft.setCenter2(center2); fft.setCenter3(center3); fft.setPadding1(padding1); fft.setPadding2(padding2); fft.setPadding3(padding3); float[][][] f = (complex)?crandfloat(n1,n2,n3):randfloat(n1,n2,n3); float[][][] g = fft.applyForward(f); float[][][] h = fft.applyInverse(g); if (complex) assertComplexEqual(n1,n2,n3,f,h); else assertRealEqual(n1,n2,n3,f,h); }