📄 module1.bas
字号:
Attribute VB_Name = "Module1"
Option Base 1
Public XX() As Double, YY() As Double, ZZ() As Double
Public XX1() As Double, YY1() As Double, ZZ1() As Double
Public XX2() As Double, YY2() As Double, ZZ2() As Double
Public Const Pi As Double = 3.14159265
Public ObjMatlab As Object, Result As String
'********************
Public REX_XX() As Double
Public IMX_XX() As Double
Public REX_YY() As Double
Public IMX_YY() As Double
Public REX_ZZ() As Double
Public IMX_ZZ() As Double
'********************
Public g_SignalFile As String
Public Points_Num As Long
Public Sample_HZ As Integer
'********************
Public Frekans_XX() As Double
Public Frekans_YY() As Double
Public Frekans_ZZ() As Double
'********************
Public Min As Double
Public Max As Double
Public MStep As Double
Sub DFT()
Dim i As Long, k As Long
Dim C As Long, j As Long
C = Points_Num
ReDim Preserve REX_XX(C)
ReDim Preserve IMX_XX(C)
ReDim Preserve REX_YY(C)
ReDim Preserve IMX_YY(C)
ReDim Preserve REX_ZZ(C)
ReDim Preserve IMX_ZZ(C)
ReDim Preserve Frekans_XX(C)
ReDim Preserve Frekans_YY(C)
ReDim Preserve Frekans_ZZ(C)
For k = 1 To C / 2
For i = 0 To C - 1
REX_XX(k) = REX_XX(k) + XX2(i + 1) * Cos(2 * Pi * k * i / Points_Num) * 2 / C
IMX_XX(k) = IMX_XX(k) + XX2(i + 1) * Sin(2 * Pi * k * i / Points_Num) * 2 / C
REX_YY(k) = REX_YY(k) + YY2(i + 1) * Cos(2 * Pi * k * i / Points_Num) * 2 / C
IMX_YY(k) = IMX_YY(k) + YY2(i + 1) * Sin(2 * Pi * k * i / Points_Num) * 2 / C
REX_ZZ(k) = REX_ZZ(k) + ZZ2(i + 1) * Cos(2 * Pi * k * i / Points_Num) * 2 / C
IMX_ZZ(k) = IMX_ZZ(k) + ZZ2(i + 1) * Sin(2 * Pi * k * i / Points_Num) * 2 / C
Next i
Frekans_XX(k) = Sqr(REX_XX(k) ^ 2 + IMX_XX(k) ^ 2)
Frekans_YY(k) = Sqr(REX_YY(k) ^ 2 + IMX_YY(k) ^ 2)
Frekans_ZZ(k) = Sqr(REX_ZZ(k) ^ 2 + IMX_ZZ(k) ^ 2)
Form1.ProgressBar1.Value = Int(100 * k / C * 2)
Form1.StatusBar1.Panels(1).Text = "计算中"
Next k
Form1.StatusBar1.Panels(1).Text = "频谱计算已完成"
Form1.StatusBar1.Refresh
Form1.ProgressBar1.Value = 0
End Sub
Sub FFT_FT(Min As Double, Max As Double, MStep As Double, n As Integer, jhHZ() As Double)
Dim i As Long, j As Long, k As Long
k = (Max - Min) / MStep + 1
For i = 1 To Points_Num
Sumx = Sumx + XX2(i)
Sumy = Sumy + YY2(i)
Sumz = Sumz + ZZ2(i)
Next i
Meanx = Sumx / Points_Num
Meany = Sumy / Points_Num
Meanz = Sumz / Points_Num
ReDim jhHZ(k, 1 To 2)
Select Case n
Case 0
For i = 1 To k
jhHZ(i, 1) = Min + MStep * (i - 1)
For j = 0 To Points_Num - 1
a = a + (XX2(j + 1) - Meanx) * Cos(2 * j * Pi * jhHZ(i, 1) / Sample_HZ) * 2 / Points_Num
b = b + (XX2(j + 1) - Meanx) * Sin(2 * j * Pi * jhHZ(i, 1) / Sample_HZ) * 2 / Points_Num
Next j
jhHZ(i, 2) = Sqr(a ^ 2 + b ^ 2)
a = 0
b = 0
Form1.ProgressBar1.Value = i * 100 / k
Next i
Case 1
For i = 1 To k
jhHZ(i, 1) = Min + MStep * (i - 1)
For j = 0 To Points_Num - 1
a = a + (YY2(j + 1) - Meany) * Cos(2 * j * Pi * jhHZ(i, 1) / Sample_HZ) * 2 / Points_Num
b = b + (YY2(j + 1) - Meany) * Sin(2 * j * Pi * jhHZ(i, 1) / Sample_HZ) * 2 / Points_Num
Next j
jhHZ(i, 2) = Sqr(a ^ 2 + b ^ 2)
a = 0
b = 0
Form1.ProgressBar1.Value = i * 100 / k
Next i
Case 2
For i = 1 To k
jhHZ(i, 1) = Min + MStep * (i - 1)
For j = 0 To Points_Num - 1
a = a + (YY2(j + 1) - Meany) * Cos(2 * j * Pi * jhHZ(i, 1) / Sample_HZ) * 2 / Points_Num
b = b + (YY2(j + 1) - Meany) * Sin(2 * j * Pi * jhHZ(i, 1) / Sample_HZ) * 2 / Points_Num
Next j
jhHZ(i, 2) = Sqr(a ^ 2 + b ^ 2)
a = 0
b = 0
Form1.ProgressBar1.Value = i * 100 / k
Next i
End Select
' Dim ChartArray1() As Double, ChartArray2() As Double, ChartArray3() As Double, Img() As Double
'' ReDim ChartArray1(k, 1 To 2)
' ReDim ChartArray2(k, 1 To 2)
' ReDim ChartArray3(k, 1 To 2)
'
' Dim Sumx As Double, Meanx As Double, Sumy As Double, Meany As Double, Sumz As Double, Meanz As Double
' For i = 1 To Points_Num
' Sumx = Sumx + XX2(i)
' Sumy = Sumy + YY2(i)
' Sumz = Sumz + ZZ2(i)
' Next i
' Meanx = Sumx / Points_Num
' Meany = Sumy / Points_Num
' Meanz = Sumz / Points_Num
'
' For i = 1 To k
' ChartArray1(i, 1) = Min + MStep * (i - 1)
' For j = 0 To Points_Num - 1
' a = a + (XX2(j + 1) - Meanx) * Cos(2 * j * Pi * (ChartArray1(i, 1)) / Sample_HZ) * 2 / Points_Num
' b = b + (XX2(j + 1) - Meanx) * Sin(2 * j * Pi * (ChartArray1(i, 1)) / Sample_HZ) * 2 / Points_Num
'
'
' Next j
' ChartArray1(i, 2) = Sqr(a ^ 2 + b ^ 2)
' a = 0
' b = 0
' Form1.ProgressBar1.Value = i * 100 / k
' Next i
'
'
'
' For i = 1 To k
' ChartArray2(i, 1) = Min + MStep * (i - 1)
' For j = 0 To Points_Num - 1
' a = a + (YY2(j + 1) - Meany) * Cos(2 * j * Pi * (ChartArray1(i, 1)) / Sample_HZ) * 2 / Points_Num
' b = b + (YY2(j + 1) - Meany) * Sin(2 * j * Pi * (ChartArray1(i, 1)) / Sample_HZ) * 2 / Points_Num
' Next j
' ChartArray2(i, 2) = Sqr(a ^ 2 + b ^ 2)
' a = 0
' b = 0
' Form1.ProgressBar1.Value = i * 100 / k
' Next i
'
'
' For i = 1 To k
' ChartArray3(i, 1) = Min + MStep * (i - 1)
' For j = 0 To Points_Num - 1
' a = a + (ZZ2(j + 1) - Meanz) * Cos(2 * j * Pi * (ChartArray1(i, 1)) / Sample_HZ) * 2 / Points_Num
' b = b + (ZZ2(j + 1) - Meanz) * Sin(2 * j * Pi * (ChartArray1(i, 1)) / Sample_HZ) * 2 / Points_Num
' Next j
' ChartArray3(i, 2) = Sqr(a ^ 2 + b ^ 2)
' a = 0
' b = 0
' Form1.ProgressBar1.Value = i * 100 / k
' Next i
' Call ObjMatlab.PutFullMatrix("x", "base", ChartArray1, Img)
' Call ObjMatlab.PutFullMatrix("y", "base", ChartArray2, Img)
' Call ObjMatlab.PutFullMatrix("z", "base", ChartArray3, Img)
'
' ObjMatlab.Execute ("subplot(3,1,1);plot(x(:,1),x(:,2));grid on")
' ObjMatlab.Execute ("subplot(3,1,2);plot(y(:,1),y(:,2));grid on")
' ObjMatlab.Execute ("subplot(3,1,3);plot(z(:,1),z(:,2));grid on")
'
'
'
'
'
'
'
' Close #2
'
End Sub
Sub Dect1(Matrix() As Double, lablXX() As Double)
Dim Img() As Double
Dim ss As String, i As Integer, j As Double
Dim Nnum1(1, 1) As Double
Dim bool As Boolean
Call ObjMatlab.PutFullMatrix("xx", "base", Matrix, Img)
ObjMatlab.Execute ("XX_num = length(xx');")
ObjMatlab.Execute ("[cA1,cD1] = dwt(xx','db1');")
ObjMatlab.Execute ("D1 = upcoef('d',cD1,'db1',1,XX_num );")
ObjMatlab.Execute ("sigma=std(D1);smean=mean(D1);")
ObjMatlab.Execute ("n1=find(abs((D1-smean))>sigma*3);")
ObjMatlab.Execute ("num1=length(n1);")
Call ObjMatlab.GetFullMatrix("num1", "base", Nnum1, Img)
ReDim Preserve lablXX(1 To Nnum1(1, 1))
Call ObjMatlab.GetFullMatrix("n1", "base", lablXX, Img)
End Sub
Sub DFT_Show()
Dim i As Integer, k As Long, ChartArray2() As Double
Dim Img() As Double
k = Int(Points_Num / 2) + 1
ReDim ChartArray2(Points_Num / 2, 1 To 2)
Select Case Form1.Combo1.ListIndex
Case 0
For i = 1 To Points_Num / 2
ChartArray2(i, 1) = i * Sample_HZ / Points_Num
ChartArray2(i, 2) = Frekans_XX(i)
Next i
Case 1
For i = 1 To Points_Num / 2
ChartArray2(i, 1) = i * Sample_HZ / Points_Num
ChartArray2(i, 2) = Frekans_YY(i)
Next i
Case 2
For i = 1 To Points_Num / 2
ChartArray2(i, 1) = i * Sample_HZ / Points_Num
ChartArray2(i, 2) = Frekans_ZZ(i)
Next i
End Select
Call ObjMatlab.PutFullMatrix("a", "base", ChartArray2, Img)
ObjMatlab.Execute ("plot(a(:,1),a(:,2));grid on")
'
' Dim ChartArray1() As Double, ChartArray2() As Double, ChartArray3() As Double, k As Integer, Img() As Double
' ReDim ChartArray1(Points_Num / 2, 1 To 2)
' ReDim ChartArray2(Points_Num / 2, 1 To 2)
' ReDim ChartArray3(Points_Num / 2, 1 To 2)
'
' For i = 1 To Points_Num / 2
' ChartArray1(i, 1) = i * Sample_HZ / Points_Num
' ChartArray1(i, 2) = Frekans_XX(i)
'
'
' ChartArray2(i, 1) = i * Sample_HZ / Points_Num
' ChartArray2(i, 2) = Frekans_YY(i)
'
' ChartArray3(i, 1) = i * Sample_HZ / Points_Num
' ChartArray3(i, 2) = Frekans_ZZ(i)
'
'
'
'
' Next i
'
'
'
'
' Call ObjMatlab.PutFullMatrix("x", "base", ChartArray1, Img)
' Call ObjMatlab.PutFullMatrix("y", "base", ChartArray2, Img)
' Call ObjMatlab.PutFullMatrix("z", "base", ChartArray3, Img)
'
' ObjMatlab.Execute ("subplot(3,1,1);plot(x(:,1),x(:,2));grid on")
' ObjMatlab.Execute ("subplot(3,1,2);plot(y(:,1),y(:,2));grid on")
' ObjMatlab.Execute ("subplot(3,1,3);plot(z(:,1),z(:,2));grid on")
'''
'''
''''
''
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -