📄 frmfft.frm
字号:
VERSION 5.00
Object = "{BEF51F14-533E-11D4-A9AE-CCB0ED6C2979}#5.0#0"; "Trend.ocx"
Begin VB.Form FrmFFT
Caption = "傅立叶变换"
ClientHeight = 7785
ClientLeft = 60
ClientTop = 450
ClientWidth = 8985
LinkTopic = "Form1"
ScaleHeight = 7785
ScaleWidth = 8985
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton Command2
Caption = "Input Data"
Height = 495
Left = 120
TabIndex = 8
Top = 3600
Width = 1455
End
Begin VB.TextBox Text1
Alignment = 2 'Center
Height = 375
Left = 120
TabIndex = 6
Text = "360"
Top = 720
Width = 1335
End
Begin VB.CommandButton Command1
Caption = "运行"
DownPicture = "FrmFFT.frx":0000
BeginProperty Font
Name = "宋体"
Size = 21.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 495
Left = 120
TabIndex = 5
Top = 2880
Width = 1455
End
Begin VB.Frame Frame1
Caption = "Select"
Height = 1215
Left = 120
TabIndex = 2
Top = 1320
Width = 1455
Begin VB.OptionButton OptSelect
Caption = "INVERSE"
Height = 255
Index = 1
Left = 120
TabIndex = 4
Top = 840
Width = 1215
End
Begin VB.OptionButton OptSelect
Caption = "FORWARD"
Height = 375
Index = 0
Left = 120
TabIndex = 3
Top = 360
Width = 1215
End
End
Begin cstTrend.Trend Trend1
Height = 3585
Left = 1680
TabIndex = 0
Top = 120
Width = 6735
_ExtentX = 11880
_ExtentY = 6324
BackPicture = "FrmFFT.frx":07E2
BorderWidth = 4
AreaLeft = .1
AreaTop = .14
BufferSize = 360
XMax = 360
XDisplayMax = 360
XLabelFormat = "##0"
DigitalStyle = 1
DigitalFontID = 1
DigitalDecimals = 2
StatEnabled = -1 'True
CursorMode = 1
CursorWidth = 2
VarNum = 2
VarLineColor0 = 16711680
VarLineWidth0 = 2
VarDigitalX0 = .25
VarDigitalY0 = .07
VarDigitalX1 = .1
VarDigitalY1 = .07
TrackBackPicture0= "FrmFFT.frx":07FE
CaptionNum = 1
CaptionText0 = "原函数曲线"
CaptionColor0 = 16711680
CaptionX0 = .53
CaptionY0 = .07
CaptionFontID0 = 1
FontNum = 2
BeginProperty Font0 {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BeginProperty Font1 {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Times New Roman"
Size = 15
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
End
Begin cstTrend.Trend Trend2
Height = 3585
Left = 1680
TabIndex = 1
Top = 3720
Width = 6735
_ExtentX = 11880
_ExtentY = 6324
BackPicture = "FrmFFT.frx":081A
BorderWidth = 4
AreaLeft = .1
AreaTop = .14
BufferSize = 360
XMax = 360
XDisplayMax = 360
XLabelFormat = "##0"
DigitalStyle = 1
DigitalFontID = 1
DigitalDecimals = 2
StatEnabled = -1 'True
CursorMode = 1
CursorWidth = 2
VarNum = 2
VarLineColor0 = 16711680
VarLineWidth0 = 2
VarDigitalX0 = .25
VarDigitalY0 = .07
VarDigitalX1 = .1
VarDigitalY1 = .07
TrackBackPicture0= "FrmFFT.frx":0836
CaptionNum = 1
CaptionText0 = "变换函数曲线"
CaptionColor0 = 16711680
CaptionX0 = .53
CaptionY0 = .07
CaptionFontID0 = 1
FontNum = 2
BeginProperty Font0 {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "宋体"
Size = 10.5
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
BeginProperty Font1 {0BE35203-8F91-11CE-9DE3-00AA004BB851}
Name = "Times New Roman"
Size = 15
Charset = 0
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
End
Begin VB.Label Label1
Alignment = 2 'Center
Caption = "Number:"
Height = 375
Left = 120
TabIndex = 7
Top = 360
Width = 1215
End
End
Attribute VB_Name = "FrmFFT"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim N As Integer
Dim M As Integer
Dim INPUTRE(360) As Double
Dim INPUTIM(360) As Double
Dim BUFFERRE(360) As Double
Dim BUFFERIM(360) As Double
Dim SIGN As Boolean
Dim TFRE(360) As Double
Dim TFIN(360) As Double
Dim TEMPRE As Double
Dim TEMPIM As Double
Private Sub Command1_Click()
Dim TFRE(360) As Double
Dim TFIM(360) As Double
Dim L As Integer
Dim H As Integer
Dim G As Integer
Dim R As Integer
Dim K As Integer
Dim J As Integer
Dim S As Integer
Dim T As Integer
'Dim II As Integer
Dim TFI As Integer
Dim Index As Integer
Dim IOUT As Integer
Dim TEMP As Integer
If OptSelect(1).Value Then
For I = 0 To N / 2
BUFFERRE(I) = INPUTRE(I + N / 2 - 1)
BUFFERIM(I) = INPUTIM(I + N / 2 - 1)
Next
For I = 0 To N / 2 - 2
BUFFERRE(I + N / 2 + 1) = INPUTRE(I)
BUFFERIM(I + N / 2 + 1) = INPUTIM(I)
Next
For I = 0 To N - 1
INPUTRE(I) = BUFFERRE(I)
INPUTIM(I) = BUFFERIM(I)
Next
End If
For I = 0 To N / 2 - 1
TFRE(I) = Cos(-2 * PI * I / N)
TFIM(I) = SIGN * Sin(-2 * PI * I / N)
Next
For I = 1 To M
L = 0: H = 0: G = N / 2 ^ I
For K = 0 To N - 1 Step G
TFI = 0
TFIFLAG = (-1) ^ (I + 1)
For J = 0 To G - 1
TFI = J * 2 ^ (I - 1)
R = K + J: S = J + H: T = I + G + H
If TFIFLAG > 0 Then
TEMPRE = INPUTRE(S) + INPUTRE(T)
TEMPIM = INPUTIM(S) + INPUTIM(T)
BUFFERRE(R) = TEMPRE * TFRE(TFI) - TEMPIM * TFIM(TFI)
BUFFERIM(R) = TEMPRE * TFIM(TFI) - TEMPIM * TFRE(TFI)
Else
BUFFERRE(R) = INPUTRE(S) + INPUTRE(T)
BUFFERIM(R) = INPUTIM(S) + INPUTIM(T)
End If
Next
L = L + 1: H = Int(L / 2) * G * 2
Next
For K = 0 To N - 1
INPUTRE(K) = BUFFERRE(K)
INPUTIM(K) = BUFFERIM(K)
Next
Next
For I = 0 To N - 1
INPUTRE(I) = BUFFERRE(I) / N
INPUTIM(I) = BUFFERIM(I) / N
Next
For I = 0 To N - 1
Index = I
IOUT = 0
For J = 1 To M
TEMP = 1 And Index
IOUT = IOUT * 2 + TEMP
Index = Index / 2
Next J
BUFFERRE(I) = INPUTRE(IOUT)
BUFFERIM(I) = INPUTIM(IOUT)
Next
If OptSelect(1).Value Then
For I = 0 To N - 1
INPUTRE(I) = BUFFERRE(I) * N
INPUTIM(I) = BUFFERIM(I) * N
Next
Else
For I = 0 To N / 2
INPUTRE(I + (N / 2 - 1)) = BUFFERRE(I)
INPUTIM(I + (N / 2 - 1)) = BUFFERIM(I)
Next
For I = 0 To N / 2 - 2
INPUTRE(I) = BUFFERRE(I + (N / 2 + 1))
INPUTIM(I) = BUFFERIM(I + (N / 2 + 1))
Next
End If
For I = 0 To N - 1
With Trend2
.AddXY 0, I, INPUTRE(I)
.AddXY 1, I, INPUTIM(I)
.Refresh
End With
Next
End Sub
Private Sub Command2_Click()
Dim PI As Double
Dim A As Double
A = N / 360
PI = 3.1415926
For I = 0 To N - 1
INPUTRE(I) = Cos(A * I * PI / 180) + Cos(2 * A * I * PI / 180) + Cos(3 * A * I * PI / 180) + Cos(4 * A * I * PI / 180) + Cos(5 * A * I * PI / 180)
INPUTIM(I) = Sin(A * I * PI / 180) + Sin(2 * A * I * PI / 180) + Sin(3 * A * I * PI / 180) + Sin(4 * A * I * PI / 180) + Sin(5 * A * I * PI / 180)
With Trend1
.AddXY 0, I, INPUTRE(I)
.AddXY 1, I, INPUTIM(I)
.Refresh
End With
Next I
End Sub
Private Sub Form_Load()
OptSelect(0).Value = True
SIGN = True
With Trend1
.VarID = 1
.VarDigitalX = 0.1
.VarDigitalY = 0.07
End With
With Trend2
.VarID = 1
.VarDigitalX = 0.1
.VarDigitalY = 0.07
End With
N = Val(Text1.Text)
End Sub
Private Sub OptSelect_Click(Index As Integer)
Select Case Index
Case 0
SIGN = True
Case 1
SIGN = False
End Select
End Sub
Private Sub Text1_Change()
N = Val(Text1.Text)
M = Log(N) / Log(2)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -