📄 form1.frm
字号:
VERSION 5.00
Begin VB.Form Form1
BackColor = &H00FFC0FF&
Caption = "FIR数字滤波器设计"
ClientHeight = 8595
ClientLeft = 60
ClientTop = 450
ClientWidth = 10230
LinkTopic = "Form1"
ScaleHeight = 8595
ScaleWidth = 10230
StartUpPosition = 3 '窗口缺省
Begin VB.TextBox Text7
Height = 375
Left = 1080
TabIndex = 23
Top = 5880
Width = 975
End
Begin VB.CommandButton Command4
Caption = "查看"
Height = 375
Left = 3840
TabIndex = 22
Top = 5760
Width = 1575
End
Begin VB.CommandButton Command3
Caption = "查看"
Height = 375
Left = 3720
TabIndex = 21
Top = 3240
Width = 1575
End
Begin VB.TextBox Text6
Height = 375
Left = 1080
TabIndex = 15
Top = 5280
Width = 975
End
Begin VB.TextBox Text5
Height = 375
Left = 1080
TabIndex = 14
Top = 4680
Width = 975
End
Begin VB.TextBox Text4
Height = 375
Left = 1080
TabIndex = 13
Top = 4080
Width = 975
End
Begin VB.PictureBox Picture3
BackColor = &H00C0FFFF&
Height = 2295
Left = 2040
ScaleHeight = 2235
ScaleWidth = 8115
TabIndex = 10
Top = 6120
Width = 8175
End
Begin VB.PictureBox Picture2
BackColor = &H00C0FFFF&
Height = 2175
Left = 2040
ScaleHeight = 2115
ScaleWidth = 8115
TabIndex = 9
Top = 3600
Width = 8175
End
Begin VB.CommandButton Command2
Caption = "退出"
Height = 615
Left = 480
TabIndex = 5
Top = 7200
Width = 975
End
Begin VB.PictureBox Picture1
BackColor = &H00C0FFFF&
Height = 2055
Left = 2040
ScaleHeight = 1995
ScaleWidth = 8115
TabIndex = 4
Top = 1200
Width = 8175
End
Begin VB.TextBox Text3
BackColor = &H00FFFFC0&
Height = 615
Left = 8040
TabIndex = 3
Top = 480
Width = 975
End
Begin VB.TextBox Text2
BackColor = &H00FFFFC0&
Height = 615
Left = 6240
TabIndex = 2
Top = 480
Width = 975
End
Begin VB.TextBox Text1
BackColor = &H00FFFFC0&
Height = 615
Left = 4440
TabIndex = 1
Top = 480
Width = 975
End
Begin VB.CommandButton Command1
Caption = "查看"
Height = 615
Left = 720
TabIndex = 0
Top = 2040
Width = 975
End
Begin VB.Label Label11
BackColor = &H00FFC0FF&
Caption = "N值"
Height = 375
Left = 360
TabIndex = 24
Top = 6000
Width = 855
End
Begin VB.Label Label10
BackColor = &H00FFC0FF&
Caption = "经过滤波器后的频谱"
Height = 375
Left = 2040
TabIndex = 20
Top = 5880
Width = 2175
End
Begin VB.Label Label9
BackColor = &H00FFC0FF&
Caption = "正弦信号的频谱"
Height = 375
Left = 2040
TabIndex = 19
Top = 3360
Width = 2775
End
Begin VB.Label Label8
BackColor = &H00FFC0FF&
Caption = "幅值"
Height = 495
Left = 360
TabIndex = 18
Top = 5280
Width = 855
End
Begin VB.Label Label7
BackColor = &H00FFC0FF&
Caption = "抽样频率"
Height = 495
Left = 240
TabIndex = 17
Top = 4680
Width = 1095
End
Begin VB.Label Label6
BackColor = &H00FFC0FF&
Caption = "频率"
Height = 375
Left = 360
TabIndex = 16
Top = 4200
Width = 975
End
Begin VB.Label Label5
BackColor = &H00FFC0FF&
Caption = "正弦信号"
Height = 495
Left = 240
TabIndex = 12
Top = 3720
Width = 1695
End
Begin VB.Label Label4
BackColor = &H00FFC0FF&
Caption = "滤波器特性"
Height = 2055
Left = 840
TabIndex = 11
Top = 1320
Width = 1575
End
Begin VB.Label Label3
BackColor = &H00FFC0FF&
Caption = "窗口类型"
Height = 615
Left = 8160
TabIndex = 8
Top = 120
Width = 1575
End
Begin VB.Label Label2
BackColor = &H00FFC0FF&
Caption = "过度带宽DF"
Height = 615
Left = 6360
TabIndex = 7
Top = 120
Width = 1695
End
Begin VB.Label Label1
BackColor = &H00FFC0FF&
Caption = "数字截止频率FH"
Height = 615
Left = 4320
TabIndex = 6
Top = 120
Width = 1455
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Dim w(0 To 500), a(0 To 10), h(0 To 500), D As Double
Dim t(-5 To 500), tr(-5 To 500), ti(-5 To 500), max As Double
Dim i, j, k, N, NA1, NS1, I2, IS1, IV As Integer
Const M_PI = 3.1415926
Picture1.Cls
Picture1.Scale (-1, 2)-(15, -1)
Picture1.Line (-1, 0)-(15, 0)
Picture1.Line (0, 2)-(0, -0.5)
FH = Text1.Text
DF = Text2.Text
window_type = Text3.Text
Select Case window_type
Case 1
a(0) = 1
a(1) = -0
a(2) = 0
a(3) = -0
D = 2
Case 2
a(0) = 0.5
a(1) = -0.5
a(2) = 0
a(3) = -0
D = 4
Case 3
a(0) = 0.54
a(1) = -0.46
a(2) = 0
a(3) = -0
D = 4
Case 4
a(0) = 0.42
a(1) = -0.5
a(2) = 0.08
a(3) = -0
D = 6
Case 5
a(0) = 0.44959
a(1) = -0.49755
a(2) = 0.05677
a(3) = -0
D = 5.5
Case 6
a(0) = 0.42323
a(1) = -0.49755
a(2) = 0.07922
a(3) = -0
D = 6
Case 7
a(0) = 0.4021
a(1) = -0.49703
a(2) = 0.09392
a(3) = -0.00188
D = 7
Case 8
a(0) = 0.35878
a(1) = -0.48829
a(2) = 0.14128
a(3) = -0.01168
D = 9
End Select
N = D / DF + 1
NA1 = (N + 1) / 2
NS1 = (N - 1) / 2
For i = 0 To N Step 1
w(i) = 0
For j = 0 To 3 Step 1
w(i) = w(i) + a(j) * Cos(2 * M_PI * i / (N - 1) * j)
Next j
Next i
If N / 2 <> CDbl(N / 2) Then
For i = 0 To NA1 - 1 Step 1
IS1 = i + NS1
If i = 0 Then
h(IS1) = 2 * FH
Else: h(IS1) = 2 * (FH * Sin(2# * M_PI * i * FH) / (2 * M_PI * i * FH))
End If
IV = N - IS1 - 1
h(IV) = h(IS1)
Next i
Else
For i = -NS1 To NA1 Step 1
IS1 = i + NS1
h(IS1) = Sin(2 * M_PI * (i - 0.5) * FH) / (M_PI * (i - 0.5))
Next i
End If
For i = 0 To N - 1 Step 1
h(i) = h(i) * w(i)
Next i
For k = 0 To N - 1 Step 1
tr(k) = 0
ti(k) = 0
For j = 0 To N - 1 Step 1
tr(k) = tr(k) + h(j) * Cos(2 * M_PI * k * j / N)
ti(k) = ti(k) + h(j) * Sin(2 * M_PI * k * j / N)
Next j
tr(k) = Sqr(tr(k) * tr(k) + ti(k) * ti(k))
Next k
For k = 0 To (N - 1) / 2 Step 1
Picture1.Line (k, tr(k))-(k + 1, tr(k + 1)), RGB(255, 0, 0)
Next k
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Command3_Click()
Dim X, Y, a, q, l, f, j, k, N As Single
Dim t(-5 To 100), tr(-5 To 100), ti(-5 To 100), z(-5 To 100), max As Double
Const pi = 3.1415926
Picture2.Cls
Picture2.Scale (-5, 300)-(100, -10)
Picture2.Line (-4, 0)-(100, 0)
Picture2.Line (0, 300)-(0, -5)
Picture2.CurrentX = -2: Picture2.CurrentY = 50: Picture2.Print 0
Picture2.CurrentX = -1: Picture2.CurrentY = 450: Picture2.Print "Y"
Picture2.CurrentX = 90: Picture2.CurrentY = 50: Picture2.Print "X"
a = Text6.Text
f1 = Text5.Text
N = Text7.Text
For X = 0 To N - 1 Step 1
Y = a * Sin(2 * pi * f1 * X + pi / 2)
z(X) = Y
Next X
For k = 0 To N - 1 Step 1
tr(k) = 0
ti(k) = 0
For j = 0 To N - 1 Step 1
tr(k) = tr(k) + z(j) * Cos(2 * pi * k * j / N)
ti(k) = ti(k) + z(j) * Sin(2 * pi * k * j / N)
Next j
tr(k) = Sqr(tr(k) * tr(k) + ti(k) * ti(k))
Picture2.Line (k, 0)-(k, tr(k)), RGB(255, 0, 0)
Next k
End Sub
Private Sub Command4_Click()
Dim w(0 To 500), a(0 To 10), h(0 To 500), D As Double
Dim t(-5 To 500), tr(-5 To 500), ti(-5 To 500), max As Double
Dim i, j, k, N, NA1, NS1, I2, IS1, IV As Integer
Const M_PI = 3.1415926
Picture3.Cls
Picture3.Scale (-1, 2)-(15, -1)
Picture3.Line (-1, 0)-(15, 0)
Picture3.Line (0, 2)-(0, -0.5)
FH = Text1.Text
DF = Text2.Text
window_type = Text3.Text
Select Case window_type
Case 1
a(0) = 1
a(1) = -0
a(2) = 0
a(3) = -0
D = 2
Case 2
a(0) = 0.5
a(1) = -0.5
a(2) = 0
a(3) = -0
D = 4
Case 3
a(0) = 0.54
a(1) = -0.46
a(2) = 0
a(3) = -0
D = 4
Case 4
a(0) = 0.42
a(1) = -0.5
a(2) = 0.08
a(3) = -0
D = 6
Case 5
a(0) = 0.44959
a(1) = -0.49755
a(2) = 0.05677
a(3) = -0
D = 5.5
Case 6
a(0) = 0.42323
a(1) = -0.49755
a(2) = 0.07922
a(3) = -0
D = 6
Case 7
a(0) = 0.4021
a(1) = -0.49703
a(2) = 0.09392
a(3) = -0.00188
D = 7
Case 8
a(0) = 0.35878
a(1) = -0.48829
a(2) = 0.14128
a(3) = -0.01168
D = 9
End Select
N = D / DF + 1
NA1 = (N + 1) / 2
NS1 = (N - 1) / 2
For i = 0 To N Step 1
w(i) = 0
For j = 0 To 3 Step 1
w(i) = w(i) + a(j) * Cos(2 * M_PI * i / (N - 1) * j)
Next j
Next i
If N / 2 <> CDbl(N / 2) Then
For i = 0 To NA1 - 1 Step 1
IS1 = i + NS1
If i = 0 Then
h(IS1) = 2 * FH
Else: h(IS1) = 2 * (FH * Sin(2# * M_PI * i * FH) / (2 * M_PI * i * FH))
End If
IV = N - IS1 - 1
h(IV) = h(IS1)
Next i
Else
For i = -NS1 To NA1 Step 1
IS1 = i + NS1
h(IS1) = Sin(2 * M_PI * (i - 0.5) * FH) / (M_PI * (i - 0.5))
Next i
End If
For i = 0 To N - 1 Step 1
h(i) = h(i) * w(i)
Next i
For k = 0 To N - 1 Step 1
tr(k) = 0
ti(k) = 0
For j = 0 To N - 1 Step 1
tr(k) = tr(k) + h(j) * Cos(2 * M_PI * k * j / N)
ti(k) = ti(k) + h(j) * Sin(2 * M_PI * k * j / N)
Next j
tr(k) = Sqr(tr(k) * tr(k) + ti(k) * ti(k))
Next k
Dim X, Y, a1, f1 As Single
Dim t1(-5 To 100), tr1(-5 To 100), ti1(-5 To 100), z1(-5 To 100), p(0 To 500) As Double
Const pi = 3.1415926
Picture3.Cls
Picture3.Scale (-5, 300)-(100, -10)
Picture3.Line (-4, 0)-(100, 0)
Picture3.Line (0, 300)-(0, -5)
Picture3.CurrentX = -2: Picture3.CurrentY = 50: Picture3.Print 0
Picture3.CurrentX = -1: Picture3.CurrentY = 450: Picture3.Print "Y"
Picture3.CurrentX = 90: Picture3.CurrentY = 50: Picture3.Print "X"
a1 = Text6.Text
N1 = Text7.Text
f1 = Text5.Text
For X = 0 To N1 - 1 Step 1
Y = a1 * Sin(2 * pi * f1 * X + pi / 2)
z1(X) = Y
Next X
For k = 0 To N1 - 1 Step 1
tr1(k) = 0
ti1(k) = 0
For j = 0 To N1 - 1 Step 1
tr1(k) = tr1(k) + z1(j) * Cos(2 * pi * k * j / N1)
ti1(k) = ti1(k) + z1(j) * Sin(2 * pi * k * j / N1)
Next j
tr1(k) = Sqr(tr1(k) * tr1(k) + ti1(k) * ti1(k))
p(k) = tr1(k) * tr(k)
Next k
For k = 0 To N1 - 1 Step 1
Picture3.Line (k, 0)-(k, p(k))
Next k
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -