⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module1.bas

📁 这是卫星通信方向图测量软件 采用了VB编程
💻 BAS
字号:
Attribute VB_Name = "fft"
Type COMPLEX
    Real As Single
    Cmpx As Single
    End Type
    

Function BitReverse(Index As Integer, BitNo As Integer) As Integer
    Dim Temp() As Integer
    Dim i As Integer, LL As Integer
    ReDim Temp(o To BitNo - 1)
    For i = 0 To BitNo - 1
        If (Index And 2 ^ i) <> 0 Then
            Temp(BitNo - 1 - i) = 1
        Else
            Temp(BitNo - 1 - i) = 0
        End If
    Next i
    LL = 0
    For i = 0 To BitNo - 1
        LL = LL + Temp(i) * 2 ^ i
   Next i
    BitReverse = LL
        
End Function
Public Function FFT2R(RS() As Single, X() As COMPLEX, ByVal m As Integer)
   ' Dim RS() As Single
   ' Dim X() As COMPLEX
    Dim W() As COMPLEX
    Dim n%
    Dim U As COMPLEX, Temp As COMPLEX, Tm As COMPLEX
    Dim i%, j%, k%, LL%, Le%, WIndex%
    Dim arg#, w_Real, w_Cmpx#, wrecur_Real#, wrecur_Cmpx#, wtemp_Real#
        For i = 0 To UBound(RS)
            X(i).Real = RS(i)
        Next i
        n = 2 ^ m
        Le = n / 2
        ReDim W(0 To Le - 1)
        arg = 4# * Atn(1#) / Le
        w_Real = Cos(arg): wrecur_Real = w_Real
        w_Cmpx = -Sin(arg): wrecur_Cmpx = w_Cmpx
        W(0).Real = 1: W(0).Cmpx = 0
        For j = 1 To Le - 1
            W(j).Real = wrecur_Real
            W(j).Cmpx = wrecur_Cmpx
            wtemp_Real = wrecur_Real * w_Real - wrecur_Cmpx * w_Cmpx
            wrecur_Cmpx = wrecur_Real * w_Cmpx + wrecur_Cmpx * w_Real
            wrecur_Real = wtemp_Real
        Next j
    Le = n
    WIndex = 1
    For LL = 0 To m - 1
        Le = Le / 2
        For j = 0 To Le - 1
            U = W(j * WIndex)
            For i = j To n - 1 Step 2 * Le
                Temp.Real = X(i).Real + X(i + Le).Real
                Temp.Cmpx = X(i).Cmpx + X(i + Le).Cmpx
                Tm.Real = X(i).Real - X(i + Le).Real
                Tm.Cmpx = X(i).Cmpx - X(i + Le).Cmpx
                X(i + Le).Real = Tm.Real * U.Real - Tm.Cmpx * U.Cmpx
                X(i + Le).Cmpx = Tm.Real * U.Cmpx + Tm.Cmpx * U.Real
                X(i) = Temp
            Next i
        Next j
        WIndex = 2 * WIndex
    Next LL
    ReDim fRe(0 To 2 ^ m - 1)
    For i = 0 To 2 ^ m - 1: fRe(i) = False: Next i
    For i = 1 To n - 2
        If Not fRe(i) Then
            j = BitReverse(i, m)
            fRe(j) = True
            Temp = X(j)
            X(j) = X(i)
            X(i) = Temp
        End If
    Next i
    
            
End Function


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -