Difference between revisions of "Discrete Fourier transform"

From ScienceZero
Jump to: navigation, search
(New page: The DFT has no restrictions on array size (n) and is hard to get wrong. It is a very expensive transform that takes O*n<sup>2</sup> operations. 'Complex Forward transform For i = 0 To n...)
 
 
Line 43: Line 43:
 
  Next i
 
  Next i
  
[[Category:Computing]]
+
 
 +
[[Category:General information]]

Latest revision as of 14:49, 23 March 2008

The DFT has no restrictions on array size (n) and is hard to get wrong. It is a very expensive transform that takes O*n2 operations.

'Complex Forward transform
For i = 0 To n - 1
   arg = -(2 * PI * i) / n
   For k = 0 To n - 1
       cosarg = Cos(k * arg)
       sinarg = Sin(k * arg)
       dataOutR(i) = dataOutR(i) + (dataInR(k) * cosarg - dataInI(k) * sinarg)
       dataOutI(i) = dataOutI(i) + (dataInR(k) * sinarg + dataInI(k) * cosarg)
   Next k
   dataOutR(i) = dataOutR(i) / n
   dataOutI(i) = dataOutI(i) / n
Next i
'Real Forward transform
For i = 0 To n - 1
   arg = -(2 * PI * i) / n
   For k = 0 To n - 1
       dataOutR(i) = dataOutR(i) + (dataInR(k) * Cos(k * arg) + (dataInR(k) * Sin(k * arg))
   Next k
   dataOutR(i) = dataOutR(i) / n
Next i


'Complex Reverse transform
For i = 0 To n - 1
   arg = (2 * PI * i) / n
   For k = 0 To n - 1
       cosarg = Cos(k * arg)
       sinarg = Sin(k * arg)
       dataOutR(i) = dataOutR(i) + (dataInR(k) * cosarg - dataInI(k) * sinarg)
       dataOutI(i) = dataOutI(i) + (dataInR(k) * sinarg + dataInI(k) * cosarg)
   Next k
Next i
'Real Reverse transform
For i = 0 To n - 1
   arg = (2 * PI * i) / n
   For k = 0 To n - 1
       dataOutR(i) = dataOutR(i) + (dataInR(k) * Cos(k * arg) + (dataInR(k) * Sin(k * arg))
   Next k
Next i