- 积分
- 1
- 注册时间
- 2008-4-18
- 仿真币
-
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2010-12-25 18:22:27
|
显示全部楼层
来自 上海闵行区
傅里叶变换是数值计算中非常常用的程序,有专门的程序包。
但对于不是特别专业的傅里叶变换,比如,简单的数据处理,那就不需要优化代码了。
下面是一个傅里叶变换FFT的Fortran程序,当然你也可以改成C语言程序,只要改成C语言的格式就行了。
SUBROUTINE FFT (AR,AI,N,M)
C
C An example of the fast Fourier transform subroutine with
C N = 2**M. AR and AI are the real and imaginary part of
C data in the input and corresponding Fourier coefficients
C in the output.
C
DIMENSION AR(N),AI(N)
C
PI = 4.0*ATAN(1.0)
N2 = N/2
C
N1 = 2**M
IF(N1.NE.N) STOP 'Indices do not match'
C
C Rearrange the data to the bit reversed order
C
L = 1
DO 150 K = 1, N-1
IF(K.LT.L) THEN
A1 = AR(L)
A2 = AI(L)
AR(L) = AR(K)
AR(K) = A1
AI(L) = AI(K)
AI(K) = A2
ENDIF
J = N2
DO 100 WHILE (J.LT.L)
L = L - J
J = J/2
100 END DO
L = L + J
150 CONTINUE
C
C Perform additions at all levels with reordered data
C
L2 = 1
DO 200 L = 1, M
Q = 0.0
L1 = L2
L2 = 2*L1
DO 190 K = 1, L1
U = COS(Q)
V = -SIN(Q)
Q = Q + PI/L1
DO 180 J = K, N, L2
I = J + L1
A1 = AR(I)*U - AI(I)*V
A2 = AR(I)*V + AI(I)*U
AR(I) = AR(J) - A1
AR(J) = AR(J) + A1
AI(I) = AI(J) - A2
AI(J) = AI(J) + A2
180 CONTINUE
190 CONTINUE
200 CONTINUE
RETURN
END
标签: C 程序 FFT Fortran 傅里叶变换 . |
|