窗体上放一个picturebox,名称改为picI_FFT。
在窗体中输入以下代码
Option
Explicit
'*模块********************************************************
'FFT0 数组下标以0开始
'AR() 数据实部 AI() 数据虚部
'N 数据点数,为2的整数次幂
'NI 变换方向 1为正变换,-1为反变换
'***************************************************************
Const
fftIn = 128
Const
Pi = 3.1415926
Public
Function
FFT0(AR()
As
Double
, AI()
As
Double
, N
As
Long
, ni
As
Long
)
Dim
i
As
Long
, j
As
Long
, k
As
Long
, L
As
Long
, M
As
Long
Dim
IP
As
Long
, LE
As
Long
Dim
L1
As
Long
, N1
As
Long
, N2
As
Long
Dim
SN
As
Double
, TR
As
Double
, TI
As
Double
, WR
As
Double
, WI
As
Double
Dim
UR
As
Double
, UI
As
Double
, US
As
Double
M = NTOM(N)
N2 = N / 2
N1 = N - 1
SN = ni
j = 1
For
i = 1
To
N1
If
i < j
Then
TR = AR(j - 1)
AR(j - 1) = AR(i - 1)
AR(i - 1) = TR
TI = AI(j - 1)
AI(j - 1) = AI(i - 1)
AI(i - 1) = TI
End
If
k = N2
While
(k < j)
j = j - k
k = k / 2
Wend
j = j + k
Next
i
For
L = 1
To
M
LE = 2 ^ L
L1 = LE / 2
UR = 1#
UI = 0#
WR = Cos(Pi / L1)
WI = SN * Sin(Pi / L1)
For
j = 1
To
L1
For
i = j
To
N
Step
LE
IP = i + L1
TR = AR(IP - 1) * UR - AI(IP - 1) * UI
TI = AI(IP - 1) * UR + AR(IP - 1) * UI
AR(IP - 1) = AR(i - 1) - TR
AI(IP - 1) = AI(i - 1) - TI
AR(i - 1) = AR(i - 1) + TR
AI(i - 1) = AI(i - 1) + TI
Next
i
US = UR
UR = US * WR - UI * WI
UI = UI * WR + US * WI
Next
j
Next
L
If
SN <> -1
Then
For
i = 1
To
N
AR(i - 1) = AR(i - 1) / N
AI(i - 1) = AI(i - 1) / N
Next
i
End
If
End
Function
Private
Function
NTOM(N
As
Long
)
As
Long
Dim
ND
As
Single
ND = N
NTOM = 0
While
(ND > 1)
ND = ND / 2
NTOM = NTOM + 1
Wend
End
Function
Private
Sub
Form_Load()
'*使用**********
Dim
i
As
Integer
Dim
xr(128)
As
Double
Dim
xi(128)
As
Double
Dim
IaIn(128)
As
Double
'赋值,IaIn(i)是采得的数据。
For
i = 0
To
128
IaIn(i) = Sin(i) + 0.5 * Sin(10 * i)
xr(i) = 100 * IaIn(i)
xi(i) = 0
Next
'FFT变换
Call
FFT0(xr(), xi(), 128, 1)
'绘图
picI_FFT.Scale (0, 100)-(fftIn - 1, -10)
picI_FFT.DrawWidth = 2
For
i = 0
To
fftIn - 1
picI_FFT.Line (i, Abs(xr(i)))-(i + 1, Abs(xr(i + 1))), vbRed
' picI_FFT.Line (i, Abs(xi(i)))-(i + 1, Abs(xi(i + 1))), vbBlue
' picI_FFT.Line (i, (xr(i) * xr(i) + xi(i) * xi(i)) \ 128)-(i + 1, (xr(i + 1) * xr(i + 1) + xi(i + 1) * xi(i + 1)) \ 128), vbBlack
Next
i
End
Sub
|
<Linker : http://bbs.csdn.net/topics/390241865>