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

📄 frmfft.frm

📁 DFT数字信号采集滤波器实例演示程序
💻 FRM
字号:
VERSION 5.00
Object = "{BEF51F14-533E-11D4-A9AE-CCB0ED6C2979}#5.0#0"; "Trend.ocx"
Begin VB.Form FrmFFT 
   Caption         =   "傅立叶变换"
   ClientHeight    =   7785
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   8985
   LinkTopic       =   "Form1"
   ScaleHeight     =   7785
   ScaleWidth      =   8985
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command2 
      Caption         =   "Input Data"
      Height          =   495
      Left            =   120
      TabIndex        =   8
      Top             =   3600
      Width           =   1455
   End
   Begin VB.TextBox Text1 
      Alignment       =   2  'Center
      Height          =   375
      Left            =   120
      TabIndex        =   6
      Text            =   "360"
      Top             =   720
      Width           =   1335
   End
   Begin VB.CommandButton Command1 
      Caption         =   "运行"
      DownPicture     =   "FrmFFT.frx":0000
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   21.75
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   495
      Left            =   120
      TabIndex        =   5
      Top             =   2880
      Width           =   1455
   End
   Begin VB.Frame Frame1 
      Caption         =   "Select"
      Height          =   1215
      Left            =   120
      TabIndex        =   2
      Top             =   1320
      Width           =   1455
      Begin VB.OptionButton OptSelect 
         Caption         =   "INVERSE"
         Height          =   255
         Index           =   1
         Left            =   120
         TabIndex        =   4
         Top             =   840
         Width           =   1215
      End
      Begin VB.OptionButton OptSelect 
         Caption         =   "FORWARD"
         Height          =   375
         Index           =   0
         Left            =   120
         TabIndex        =   3
         Top             =   360
         Width           =   1215
      End
   End
   Begin cstTrend.Trend Trend1 
      Height          =   3585
      Left            =   1680
      TabIndex        =   0
      Top             =   120
      Width           =   6735
      _ExtentX        =   11880
      _ExtentY        =   6324
      BackPicture     =   "FrmFFT.frx":07E2
      BorderWidth     =   4
      AreaLeft        =   .1
      AreaTop         =   .14
      BufferSize      =   360
      XMax            =   360
      XDisplayMax     =   360
      XLabelFormat    =   "##0"
      DigitalStyle    =   1
      DigitalFontID   =   1
      DigitalDecimals =   2
      StatEnabled     =   -1  'True
      CursorMode      =   1
      CursorWidth     =   2
      VarNum          =   2
      VarLineColor0   =   16711680
      VarLineWidth0   =   2
      VarDigitalX0    =   .25
      VarDigitalY0    =   .07
      VarDigitalX1    =   .1
      VarDigitalY1    =   .07
      TrackBackPicture0=   "FrmFFT.frx":07FE
      CaptionNum      =   1
      CaptionText0    =   "原函数曲线"
      CaptionColor0   =   16711680
      CaptionX0       =   .53
      CaptionY0       =   .07
      CaptionFontID0  =   1
      FontNum         =   2
      BeginProperty Font0 {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "宋体"
         Size            =   10.5
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      BeginProperty Font1 {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "Times New Roman"
         Size            =   15
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
   End
   Begin cstTrend.Trend Trend2 
      Height          =   3585
      Left            =   1680
      TabIndex        =   1
      Top             =   3720
      Width           =   6735
      _ExtentX        =   11880
      _ExtentY        =   6324
      BackPicture     =   "FrmFFT.frx":081A
      BorderWidth     =   4
      AreaLeft        =   .1
      AreaTop         =   .14
      BufferSize      =   360
      XMax            =   360
      XDisplayMax     =   360
      XLabelFormat    =   "##0"
      DigitalStyle    =   1
      DigitalFontID   =   1
      DigitalDecimals =   2
      StatEnabled     =   -1  'True
      CursorMode      =   1
      CursorWidth     =   2
      VarNum          =   2
      VarLineColor0   =   16711680
      VarLineWidth0   =   2
      VarDigitalX0    =   .25
      VarDigitalY0    =   .07
      VarDigitalX1    =   .1
      VarDigitalY1    =   .07
      TrackBackPicture0=   "FrmFFT.frx":0836
      CaptionNum      =   1
      CaptionText0    =   "变换函数曲线"
      CaptionColor0   =   16711680
      CaptionX0       =   .53
      CaptionY0       =   .07
      CaptionFontID0  =   1
      FontNum         =   2
      BeginProperty Font0 {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "宋体"
         Size            =   10.5
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      BeginProperty Font1 {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "Times New Roman"
         Size            =   15
         Charset         =   0
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
   End
   Begin VB.Label Label1 
      Alignment       =   2  'Center
      Caption         =   "Number:"
      Height          =   375
      Left            =   120
      TabIndex        =   7
      Top             =   360
      Width           =   1215
   End
End
Attribute VB_Name = "FrmFFT"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim N As Integer
Dim M As Integer
Dim INPUTRE(360) As Double
Dim INPUTIM(360) As Double
Dim BUFFERRE(360) As Double
Dim BUFFERIM(360) As Double
Dim SIGN As Boolean
Dim TFRE(360) As Double
Dim TFIN(360) As Double
Dim TEMPRE As Double
Dim TEMPIM As Double
Private Sub Command1_Click()
Dim TFRE(360) As Double
Dim TFIM(360) As Double
Dim L As Integer
Dim H As Integer
Dim G As Integer
Dim R As Integer
Dim K As Integer
Dim J As Integer
Dim S As Integer
Dim T As Integer
'Dim II As Integer
Dim TFI As Integer
Dim Index As Integer
Dim IOUT As Integer
Dim TEMP As Integer

If OptSelect(1).Value Then

For I = 0 To N / 2
    BUFFERRE(I) = INPUTRE(I + N / 2 - 1)
    BUFFERIM(I) = INPUTIM(I + N / 2 - 1)
Next

For I = 0 To N / 2 - 2
    BUFFERRE(I + N / 2 + 1) = INPUTRE(I)
    BUFFERIM(I + N / 2 + 1) = INPUTIM(I)
Next

For I = 0 To N - 1
    INPUTRE(I) = BUFFERRE(I)
    INPUTIM(I) = BUFFERIM(I)
Next

End If

For I = 0 To N / 2 - 1
    TFRE(I) = Cos(-2 * PI * I / N)
    TFIM(I) = SIGN * Sin(-2 * PI * I / N)
    
Next

For I = 1 To M
    L = 0: H = 0: G = N / 2 ^ I
    For K = 0 To N - 1 Step G
        TFI = 0
        TFIFLAG = (-1) ^ (I + 1)
        For J = 0 To G - 1
            TFI = J * 2 ^ (I - 1)
            R = K + J: S = J + H: T = I + G + H
            If TFIFLAG > 0 Then
                TEMPRE = INPUTRE(S) + INPUTRE(T)
                TEMPIM = INPUTIM(S) + INPUTIM(T)
                BUFFERRE(R) = TEMPRE * TFRE(TFI) - TEMPIM * TFIM(TFI)
                BUFFERIM(R) = TEMPRE * TFIM(TFI) - TEMPIM * TFRE(TFI)
            Else
                BUFFERRE(R) = INPUTRE(S) + INPUTRE(T)
                BUFFERIM(R) = INPUTIM(S) + INPUTIM(T)
            End If
        Next
        L = L + 1: H = Int(L / 2) * G * 2
    Next
    For K = 0 To N - 1
        INPUTRE(K) = BUFFERRE(K)
        INPUTIM(K) = BUFFERIM(K)
    Next
Next
For I = 0 To N - 1
    INPUTRE(I) = BUFFERRE(I) / N
    INPUTIM(I) = BUFFERIM(I) / N
Next


For I = 0 To N - 1
    Index = I
    IOUT = 0
    For J = 1 To M
        TEMP = 1 And Index
        IOUT = IOUT * 2 + TEMP
        Index = Index / 2
    Next J
    BUFFERRE(I) = INPUTRE(IOUT)
    BUFFERIM(I) = INPUTIM(IOUT)
Next
If OptSelect(1).Value Then
    For I = 0 To N - 1
        INPUTRE(I) = BUFFERRE(I) * N
        INPUTIM(I) = BUFFERIM(I) * N
    Next
    
    
Else
    For I = 0 To N / 2
        INPUTRE(I + (N / 2 - 1)) = BUFFERRE(I)
        INPUTIM(I + (N / 2 - 1)) = BUFFERIM(I)
    Next
    For I = 0 To N / 2 - 2
        INPUTRE(I) = BUFFERRE(I + (N / 2 + 1))
        INPUTIM(I) = BUFFERIM(I + (N / 2 + 1))
    Next
    
End If

    For I = 0 To N - 1
    
    
    With Trend2
        .AddXY 0, I, INPUTRE(I)
        .AddXY 1, I, INPUTIM(I)
        .Refresh
        
    End With
        
    Next


End Sub

Private Sub Command2_Click()
Dim PI As Double
Dim A As Double
A = N / 360
PI = 3.1415926
For I = 0 To N - 1
    INPUTRE(I) = Cos(A * I * PI / 180) + Cos(2 * A * I * PI / 180) + Cos(3 * A * I * PI / 180) + Cos(4 * A * I * PI / 180) + Cos(5 * A * I * PI / 180)
    INPUTIM(I) = Sin(A * I * PI / 180) + Sin(2 * A * I * PI / 180) + Sin(3 * A * I * PI / 180) + Sin(4 * A * I * PI / 180) + Sin(5 * A * I * PI / 180)

    With Trend1
        
        .AddXY 0, I, INPUTRE(I)
        .AddXY 1, I, INPUTIM(I)
        .Refresh
        
    End With
Next I

End Sub

Private Sub Form_Load()
OptSelect(0).Value = True
SIGN = True
With Trend1
    .VarID = 1
    .VarDigitalX = 0.1
    .VarDigitalY = 0.07
End With
With Trend2
    .VarID = 1
    .VarDigitalX = 0.1
    .VarDigitalY = 0.07
End With
N = Val(Text1.Text)
End Sub



Private Sub OptSelect_Click(Index As Integer)
Select Case Index
Case 0
     SIGN = True
Case 1
    SIGN = False
End Select
End Sub

Private Sub Text1_Change()
N = Val(Text1.Text)
M = Log(N) / Log(2)
End Sub

⌨️ 快捷键说明

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