コード例 #1
0
ファイル: bench_test.go プロジェクト: kreshikhin/go-fft
func BenchmarkFFTW(b *testing.B) {
	in := fftw.Alloc1d(N)
	out := fftw.Alloc1d(N)
	plan := fftw.PlanDft1d(in, out, fftw.Forward, fftw.Estimate)
	for i := 0; i < b.N; i++ {
		plan.Execute()
	}
}
コード例 #2
0
ファイル: fft_test.go プロジェクト: runningwild/go-fft
func FFTWSpec(c gospec.Context) {
	c.Specify("Check agains fftw", func() {
		N := 2 * 3 * 5 * 7 * 11
		in := make([]complex128, N)
		out_fft := make([]complex128, N)
		out_fftw := make([]complex128, N)
		for i := range in {
			in[i] = complex(float64(i/1000-100), float64(i)/10)
		}

		fftw.PlanDft1d(in, out_fftw, fftw.Forward, fftw.Estimate).Execute()
		fft.FFT(in, out_fft)

		tolerance := 1e-5
		for i := range out_fft {
			c.Expect(real(out_fft[i]), IsWithin(tolerance), real(out_fftw[i]))
			c.Expect(imag(out_fft[i]), IsWithin(tolerance), imag(out_fftw[i]))
		}
	})
}