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

📄 form1.frm

📁 DTMF信号产生原程序
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   6495
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   9870
   LinkTopic       =   "Form1"
   ScaleHeight     =   6495
   ScaleWidth      =   9870
   StartUpPosition =   3  'Windows Default
   Begin VB.ListBox List6 
      Height          =   4935
      Left            =   2640
      TabIndex        =   12
      Top             =   1440
      Width           =   975
   End
   Begin VB.ListBox List5 
      Height          =   4935
      Left            =   7800
      TabIndex        =   11
      Top             =   1440
      Width           =   975
   End
   Begin VB.ListBox List4 
      Height          =   4935
      Left            =   6240
      TabIndex        =   9
      Top             =   1440
      Width           =   1095
   End
   Begin VB.ListBox List3 
      Height          =   4935
      Left            =   4200
      TabIndex        =   7
      Top             =   1440
      Width           =   1095
   End
   Begin VB.CommandButton Command2 
      Caption         =   "开始检测"
      Height          =   375
      Left            =   4320
      TabIndex        =   5
      Top             =   240
      Width           =   1335
   End
   Begin VB.ListBox List2 
      Height          =   4935
      Left            =   1440
      TabIndex        =   4
      Top             =   1440
      Width           =   1095
   End
   Begin VB.ListBox List1 
      Height          =   4935
      Left            =   120
      TabIndex        =   3
      Top             =   1440
      Width           =   1215
   End
   Begin VB.TextBox Text1 
      Height          =   375
      Left            =   1440
      TabIndex        =   1
      Text            =   "1"
      Top             =   120
      Width           =   1095
   End
   Begin VB.CommandButton Command1 
      Caption         =   "开始计算"
      Height          =   375
      Left            =   2160
      TabIndex        =   0
      Top             =   720
      Width           =   975
   End
   Begin VB.Label Label6 
      Caption         =   "Label6"
      Height          =   375
      Left            =   1320
      TabIndex        =   14
      Top             =   720
      Width           =   855
   End
   Begin VB.Label Label5 
      Caption         =   "Label5"
      Height          =   375
      Left            =   240
      TabIndex        =   13
      Top             =   720
      Width           =   855
   End
   Begin VB.Label Label4 
      Caption         =   "通过检测后的值"
      Height          =   375
      Left            =   7920
      TabIndex        =   10
      Top             =   720
      Width           =   855
   End
   Begin VB.Label Label3 
      Caption         =   "滤波后的12个k值"
      Height          =   375
      Left            =   6360
      TabIndex        =   8
      Top             =   720
      Width           =   855
   End
   Begin VB.Label Label2 
      Caption         =   "范围控制后的值:"
      Height          =   375
      Left            =   4080
      TabIndex        =   6
      Top             =   720
      Width           =   855
   End
   Begin VB.Label Label1 
      Caption         =   "产生mfc信号"
      Height          =   375
      Left            =   240
      TabIndex        =   2
      Top             =   120
      Width           =   1095
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Option Base 1

Sub Init()
    MfcFrq(1) = 697
    MfcFrq(2) = 770
    MfcFrq(3) = 852
    MfcFrq(4) = 941
    
    MfcFrq(5) = 1209
    MfcFrq(6) = 1336
    MfcFrq(7) = 1447
    MfcFrq(8) = 1663
    
    MfcFFrq(1) = 1
    MfcSFrq(1) = 5
    
    MfcFFrq(2) = 1
    MfcSFrq(2) = 6
    
    MfcFFrq(3) = 1
    MfcSFrq(3) = 7
    
    MfcFFrq(4) = 2
    MfcSFrq(4) = 5
    
    MfcFFrq(5) = 2
    MfcSFrq(5) = 6
    
    MfcFFrq(6) = 2
    MfcSFrq(6) = 7
    
    MfcFFrq(7) = 3
    MfcSFrq(7) = 5
    
    MfcFFrq(8) = 3
    MfcSFrq(8) = 6
    
    MfcFFrq(9) = 3
    MfcSFrq(9) = 7
    
    MfcFFrq(10) = 1
    MfcSFrq(10) = 8
    
    MfcFFrq(11) = 2
    MfcSFrq(11) = 8
    
    MfcFFrq(12) = 3
    MfcSFrq(12) = 8
    
    MfcFFrq(13) = 4
    MfcSFrq(13) = 6
    
    MfcFFrq(14) = 4
    MfcSFrq(14) = 7
    
    MfcFFrq(15) = 4
    MfcSFrq(15) = 8
End Sub
Sub computeMFC(index As Long, frq As Long)
    Dim y1 As Double
    Dim y2 As Double
    Dim temp As Double
    
    Dim y  As Double
    
    Dim i As Double
    Dim resultstr As String
    
    y1 = 0
    y2 = -Sin(2 * 3.1415926 * frq / 8000)
    
    i = 0
    While (i <= N)
        y = 2 * Cos(2 * 3.1415926 * frq / 8000) * y1 - y2
        
        y2 = y1
        y1 = y
        resultstr = Str(CLng(y1 * 1024)) 'q值为10
        If (index = 1) Then
                List1.AddItem (resultstr)
        Else
                List2.AddItem (resultstr)
        End If
        
        i = i + 1
    Wend
End Sub

Sub RangeCtl()
    
End Sub

Private Sub Command1_Click()
    Dim frq As Long
    Dim i As Long
    Dim total As Long
    
    List1.Clear
    List2.Clear
    List6.Clear
    
    frq = MfcFrq(MfcFFrq(Int(Text1.Text)))
    computeMFC 1, frq
    Label5.Caption = Str(frq)
    
    frq = MfcFrq(MfcSFrq(Int(Text1.Text)))
    computeMFC 2, frq
    Label6.Caption = Str(frq)
    
    i = 1
    While (i <= N)
        total = Int(List1.List(i))
        total = total + Int(List2.List(i))
        List6.AddItem (Str(total))
        DecData(i) = total
        i = i + 1
    Wend
    
    
End Sub
Sub GainCtl()
    Dim gain_pow As Double
    Dim gain_lim As Double
    Dim gain_amp As Double
    Dim gain_lev As Double
    Dim gain_scale As Double
    Dim gain_const As Double
    Dim gain_delta As Double
    Dim i As Long
    
    
    gain_pow = 0
    gain_lev = 1 / N
    gain_lim = 1 / (64 * N)
    gain_const = 0.5 * Sqr(2) * Sqr(64 / N)
    gain_delta = 0.5
    i = 1
    
    While (i <= N)
        gain_pow = gain_pow + DecData(i) / 1024
        i = i + 1
    Wend
    gain_pow = Abs(gain_pow / 64)
    
   
    If gain_pow < gain_lim Then GoTo gainCtlEnd
    
    gain_amp = Sqr(gain_pow) * gain_const
    gain_scale = gain_lev / gain_amp
    
    i = 1
    While (i <= N)
        DecData(i) = gain_scale * DecData(i)
        List3.AddItem Str(CLng(DecData(i)))
        i = i + 1
    Wend
        
gainCtlEnd:
End Sub
Sub goertzel_ini()
    Dim i As Long
    i = 1
    While (i <= 16)
        vkn_1(i) = 0
        vkn_2(i) = 0
        i = i + 1
    Wend
End Sub
Sub Goertzel()
    
    Dim vkn As Double
    Dim i As Long
    Dim frq As Long
    goertzel_ini
    'vkn_1 = 0
    'vkn_2 = 0
    i = 1
    While (i <= N)
        MfcFrq(1) = 697
    MfcFrq(2) = 770
    MfcFrq(3) = 852
    MfcFrq(4) = 941
    
    MfcFrq(5) = 1209
    MfcFrq(6) = 1336
    MfcFrq(7) = 1447
    MfcFrq(8) = 1663
        frq = MfcFrq(1)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(1) - vkn_2(1) + DecData(i) / 1024
        vkn_2(1) = vkn_1(1)
        vkn_1(1) = vkn
        
        frq = MfcFrq(2)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(2) - vkn_2(2) + DecData(i) / 1024
        vkn_2(2) = vkn_1(2)
        vkn_1(2) = vkn
        
        frq = MfcFrq(3)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(3) - vkn_2(3) + DecData(i) / 1024
        vkn_2(3) = vkn_1(3)
        vkn_1(3) = vkn
        
        frq = MfcFrq(4)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(4) - vkn_2(4) + DecData(i) / 1024
        vkn_2(4) = vkn_1(4)
        vkn_1(4) = vkn
        
        frq = MfcFrq(5)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(5) - vkn_2(5) + DecData(i) / 1024
        vkn_2(5) = vkn_1(5)
        vkn_1(5) = vkn
        
        frq = MfcFrq(6)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(6) - vkn_2(6) + DecData(i) / 1024
        vkn_2(6) = vkn_1(6)
        vkn_1(6) = vkn
        
        
        frq = MfcFrq(7)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(7) - vkn_2(7) + DecData(i) / 1024
        vkn_2(7) = vkn_1(7)
        vkn_1(7) = vkn
        
        frq = MfcFrq(8)
        vkn = 2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(8) - vkn_2(8) + DecData(i) / 1024
        vkn_2(8) = vkn_1(8)
        vkn_1(8) = vkn
        
        i = i + 1
    Wend
    
    i = 1
    While (i <= 4)
        frq = MfcFrq(i)
       vkn2(i) = vkn_1(i) * vkn_1(i) - _
       2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(i) * vkn_2(i) _
       + vkn_2(i) * vkn_2(i)
       List4.AddItem Str(CLng(vkn2(i)))
       i = i + 1
    Wend
    
    List4.AddItem "========="
    i = 5
    While (i <= 8)
        frq = MfcFrq(i)
       vkn2(i) = vkn_1(i) * vkn_1(i) - _
       2 * Cos(2 * 3.1415926 * frq / 8000) * vkn_1(i) * vkn_2(i) _
       + vkn_2(i) * vkn_2(i)
       List4.AddItem Str(CLng(vkn2(i)))
       i = i + 1
    Wend
    
End Sub

Sub checks()
    Dim i As Long
    i = 1
    'max1=
    ' While (i <= 12)
    '     If vkn2(i) > max1 Then
End Sub
Private Sub Command2_Click()
    List4.Clear
    List3.Clear
    
    
    'Call GainCtl
    Call Goertzel
    
 
    
End Sub

Private Sub Form_Load()
   Init
End Sub

⌨️ 快捷键说明

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