Discrete Fourier transform: Difference between revisions

Added Wren
m (J: emphasize similarity of notation for fourier and ifourier)
(Added Wren)
Line 67:
ComplexF64[28.0 + 0.0im, -3.3819660112501033 + 8.784022634946172im, -5.618033988749888 + 2.800168985749483im, -5.618033988749888 - 2.800168985749483im, -3.381966011250112 - 8.78402263494618im] =>
ComplexF64[2.0000000000000013 - 1.4210854715202005e-15im, 2.999999999999996 + 7.993605777301127e-16im, 5.000000000000002 + 2.1316282072803005e-15im, 6.999999999999998 - 8.881784197001252e-16im, 11.0 + 0.0im] =>
[2, 3, 5, 7, 11]
</pre>
 
=={{header|Wren}}==
{{libheader|Wren-complex}}
<lang ecmascript>import "/complex" for Complex
 
var dft = Fn.new { |x|
var N = x.count
var y = List.filled(N, null)
for (k in 0...N) {
y[k] = Complex.zero
for (n in 0...N) {
var t = Complex.imagMinusOne * Complex.two * Complex.pi * k * n / N
y[k] = y[k] + x[n] * t.exp
}
}
return y
}
 
var idft = Fn.new { |y|
var N = y.count
var x = List.filled(N, null)
for (n in 0...N) {
x[n] = Complex.zero
for (k in 0...N) {
var t = Complex.imagOne * Complex.two * Complex.pi * k * n / N
x[n] = x[n] + y[k] * t.exp
}
x[n] = x[n] / N
// clean x[n] to remove very small imaginary values
if (x[n].imag.abs < 1e-14) x[n] = Complex.new(x[n].real, 0)
}
return x
}
 
var x = [2, 3, 5, 7, 11]
System.print("Original sequence: %(x)")
for (i in 0...x.count) x[i] = Complex.new(x[i])
var y = dft.call(x)
Complex.showAsReal = true // don't display the imaginary part if it's 0
System.print("\nAfter applying the Discrete Fourier Transform:")
System.print(y)
System.print("\nAfter applying the Inverse Discrete Fourier Transform to the above transform:")
System.print(idft.call(y))</lang>
 
{{out}}
<pre>
Original sequence: [2, 3, 5, 7, 11]
 
After applying the Discrete Fourier Transform:
[28, -3.3819660112501 + 8.7840226349462i, -5.6180339887499 + 2.8001689857495i, -5.6180339887499 - 2.8001689857495i, -3.3819660112501 - 8.7840226349462i]
 
After applying the Inverse Discrete Fourier Transform to the above transform:
[2, 3, 5, 7, 11]
</pre>
9,487

edits