📄 dspcoco.frm
字号:
VERSION 5.00
Begin VB.Form coco_dxp1
Caption = "coco"
ClientHeight = 10080
ClientLeft = 1410
ClientTop = 825
ClientWidth = 12795
LinkTopic = "Form1"
ScaleHeight = 10080
ScaleWidth = 12795
Begin VB.TextBox Text12
BackColor = &H80000003&
Height = 495
Left = 8040
TabIndex = 28
Text = "只读"
Top = 4440
Width = 1215
End
Begin VB.TextBox Text7
BackColor = &H80000003&
Height = 495
Left = 8040
TabIndex = 27
Text = "只读"
Top = 3720
Width = 1215
End
Begin VB.PictureBox Picture3
Height = 1815
Left = 1800
ScaleHeight = 1755
ScaleWidth = 4875
TabIndex = 26
Top = 7800
Width = 4935
End
Begin VB.PictureBox Picture2
Height = 1815
Left = 1800
ScaleHeight = 1755
ScaleWidth = 4875
TabIndex = 25
Top = 5040
Width = 4935
End
Begin VB.TextBox Text11
Height = 495
Left = 10920
TabIndex = 23
Text = "4"
Top = 1080
Width = 1215
End
Begin VB.TextBox Text10
Height = 495
Left = 9360
TabIndex = 22
Text = "2"
Top = 1080
Width = 1215
End
Begin VB.TextBox Text9
Height = 495
Left = 9360
TabIndex = 21
Text = "10"
Top = 480
Width = 1215
End
Begin VB.TextBox Text8
Height = 495
Left = 9360
TabIndex = 20
Text = "10"
Top = 0
Width = 1215
End
Begin VB.TextBox Text6
Height = 495
Left = 4920
TabIndex = 19
Text = "64"
Top = 600
Width = 1215
End
Begin VB.TextBox Text5
Height = 495
Left = 4920
TabIndex = 18
Text = "2.71828"
Top = 0
Width = 1215
End
Begin VB.CommandButton Command5
Caption = "结束"
Height = 615
Left = 360
TabIndex = 17
Top = 2760
Width = 615
End
Begin VB.PictureBox Picture1
Height = 1815
Left = 1800
ScaleHeight = 1755
ScaleWidth = 4875
TabIndex = 15
Top = 2880
Width = 4935
End
Begin VB.TextBox Text4
Height = 270
Left = 1320
TabIndex = 9
Text = "16"
Top = 1320
Width = 975
End
Begin VB.TextBox Text3
Height = 270
Left = 1320
TabIndex = 8
Text = "0"
Top = 960
Width = 975
End
Begin VB.TextBox Text2
Height = 270
Left = 1320
TabIndex = 7
Text = "1"
Top = 600
Width = 975
End
Begin VB.TextBox Text1
Height = 270
Left = 1320
TabIndex = 6
Text = "1"
Top = 240
Width = 975
End
Begin VB.CommandButton Command3
Caption = "执行pulse"
Height = 495
Left = 8760
TabIndex = 2
Top = 2160
Width = 1215
End
Begin VB.CommandButton Command2
Caption = "执行e(x)"
Height = 495
Left = 4680
TabIndex = 1
Top = 2160
Width = 1215
End
Begin VB.CommandButton command1
Caption = "执行sin(x)"
Height = 495
Left = 1320
TabIndex = 0
Top = 2160
Width = 1215
End
Begin VB.Label Label15
Caption = "FFT"
Height = 495
Left = 1320
TabIndex = 33
Top = 8880
Width = 1215
End
Begin VB.Label Label14
Caption = "DFT"
Height = 495
Left = 1200
TabIndex = 32
Top = 5640
Width = 1215
End
Begin VB.Label Label13
Caption = "采样信号"
Height = 615
Left = 1080
TabIndex = 31
Top = 3480
Width = 735
End
Begin VB.Label Label12
Caption = "FFT个数"
Height = 495
Left = 7320
TabIndex = 30
Top = 4560
Width = 1215
End
Begin VB.Label Label7
Caption = "DFT个数"
Height = 495
Left = 7320
TabIndex = 29
Top = 3840
Width = 855
End
Begin VB.Label Label11
Caption = "抽样频率"
Height = 495
Left = 10920
TabIndex = 24
Top = 720
Width = 1215
End
Begin VB.Label Label10
Caption = "脉冲幅度"
Height = 255
Left = 8160
TabIndex = 16
Top = 1200
Width = 855
End
Begin VB.Label Label9
Caption = "脉冲宽度"
Height = 495
Left = 8160
TabIndex = 14
Top = 600
Width = 1215
End
Begin VB.Label Label8
Caption = "脉冲周期"
Height = 375
Left = 8160
TabIndex = 13
Top = 120
Width = 735
End
Begin VB.Label Label6
Caption = "抽样频率"
Height = 255
Left = 3960
TabIndex = 12
Top = 720
Width = 855
End
Begin VB.Label Label5
Caption = "底数e"
Height = 255
Left = 3960
TabIndex = 11
Top = 120
Width = 855
End
Begin VB.Label Label4
Caption = "抽样频率"
Height = 255
Left = 240
TabIndex = 10
Top = 1320
Width = 855
End
Begin VB.Label Label3
Caption = "初相位"
Height = 255
Left = 240
TabIndex = 5
Top = 960
Width = 975
End
Begin VB.Label Label2
Caption = "信号频率"
Height = 255
Left = 240
TabIndex = 4
Top = 600
Width = 975
End
Begin VB.Label Label1
Caption = "振幅"
Height = 255
Left = 240
TabIndex = 3
Top = 240
Width = 975
End
End
Attribute VB_Name = "coco_dxp1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Picture2.Cls
Picture1.Cls
Picture3.Cls
Dim a, b, c, i, k, y As Double
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
k = Val(Text4.Text)
pi = 3.1415926
Picture1.Scale (-0.01 / b, a)-(4.01 / b, -a)
Picture1.CurrentX = 0
Picture1.CurrentY = 0
Picture1.Line (0, 0)-(1 / b, 0), &H8080
Picture1.Line (0, -a)-(0, a), &H8080
Dim chou(0 To 4096) As Double
Dim ge%
ge = 0
For i = 0 To (4 / b - 1 / k / b) Step 1 / k / b '在picture1中画x(n),并抽取数组
y = a * Sin(2 * pi * b * i + c)
chou(ge) = y
ge = ge + 1
Picture1.Line (i, 0)-(i, y), vbRed
Next i
Text7.Text = ge
Call DFT(chou())
Call FFT(chou())
End Sub
Private Sub Command2_Click()
Text7.Text = Val(Text6.Text)
Picture2.Cls
Picture1.Cls
Picture3.Cls
Dim e, k, t, i, y, sum, sumj, res, n, kk, summax As Double
e = Val(Text5.Text)
k = Val(Text6.Text)
t = 4
Picture1.Scale (-0.01 * t, e ^ t)-(t, -0.01 * e ^ t) 'picture1中画x(n),并抽取数组
Picture1.CurrentX = 0
Picture1.CurrentY = 0
Picture1.Line (0, 0)-(t, 0), &HFF00
Picture1.Line (0, 0)-(0, e ^ t), &HFF00
Dim chou(4096) As Double
n = 0
For i = 0 To t Step t / k
y = e ^ i
Picture1.Line (i, 0)-(i, y), vbRed
chou(n) = y
n = n + 1
Next i
Call DFT(chou())
Call FFT(chou())
End Sub
Private Sub Command3_Click()
Text7.Text = Val(Text11.Text)
Picture2.Cls
Picture1.Cls
Picture3.Cls
Dim chou(10000) As Double
Dim d, i, t, k, j, sum, sumj, res, n As Double
t = Val(Text8.Text)
d = Val(Text9.Text)
a = Val(Text10.Text)
j = Val(Text11.Text)
Picture1.Scale (-0.01 * 4 * t, a)-(4.01 * t, 0)
Picture1.CurrentX = 0
Picture1.CurrentY = 0
Picture1.Line (0, 0)-(4 * t, 0), vbBlue
Picture1.Line (0, 0)-(0, a), vbBlue
n = 0
k = 0
wqw: For i = 0 To n * t + d Step t / j
Picture1.Line (i, 0)-(i, a), vbRed
chou(k) = a
k = k + 1
Next i
For i = n * t + d + t / j To t * (n + 1) - t / j Step t / j
Picture1.Line (i, 0)-(i, 0), vbRed
chou(k) = 0
k = k + 1
Next i
n = n + 1
If n < 4 Then
GoTo wqw
End If
Call DFT(chou())
Call FFT(chou())
End Sub
Private Sub Command5_Click()
End
End Sub
Private Sub FFT(xr() As Double)
Dim i, j, a, b, k, m, n As Integer
Dim ep, arg, mt, s0, s1 As Integer
Dim pr, pi, ph, t, m_pi, f1, f2 As Double
Dim xi(0 To 4096), s(0 To 4096), c(0 To 4096) As Double
n = Val(Text7): m = Val(Text7): m_pi = 3.1415926
i = Round(Log(n) / Log(2))
n = 2 ^ i
m = 2 ^ i
Text12.Text = n
For i = 0 To n
xi(i) = 0
Next i
j = 0
'For i = 0 To n - 1 Step 1
' xr(i) = xr(i) / n
' xi(i) = xi(i) / n
'Next i
For i = 0 To n - 1 Step 1
If i < j Then
t = xr(i): xr(i) = xr(j): xr(j) = t
t = xi(i): xi(i) = xi(j): xi(j) = t
End If
k = n / 2
Do While k <= j
j = j - k
k = k / 2
Loop
j = j + k
Next i
ep = 0
i = n
Do While i <> 1
ep = ep + 1
i = i / 2
Loop
ph = 2 * m_pi / n
For i = 0 To n - 1 Step 1
s(i) = Sin(ph * i)
c(i) = Cos(ph * i)
Next i
a = 2
b = 1
For mt = 1 To ep Step 1
s0 = n / a
s1 = 0
For k = 0 To b - 1 Step 1
i = k
Do While i < n
arg = i + b
If k = 0 Then
pr = xr(arg)
pi = xi(arg)
Else
pr = xr(arg) * c(s1) - xi(arg) * s(s1)
pi = xr(arg) * s(s1) + xi(arg) * c(s1)
End If
xr(arg) = xr(i) - pr
xi(arg) = xi(i) - pi
xr(i) = xr(i) + pr
xi(i) = xi(i) + pi
i = i + a
Loop
s1 = s1 + s0
Next k
a = 2 * a
b = 2 * b
Next mt
For i = 0 To n - 1 Step 1
xr(i) = Sqr(xr(i) * xr(i) + xi(i) * xi(i))
Picture3.Line (i, 0)-(i, xr(i)), vbRed
Next i
End Sub
Private Sub DFT(chou() As Double)
Dim num(4096) As Double
Dim i, k, sum, sumj, res, kk, n, summax, pi As Double
k = Val(Text7.Text)
pi = 3.1415926
sum = 0
sumj = 0
summax = 0 '求x(k)中最大值以便定义picture2坐标
kk = 0
n = 0
ZZ: For i = 0 To k - 1
sum = sum + chou(i) * Cos(2 * pi * n * kk / k)
sumj = sumj - chou(i) * Sin(2 * pi * n * kk / k)
n = n + 1
Next i
res = Sqr(sum ^ 2 + sumj ^ 2)
num(kk) = res
If summax < res Then
summax = res
End If
If kk < k Then
kk = kk + 1
n = 0
sum = 0
sumj = 0
GoTo ZZ
End If
Picture2.Scale (-0.01 * k, 1.9 * summax)-(1.01 * k, -0.01 * k) '定义picture2
Picture2.Line (0, 0)-(k, 0), vbBlue
Picture2.Line (0, 0)-(0, 1.9 * summax), vbBlue
For i = 0 To k - 1
Picture2.Line (i, 0)-(i, num(i)), vbRed
Next i
Picture3.Scale (-0.01 * k, 1.9 * summax)-(1.01 * k, -0.01 * k) '定义picture2
Picture3.Line (0, 0)-(k, 0), vbBlue
Picture3.Line (0, 0)-(0, 1.9 * summax), vbBlue
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -