VB实现FFT算法
程序列如下:
Public Function fft(ByRef Data() As Double) As Double() ReDim ffft(128, 2) As Double Dim length As Integer length = UBound(Data, 1) + 1 ' Dim numArray(length - 1, 2) As Double Dim index As Integer Dim num5 As Integer Dim num6 As Integer Dim num7 As Integer Dim num10 As Integer Dim num3 As Integer Dim num2 As Integer Dim num11 As Integer Dim num9 As Integer num9 = length Dim num8 As Integer num8 = CInt(Math.Log(CDbl(num9)) / Math.Log(2#)) Dim numArray2(128) As Double Dim numArray3(128) As Double Dim numArray4(128) As Double Dim numArray5(128) As Double For index = 0 To num9 - 1 numArray2(index) = Data(index) numArray3(index) = 0# Next Dim a As Double Dim num14 As Double num14 = 6.28318530717959 / CDbl(num9) index = 0 While index < (num9 \ 2) numArray4(index) = Math.Sin(a) numArray5(index) = Math.Cos(a) a = a + num14 index = index + 1 Wend num7 = num9 num3 = 1 For num2 = 1 To num8 num7 = num7 / 2 num6 = 0 For num11 = 1 To num3 num10 = 0 index = num6 While index <= ((num7 + num6) - 1) num5 = index + num7 a = numArray2(index) - numArray2(num5) num14 = numArray3(index) - numArray3(num5) numArray2(index) = numArray2(index) + numArray2(num5) numArray3(index) = numArray3(index) + numArray3(num5) If num10 = 0 Then numArray2(num5) = a numArray3(num5) = num14 Else numArray2(num5) = (a * numArray5(num10)) + (num14 * numArray4(num10)) numArray3(num5) = (num14 * numArray5(num10)) - (a * numArray4(num10)) End If num10 = num10 + num3 index = index + 1 Wend num6 = (num6 + num7) + num7 Next num3 = num3 + num3 Next num5 = num9 \ 2 For index = 1 To (num9 - 1) num6 = num9 If num5 < index Then Dim num12 As Double num12 = numArray2(index) numArray2(index) = numArray2(num5) numArray2(num5) = num12 num12 = numArray3(index) numArray3(index) = numArray3(num5) numArray3(num5) = num12 End If num6 = num6 / 2 Do While num5 >= num6 num5 = num5 - num6 num6 = num6 / 2 If num5 = 0 Then Exit Do End If Loop num5 = num5 + num6 Next For index = 0 To num9 - 1 numArray(index, 0) = numArray2(index) numArray(index, 1) = numArray3(index) numArray(index, 2) = ((numArray2(index)) ^ 2# + (numArray3(index)) ^ 2#) ^ 0.5 Next fft = numArray End Function |
默认了数组为128
如果你需要动态,请
redim各数组
输入:一串数据
输出:FFT变换后的数据,1维是实部 ,2维是虚部
<Linker : http://bbs.csdn.net/topics/390241865>

浙公网安备 33010602011771号