VB FFT 快速傅里叶变换/反变换2008-10-19 22:11模块******************************************************** 'FFT0 数组下标以 0 开始 FFT1 数组下标以 1 开始 'AR() 数据实部 AI() 数据虚部 'N 数据点数,为 2 的整数次幂 'NI 变换方向 1 为正变换,-1 为反变换 '*************************************************************** Pu blic Const Pi = 3.1415926 Pu blic Fu nction FFT0(AR() As Dou ble, AI() As Dou ble, N As Integer, ni As Integer) Dim i As Integer, j As Integer, k As Integer, L As Integer, M As Integer Dim IP As Integer, LE As Integer Dim L1 As Integer, N1 As Integer, N2 As Integer Dim SN As Dou ble, TR As Dou ble, TI As Dou ble, WR As Dou ble, WI As Dou ble Dim UR As Dou ble, UI As Dou ble, US As Dou ble 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 Nex t 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 Nex t i US = UR UR = US * WR - UI * WI UI = UI * WR + US * WI Nex t j Nex t L If SN <> -1 Then For i = 1 To N AR(i - 1) = AR(i - 1) / N AI(i - 1) = AI(i - 1) / N Nex t i End If End Fu nction Pu blic Fu nction FFT1(AR() As Dou ble, AI() As Dou ble, N As Integer, ni As Integer) Dim i As Integ...