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

📄 计算机控制课程设计.bas

📁 基于单片机的数据采集系统 完成数据采集并对采集的数据进行时频域分析 软硬结合
💻 BAS
字号:
Attribute VB_Name = "Module1"
Public n As Integer
Public nn As Integer '波形显示周期调节系数
Public data(2100) As Single
Public Interval, frequency As Single                   '采样频率

Public data2(2100) As Double                           'FFT数组
Public Pi As Double
'绘FFT图时的数学转换程序

Public Sub Rdft(n As Integer, wr As Double, wi As Double, a() As Double) '傅利叶快速变换
Dim j As Integer, k As Integer
Dim wkr As Double, wdr As Double, wdi As Double, ss As Double, xr As Double, xi As Double, yr As Double, yi As Double
    If (n > 4) Then
        wkr = 0
        wki = 0
        wdr = wi * wi
        wdi = wi * wr
        ss = 4 * wdi
        wr = 1 - 2 * wdr
        wi = 2 * wdi
        If (wi >= 0) Then
            Call Cdft(n, wr, wi, a)
            xi = a(0) - a(1)
            a(0) = a(0) + a(1)
            a(1) = xi
        End If
        For k = (n / 2) - 4 To 4 Step -4
            j = n - k
            xr = a(k + 2) - a(j - 2)
            xi = a(k + 3) + a(j - 1)
            yr = wdr * xr - wdi * xi
            yi = wdr * xi + wdi * xr
            a(k + 2) = a(k + 2) - yr
            a(k + 3) = a(k + 3) - yi
            a(j - 2) = a(j - 2) + yr
            a(j - 1) = a(j - 1) - yi
            wkr = wkr + ss * wdi
            wki = wki + ss * (0.5 - wdr)
            xr = a(k) - a(j)
            xi = a(k + 1) + a(j + 1)
            yr = wkr * xr - wki * xi
            yi = wkr * xi + wki * xr
            a(k) = a(k) - yr
            a(k + 1) = a(k + 1) - yi
            a(j) = a(j) + yr
            a(j + 1) = a(j + 1) - yi
            wdr = wdr + ss * wki
            wdi = wdi + ss * (0.5 - wkr)
        Next
        j = n - 2
        xr = a(2) - a(j)
        xi = a(3) + a(j + 1)
        yr = wdr * xr - wdi * xi
        yi = wdr * xi + wdi * xr
        a(2) = a(2) - yr
        a(3) = a(3) - yi
        a(j) = a(j) + yr
        a(j + 1) = a(j + 1) - yi
        If (wi < 0) Then
            a(1) = 0.5 * (a(0) - a(1))
            a(0) = a(0) - a(1)
            Call Cdft(n, wr, wi, a)
        End If
    Else
        If (wi < 0) Then
            a(1) = 0.5 * (a(0) - a(1))
            a(0) = a(0) - a(1)
        End If
        If (n > 2) Then
            xr = a(0) - a(2)
            xi = a(1) - a(3)
            a(0) = a(0) + a(2)
            a(1) = a(1) + a(3)
            a(2) = xr
            a(3) = xi
        End If
        If (wi >= 0) Then
            xi = a(0) - a(1)
            a(0) = a(0) + a(1)
            a(1) = xi
        End If
    End If

End Sub

Public Sub Cdft(n As Integer, wr As Double, wi As Double, a() As Double)
Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer
Dim wkr As Double, wki As Double, wdr As Double, wdi As Double, ss As Double, xr As Double, xi As Double
    m = n
    While (m > 4)
        l = m / 2
        wkr = 1
        wki = 0
        wdr = 1 - 2 * wi * wi
        wdi = 2 * wi * wr
        ss = 2 * wdi
        wr = wdr
        wi = wdi
        For j = 0 To n - m Step m
            i = j + l
            xr = a(j) - a(i)
            xi = a(j + 1) - a(i + 1)
            a(j) = a(j) + a(i)
            a(j + 1) = a(j + 1) + a(i + 1)
            a(i) = xr
            a(i + 1) = xi
            xr = a(j + 2) - a(i + 2)
            xi = a(j + 3) - a(i + 3)
            a(j + 2) = a(j + 2) + a(i + 2)
            a(j + 3) = a(j + 3) + a(i + 3)
            a(i + 2) = wdr * xr - wdi * xi
            a(i + 3) = wdr * xi + wdi * xr
        Next
        For k = 4 To l - 4 Step 4
            wkr = wkr - ss * wdi
            wki = wki + ss * wdr
            wdr = wdr - ss * wki
            wdi = wdi + ss * wkr
            For j = k To n - m + k Step m
                i = j + l
                xr = a(j) - a(i)
                xi = a(j + 1) - a(i + 1)
                a(j) = a(j) + a(i)
                a(j + 1) = a(j + 1) + a(i + 1)
                a(i) = wkr * xr - wki * xi
                a(i + 1) = wkr * xi + wki * xr
                xr = a(j + 2) - a(i + 2)
                xi = a(j + 3) - a(i + 3)
                a(j + 2) = a(j + 2) + a(i + 2)
                a(j + 3) = a(j + 3) + a(i + 3)
                a(i + 2) = wdr * xr - wdi * xi
                a(i + 3) = wdr * xi + wdi * xr
            Next
        Next
        m = l
    Wend
    If (m > 2) Then
        For j = 0 To n - 4 Step 4
            xr = a(j) - a(j + 2)
            xi = a(j + 1) - a(j + 3)
            a(j) = a(j) + a(j + 2)
            a(j + 1) = a(j + 1) + a(j + 3)
            a(j + 2) = xr
            a(j + 3) = xi
        Next
    End If
    If (n > 4) Then
        Call Bitrv2(n, a)
    End If
End Sub

Public Sub Bitrv2(n As Integer, a() As Double)
Dim j As Integer, j1 As Integer, k As Integer, kl As Integer, l As Integer, m As Integer, m2 As Integer, n2 As Integer
    m = n / 4
    m2 = m * 2
    n2 = n - 2
    k = 0
    For j = 0 To m2 - 4 Step 4
        If (j < k) Then
            xr = a(j)
            xi = a(j + 1)
            a(j) = a(k)
            a(j + 1) = a(k + 1)
            a(k) = xr
            a(k + 1) = xi
        ElseIf (j > k) Then
            j1 = n2 - j
            k1 = n2 - k
            xr = a(j1)
            xi = a(j1 + 1)
            a(j1) = a(k1)
            a(j1 + 1) = a(k1 + 1)
            a(k1) = xr
            a(k1 + 1) = xi
        End If
        k1 = m2 + k
        xr = a(j + 2)
        xi = a(j + 3)
        a(j + 2) = a(k1)
        a(j + 3) = a(k1 + 1)
        a(k1) = xr
        a(k1 + 1) = xi
        l = m
        While (k >= l)
            k = k - l
            l = l / 2
        Wend
        k = k + l
    Next
End Sub

⌨️ 快捷键说明

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