convlv.txt

来自「VB常用数值算法集 内含有解线性代数方程组」· 文本 代码 · 共 36 行

TXT
36
字号
Sub CONVLV(DATA(), N, RESPNS(), M, ISIGN, ANS())
    Dim FFT(32)
    For I = 1 To CInt(M - 1) / 2
        RESPNS(N + 1 - I) = RESPNS(M + 1 - I)
    Next I
    For I = CInt(M + 3) / 2 To N - CInt(M - 1) / 2
        RESPNS(I) = 0#
    Next I
    Call TWOFFT(DATA(), RESPNS(), FFT(), ANS(), N)
    NO2 = CInt(N / 2)
    For I = 1 To NO2 + 1
        If ISIGN = 1 Then
          DUM = ANS(2 * I - 1)
          DUM1 = FFT(2 * I - 1) * DUM - FFT(2 * I) * ANS(2 * I)
          ANS(2 * I - 1) = DUM1 / NO2
          DUM2 = FFT(2 * I - 1) * ANS(2 * I) + FFT(2 * I) * DUM
          ANS(2 * I) = DUM2 / NO2
        ElseIf ISIGN = -1 Then
          If DUM = 0# And ANS(2 * I) = 0 Then
            Print "deconvolving at a response zero"
            Exit Sub
          End If
          ANS1 = FFT(2 * I - 1) * DUM + FFT(2 * I) * ANS(2 * I)
          DUM1 = DUM * DUM + ANS(2 * I) * ANS(2 * I)
          ANS(2 * I - 1) = ANS1 / DUM1 / NO2
          ANS1 = FFT(2 * I) * DUM - FFT(2 * I - 1) * ANS(2 * I)
          DUM2 = DUM * DUM + ANS(2 * I) * ANS(2 * I)
          ANS(2 * I) = ANS1 / DUM2 / NO2
        Else
          Print " no meaning for ISIGN"
        End If
    Next I
    ANS(2) = ANS(2 * NO2 + 1)
    Call REALFT(ANS(), NO2, -1)
    Erase FFT
End Sub

⌨️ 快捷键说明

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