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

📄 fft.frm

📁 用matlab语言对数字图像处理进行了系统的阐述
💻 FRM
字号:
VERSION 5.00
Begin VB.Form form1 
   Caption         =   "一维傅里叶变换"
   ClientHeight    =   6300
   ClientLeft      =   165
   ClientTop       =   450
   ClientWidth     =   11655
   LinkTopic       =   "Form1"
   ScaleHeight     =   420
   ScaleMode       =   3  'Pixel
   ScaleWidth      =   777
   StartUpPosition =   2  '屏幕中心
   Begin VB.VScrollBar VScroll1 
      Enabled         =   0   'False
      Height          =   6195
      Left            =   11340
      Max             =   100
      TabIndex        =   2
      Top             =   60
      Value           =   50
      Width           =   255
   End
   Begin VB.PictureBox Picture2 
      BackColor       =   &H00FF0000&
      Height          =   3075
      Left            =   60
      ScaleHeight     =   201
      ScaleMode       =   3  'Pixel
      ScaleWidth      =   745
      TabIndex        =   1
      Top             =   3180
      Width           =   11235
   End
   Begin VB.PictureBox Picture1 
      BackColor       =   &H00FF0000&
      Height          =   3075
      Left            =   60
      ScaleHeight     =   201
      ScaleMode       =   3  'Pixel
      ScaleWidth      =   745
      TabIndex        =   0
      Top             =   60
      Width           =   11235
   End
   Begin VB.Menu menu 
      Caption         =   "函数"
      Begin VB.Menu menu1 
         Caption         =   "常数函数"
      End
      Begin VB.Menu menu2 
         Caption         =   "点函数"
      End
      Begin VB.Menu menu3 
         Caption         =   "Sin函数"
      End
      Begin VB.Menu menu4 
         Caption         =   "Sinc函数"
      End
      Begin VB.Menu menu5 
         Caption         =   "矩形函数"
      End
      Begin VB.Menu menu6 
         Caption         =   "三角函数"
      End
      Begin VB.Menu menu7 
         Caption         =   "随机函数"
      End
   End
   Begin VB.Menu menuq 
      Caption         =   "退出"
   End
End
Attribute VB_Name = "form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim x() As Single
Dim bz As Integer

Private Sub Form_Load()
    ReDim xr(1023) As Single
    ReDim xi(1023) As Single
    ReDim x(1023) As Single
    bz = 1
End Sub

Private Sub picshow(b As Boolean, p As PictureBox)
    '曲线显示程序
    Dim max As Single, min As Single
    Dim i As Integer
    Dim w As Single, h As Single
    '计算频谱值,最大最小值
    max = -1E+30
    min = 1E+30
    For i = 0 To 1023
        If b Then
            x(i) = Log(1# + Sqr(xr(i) * xr(i) + xi(i) * xi(i)))
        Else
            x(i) = xr(i)
        End If
        If x(i) > max Then max = x(i)
        If x(i) < min Then min = x(i)
    Next i
    '画图
    w = (p.ScaleWidth - 10) / 1023
    If max - min = 0 Then
        h = 0
    Else
        h = (p.ScaleHeight - 10) / (max - min)
    End If
    p.Cls
    '画第一点
    p.PSet (5, 5 + (max - x(0)) * h), &HFFFFFF
    '画其余线
    For i = 1 To 1023
        p.Line -(5 + i * w, 5 + (max - x(i)) * h), &HFFFFFF
    Next i
End Sub

Private Sub menu1_Click()
    VScroll1.Enabled = False
    bz = 1
    Call xxx
End Sub

Private Sub menu2_Click()
    VScroll1.Enabled = False
    bz = 2
    Call xxx
End Sub

Private Sub menu3_Click()
    bz = 3
    VScroll1.Enabled = True
    VScroll1.min = -30
    VScroll1.max = 70
    VScroll1.Value = 20
    Call xxx
End Sub

Private Sub menu4_Click()
    bz = 4
    VScroll1.Enabled = True
    VScroll1.min = -40
    VScroll1.max = 60
    VScroll1.Value = 10
    Call xxx
End Sub

Private Sub menu5_Click()
    bz = 5
    VScroll1.Enabled = True
    VScroll1.min = 1
    VScroll1.max = 511
    VScroll1.Value = 500
    Call xxx
End Sub

Private Sub menu6_Click()
    bz = 6
    VScroll1.Enabled = True
    VScroll1.min = 1
    VScroll1.max = 511
    VScroll1.Value = 500
    Call xxx
End Sub

Private Sub menu7_Click()
    VScroll1.Enabled = False
    bz = 7
    Call xxx

End Sub

Private Sub menuq_Click()
    End
End Sub

Private Sub xxx()
    Dim i As Integer
    Dim x As Single
    Dim pi As Single
    pi = 4 * Atn(1)
    Select Case bz
    Case 1
        '常数函数
        For i = 0 To 1023
            xr(i) = 1
            xi(i) = 0
        Next i
    Case 2
        '点函数
        For i = 0 To 1023
            xr(i) = 0
            xi(i) = 0
        Next i
        xr(512) = 1
    Case 3
        'Sin 函数
        For i = 0 To 1023
            xr(i) = Sin(0.01 * VScroll1.Value * (i - 512))
            xi(i) = 0
        Next i
    Case 4
        'Sinc 函数
        For i = 0 To 1023
            x = 0.01 * VScroll1.Value * pi * (i - 512)
            If x = 0 Then
                xr(i) = 1
            Else
                xr(i) = Sin(x) / x
            End If
            xi(i) = 0
        Next i
    Case 5
        '矩形函数
        For i = 0 To 511
            If i < VScroll1.Value Then
                xr(i) = 0
                xr(1023 - i) = 0
            Else
                xr(i) = 1
                xr(1023 - i) = 1
            End If
            xi(i) = 0
            xi(1023 - i) = 0
        Next i
    Case 6
        '三角函数
        For i = 0 To 511
            If i < VScroll1.Value Then
                xr(i) = 0
                xr(1023 - i) = 0
            Else
                xr(i) = (i - VScroll1.Value) / 511
                xr(1023 - i) = xr(i)
            End If
            xi(i) = 0
            xi(1023 - i) = 0
        Next i
    Case 7
        '随机函数
        For i = 0 To 1023
            xr(i) = Rnd
            xi(i) = 0
        Next i
    End Select
    '显示函数曲线
    Call picshow(False, Picture1)
    '傅里叶变换
    For i = 0 To 1023
        xr(i) = xr(i) * (-1) ^ i
    Next i
    Call FFT(1024, True)
    '显示频谱曲线
    Call picshow(True, Picture2)
End Sub

Private Sub VScroll1_Change()
    Call xxx
End Sub

⌨️ 快捷键说明

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