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

📄 fft.bas

📁 用matlab语言对数字图像处理进行了系统的阐述
💻 BAS
字号:
Attribute VB_Name = "Module1"
Option Explicit
'一维快速傅氏正、逆变换
'定义全程变量
Public xr() As Single   '用于FFT或IFFT输入或输出的复数实部数据
Public xi() As Single   '用于FFT或IFFT输入或输出的复数虚部数据

Public Sub FFT(ByVal n As Integer, ByVal v As Boolean)
    '傅氏变换子程序
    'n-采样点数
    'v-变换形式:v=True为正变换,v=False值为逆变换
    'xr()、xi()-输入数据
    'xr()、xi()-输出数据
    Dim i As Integer, j As Integer, k As Integer, l As Integer, l1 As Integer, l2 As Integer
    Dim wr As Single, wi As Single, a1 As Single, a2 As Single
    Dim p1 As Integer, p2 As Integer, t1 As Single, t2 As Single
    l1 = n
    a2 = 8 * Atn(1#) / n
    '蝶形计算
    For l = 0 To Log(n + 1) / Log(2) - 1
        l2 = l1
        l1 = l1 / 2
        a1 = 0
        For j = 0 To l1 - 1
            wr = Cos(a1)
            If v Then wi = -Sin(a1) Else wi = Sin(a1)
            a1 = a1 + a2
            For i = l2 To n Step l2
                p1 = i - l2 + j
                p2 = p1 + l1
                t1 = xr(p1) - xr(p2)
                t2 = xi(p1) - xi(p2)
                xr(p1) = xr(p1) + xr(p2)
                xi(p1) = xi(p1) + xi(p2)
                xr(p2) = wr * t1 + wi * t2
                xi(p2) = wr * t2 - wi * t1
            Next i
        Next j
        a2 = a2 + a2
    Next l
    
    '码位到置
    j = 0
    l = n / 2
    For i = 0 To n - 2
        If i < j Then
            a1 = xr(j)
            a2 = xi(j)
            xr(j) = xr(i)
            xi(j) = xi(i)
            xr(i) = a1
            xi(i) = a2
        End If
        k = l
        Do While (k <= j)
            j = j - k
            k = k / 2
        Loop
        j = j + k
    Next i
    '系数
    a2 = 1 / Sqr(n)
    For i = 0 To n - 1
        xr(i) = a2 * xr(i)
        xi(i) = a2 * xi(i)
    Next i
End Sub

⌨️ 快捷键说明

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