annotate fft/fft.js/src/complex.rb @ 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 def real(x, offset = 0, i = nil, stride = nil)
Chris@25 2 if stride
Chris@25 3 "#{x}[2 * ((#{offset}) + (#{stride}) * (#{i}))]"
Chris@25 4 elsif i
Chris@25 5 "#{x}[2 * ((#{offset}) + (#{i}))]"
Chris@25 6 elsif offset
Chris@25 7 "#{x}[2 * (#{offset})]"
Chris@25 8 else
Chris@25 9 "#{x}[0]"
Chris@25 10 end
Chris@25 11 end
Chris@25 12
Chris@25 13 def imag(x, offset = 0, i = nil, stride = nil)
Chris@25 14 if stride
Chris@25 15 "#{x}[2 * ((#{offset}) + (#{stride}) * (#{i})) + 1]"
Chris@25 16 elsif i
Chris@25 17 "#{x}[2 * ((#{offset}) + (#{i})) + 1]"
Chris@25 18 elsif offset
Chris@25 19 "#{x}[2 * (#{offset}) + 1]"
Chris@25 20 else
Chris@25 21 "#{x}[1]"
Chris@25 22 end
Chris@25 23 end
Chris@25 24
Chris@25 25 def load(value, x, offset = 0, i = nil, stride = nil)
Chris@25 26 "var #{value}_r = #{real(x, offset, i, stride)}, #{value}_i = #{imag(x, offset, i, stride)}"
Chris@25 27 end
Chris@25 28
Chris@25 29 def store(value, x, offset = 0, i = nil, stride = nil)
Chris@25 30 "#{real(x, offset, i, stride)} = #{value}_r, #{imag(x, offset, i, stride)} = #{value}_i"
Chris@25 31 end
Chris@25 32
Chris@25 33 def cadd(result, a, b)
Chris@25 34 "var #{result}_r = #{a}_r + #{b}_r, #{result}_i = #{a}_i + #{b}_i"
Chris@25 35 end
Chris@25 36
Chris@25 37 def csub(result, a, b)
Chris@25 38 "var #{result}_r = #{a}_r - #{b}_r, #{result}_i = #{a}_i - #{b}_i"
Chris@25 39 end
Chris@25 40
Chris@25 41 def cmul(result, a, b)
Chris@25 42 "var #{result}_r = #{a}_r * #{b}_r - #{a}_i * #{b}_i, #{result}_i = #{a}_r * #{b}_i + #{a}_i * #{b}_r"
Chris@25 43 end