annotate fft/jsfft/test/test-fft_image.js @ 40:223f770b5341 kissfft-double tip

Try a double-precision kissfft
author Chris Cannam
date Wed, 07 Sep 2016 10:40:32 +0100
parents 66f9fd5ac611
children
rev   line source
Chris@25 1 require('../lib/fft_image')
Chris@25 2 require('./test_helper')
Chris@25 3
Chris@25 4 var assert = require('assert'),
Chris@25 5 fft_lib = require('../lib/fft'),
Chris@25 6 complex_array_lib = require('../lib/complex_array'),
Chris@25 7 ComplexArray = complex_array_lib.ComplexArray
Chris@25 8
Chris@25 9 function randomImageData(n) {
Chris@25 10 var array = new Uint8ClampedArray(n),
Chris@25 11 i
Chris@25 12
Chris@25 13 for(i = 0; i < n; i++) {
Chris@25 14 array[i] = Math.random() * 128
Chris@25 15 }
Chris@25 16 return array
Chris@25 17 }
Chris@25 18
Chris@25 19 function mergeRGBA(r, g, b, a) {
Chris@25 20 var n = r.length,
Chris@25 21 output = new Uint8ClampedArray(4 * n),
Chris@25 22 i
Chris@25 23
Chris@25 24 for(i = 0; i < n; i++) {
Chris@25 25 output[4 * i ] = r[i]
Chris@25 26 output[4 * i + 1] = g[i]
Chris@25 27 output[4 * i + 2] = b[i]
Chris@25 28 output[4 * i + 3] = a[i]
Chris@25 29 }
Chris@25 30 return output
Chris@25 31 }
Chris@25 32
Chris@25 33 function mergeComplexRGBA(r, g, b, a) {
Chris@25 34 var n = r.length,
Chris@25 35 output = new ComplexArray(4 * n),
Chris@25 36 i
Chris@25 37
Chris@25 38 for(i = 0; i < n; i++) {
Chris@25 39 output.real[4 * i ] = r.real[i]
Chris@25 40 output.imag[4 * i ] = r.imag[i]
Chris@25 41 output.real[4 * i + 1] = g.real[i]
Chris@25 42 output.imag[4 * i + 1] = g.imag[i]
Chris@25 43 output.real[4 * i + 2] = b.real[i]
Chris@25 44 output.imag[4 * i + 2] = b.imag[i]
Chris@25 45 output.real[4 * i + 3] = a.real[i]
Chris@25 46 output.imag[4 * i + 3] = a.imag[i]
Chris@25 47 }
Chris@25 48
Chris@25 49 return output
Chris@25 50 }
Chris@25 51
Chris@25 52 describe('fft', function() {
Chris@25 53 describe('#FFTImageDataRGBA()', function() {
Chris@25 54 it('transforms independent channels', function() {
Chris@25 55 var n = 48,
Chris@25 56 r = randomImageData(n),
Chris@25 57 g = randomImageData(n),
Chris@25 58 b = randomImageData(n),
Chris@25 59 a = new Uint8ClampedArray(n),
Chris@25 60 data = mergeRGBA(r, g, b, a),
Chris@25 61 expected = mergeComplexRGBA(DFT(r), DFT(g), DFT(b), DFT(a)),
Chris@25 62 output = fft_lib.FFTImageDataRGBA(data, n, 1)
Chris@25 63
Chris@25 64 assertComplexArraysAlmostEqual(expected, output)
Chris@25 65 })
Chris@25 66
Chris@25 67 xit('transforms in 2D')
Chris@25 68 })
Chris@25 69 })
Chris@25 70