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  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>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值