Article View: comp.sys.transputer
Article #1719RE: FFT OCCAM CODE WANTED !!!
From: Jacob Hirbawi
Date: Thu, 19 Nov 1992 03:01
Date: Thu, 19 Nov 1992 03:01
105 lines
3244 bytes
3244 bytes
In comp.sys.transputer <1992Nov18.173159.5761@rmece49.upr.clu.edu>
Roque Pagan <rpagan@rmece02.upr.clu.edu> writes:
> I'm trying to locate some FFT source code in OCCAM. Any
> information would be greatly appreciated.
This is from a response I posted a few weeks ago:
... The code consists of three parts: (1) generate the 'twiddle factors' in
routine Omega,(2) do a fast in-place bit reversal in routine BitReverse,
and (3) do the fft operations.
To use it you need to declare four arrays: the real and imaginary part of your
data of size N; and the real and imaginary parts of the 'twiddle factors' of
size M where 2^M = N; for examples:
[512]REAL32 DataReal,DataImaginary:
[9]REAL32 OmegaReal,OmegaImaginary:
SEQ
DataReal := ( define or acquire your real data )
DataImaginary := ( define or acquire your imaginary data )
Fft(DataReal,DataImaginary,OmegaReal,OmegaImaginary)
-- DataReal and DataImaginary now correspond to the spectrum of the data.
Good Luck!
Jacob Hirbawi
JcbHrb@CERF.net
-- CUT HERE -------------------------------------------------------------------
PROC Omega([]REAL32 w1,w2)
INT i1,j1 :
REAL32 a1 :
SEQ
i1:=1
SEQ j1 = 0 FOR SIZE w1
SEQ
a1:=3.1415926345 (REAL32) /(REAL32 TRUNC i1)
w1[j1]:= COS(a1)
w2[j1]:= -SIN(a1)
i1:=i1+i1
:
PROC BitReverse([]REAL32 x1,x2)
INT i1,i2,i3,j1,j2,n :
REAL32 t1,t2 :
SEQ
n := SIZE x1
i2:=1
SEQ i1 = 1 FOR (n-1)
SEQ
IF
i1<i2
SEQ
t1:=x1[i1-1]
t2:=x2[i1-1]
x1[i1-1]:=x1[i2-1]
x2[i1-1]:=x2[i2-1]
x1[i2-1]:=t1
x2[i2-1]:=t2
TRUE
SKIP
i3 := n/2
WHILE i3<i2
SEQ
i2:=i2-i3
i3:=i3/2
i2:=i2+i3
:
PROC Fft([]REAL32 x1,x2,w1,w2)
INT i1,i2,i3,j1,j2,n,m,k1,k2:
REAL32 u1,u2,q1,q2,t1,t2:
SEQ
Omega(w1,w2)
BitReverse(x1,x2)
m := SIZE w1
n := SIZE x1
i1:=1
SEQ j1 = 0 FOR m
SEQ
i2:=0
WHILE i2<n
SEQ
u1:= 1.0 (REAL32)
u2:= 0.0 (REAL32)
SEQ i3 = i2 FOR i1
SEQ
k2:=i3+i1
q1:=(u1*x1[k2])-(u2*x2[k2])
q2:=(u2*x1[k2])+(u1*x2[k2])
x1[k2]:=x1[i3]-q1
x2[k2]:=x2[i3]-q2
x1[i3]:=x1[i3]+q1
x2[i3]:=x2[i3]+q2
t1:=u1
t2:=u2
u1:=(t1*w1[j1])-(t2*w2[j1])
u2:=(t2*w1[j1])+(t1*w2[j1])
i2:=i2+(i1+i1)
i1:=i1+i1
:
-- CUT HERE -------------------------------------------------------------------
Technical Details
Message-ID:
<3779@news.cerf.net>Path:
arc1-ca.pugleaf.net!sparky!uunet!ornl!rsg1.er.usgs.gov!darwin.sura.net!zaphod.mps.ohio-state.edu!sdd.hp.com!usc!news!nic.cerf.net!jcbhrbShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!sparky!uunet!ornl!rsg1.er.usgs.gov!darwin.sura.net!zaphod.mps.ohio-state.edu!sdd.hp.com!usc!news!nic.cerf.net!jcbhrb From: jcbhrb@nic.cerf.net (Jacob Hirbawi) Newsgroups: comp.sys.transputer Subject: RE: FFT OCCAM CODE WANTED !!! Message-ID: <3779@news.cerf.net> Date: 19 Nov 92 03:01:52 GMT Sender: news@news.cerf.net Organization: CERFnet Lines: 105 Nntp-Posting-Host: nic.cerf.net