PSN-L Email List Message

Subject: Re: FFT Code
From: "Geoffrey" gmvoeth@...........
Date: Wed, 18 Jul 2007 01:30:56 -0700


WunderBar;

I appreciate this since i am having great difficulty understanding it.

It seems simple at first but i quickly get lost
in the math and juggling of data.

I will be sure to play with these ideas and
show you results if they amount to anything.

If I can get the conversion it is easy to build a
BMP file of the results that can be universally shared.

I have not yet been able to get a (self programmed) FFT to really work but have a nice little program called SPECTRA that Nuhertz 
will not let me have the source code. If I could get their code it would be an easy
matter to tack on a recursive feature to build the
lines of the display history.


regards;
geoff

----- Original Message ----- 
From: 
To: ; 
Sent: Saturday, July 14, 2007 18:46
Subject: FFT Code


> Hi Geoff,
>
>  I write my code in Visual Basic, and also have another FFT routine  written
> in QBasic. The code listing below is what I use in my FFTDemo program,  which
> you can access from _http://www.jclahr.com/science/psn/mcclure/index.html_
> (http://www.jclahr.com/science/psn/mcclure/index.html)
>
> Cheers,
>
> Bob
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Private Sub FFT(Z() As Single)
> Inv = 0
> Call  FT(Inv, Npwr, Z())
> End Sub
>
>
> Private Sub IFT(Z() As Single)
> Inv =  1
> Call FT(Inv, Npwr, Z())
> End Sub
>
>
> Private Sub FT(Inv As Long, Npwr As Long, Z()  As Single)
> Dim PI As Single, Isi As Long, ex As Single
> Dim I As Long, n As  Long, J As Long, m As Long, Mmax As Long
> Dim Ang As Single, wr As Single, wi  As Single, tr As Single
> Dim ti As Single, istep As Long
> PI = 4# *  Atn(1#)
> Isi = -1
> If Inv > 0 Then Isi = 1
> n =  1
> For I = 1 To Npwr
> n = 2 * n
> Next I
> J =  0
> For I = 0 To n - 2
> If I < J Then
> ex =  Z(0, I)
> Z(0, I) = Z(0, J)
> Z(0, J) =  ex
> ex = Z(1, I)
> Z(1, I) = Z(1,  J)
> Z(1, J) = ex
> End If
> m = n / 2
> While m <= J
> J = J - m
> m = m / 2
> Wend
> J = J + m
> Next I
> Mmax = 1
> While Mmax  <> n
> istep = 2 * Mmax
> For m = 0 To Mmax -  1
> Ang = PI * Isi * m / Mmax
> wr =  Cos(Ang)
> wi = Sin(Ang)
> For I = m To  n - 1 Step istep
> J = I +  Mmax
> tr = wr * Z(0, J) - wi * Z(1,  J)
> ti = wi * Z(0, J) + wr * Z(1,  J)
> Z(0, J) = Z(0, I) -  tr
> Z(1, J) = Z(1, I) -  ti
> Z(0, I) = Z(0, I) +  tr
> Z(1, I) = Z(1, I) + ti
> Next  I
> Next m
> Mmax = istep
> Wend
> If Isi  > 0 Then
> For I = 0 To n - 1
> Z(0, I) =  (1 / n) * Z(0, I)
> Z(1, I) = (1 / n) * Z(1,  I)
> Next I
> End If
> End Sub
>
>
>
>
>
> ************************************** Get a sneak peak of the all-new AOL at
> http://discover.aol.com/memed/aolcom30tour
> 

__________________________________________________________

Public Seismic Network Mailing List (PSN-L)


[ Top ] [ Back ] [ Home Page ]