| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8307 人关注过本帖, 1 人收藏
标题:这个倒序和蝶形算法vb程序如何运行?
只看楼主 加入收藏
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:923
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 80楼 ysr2857
有时间多向ysr2857先生学习。

素数问题的解决是我学习编程永恒的动力。
2022-03-30 09:24
xulaoban
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2021-9-21
收藏
得分:0 
回复 80楼 ysr2857
好的 谢谢你 我看一下代码试下 麻烦你了  前几天私信你了
2022-03-30 14:56
xulaoban
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2021-9-21
收藏
得分:0 
回复 80楼 ysr2857
(这个是我现在用的,我看了基本好像是差不多,有的应该是变量不同,麻烦有空帮忙看下错在哪里了 感激不尽!)

Option Explicit
  
'*模块********************************************************
'FFT0 数组下标以0开始
'AR() 数据实部         AI() 数据虚部
'N 数据点数,为2的整数次幂
'NI 变换方向 1为正变换,-1为反变换
'***************************************************************
Public Jieguo() As Double
      
Const pi = 3.1415926
Public Function FFT0(AR() As Double, AI() As Double, n As Long, ni As Double)
    Dim i As Long, j As Long, k As Long, L As Long, m As Long
    Dim IP As Double, LE As Double
    Dim L1 As Double, N1 As Double, N2 As Double
    Dim SN As Double, TR As Double, TI As Double, WR As Double, WI As Double
    Dim UR As Double, UI As Double, US As Double
    m = NTOM(n)
    N2 = n / 2
    N1 = n - 1
    SN = ni
    j = 1
    For i = 1 To N1
        If i < j Then
            TR = AR(j - 1)
            AR(j - 1) = AR(i - 1)
            AR(i - 1) = TR
            TI = AI(j - 1)
            AI(j - 1) = AI(i - 1)
            AI(i - 1) = TI
        End If
        k = N2
        While (k < j)
            j = j - k
            k = k / 2
        Wend
        j = j + k
    Next i
    For L = 1 To m
        LE = 2 ^ L
        L1 = LE / 2
        UR = 1#
        UI = 0#
        WR = Cos(pi / L1)
        WI = SN * Sin(pi / L1)
        For j = 1 To L1
            For i = j To n Step LE
                IP = i + L1
                TR = AR(IP - 1) * UR - AI(IP - 1) * UI
                TI = AI(IP - 1) * UR + AR(IP - 1) * UI
                AR(IP - 1) = AR(i - 1) - TR
                AI(IP - 1) = AI(i - 1) - TI
                AR(i - 1) = AR(i - 1) + TR
                AI(i - 1) = AI(i - 1) + TI
            Next i
            US = UR
            UR = US * WR - UI * WI
            UI = UI * WR + US * WI
        Next j
    Next L
    If SN <> -1 Then
        For i = 1 To n
            AR(i - 1) = AR(i - 1) / n
            AI(i - 1) = AI(i - 1) / n
        Next i
    End If
End Function
  
Private Function NTOM(n As Long) As Long
    Dim ND As Single
    ND = n
    NTOM = 0
    While (ND > 1)
        ND = ND / 2
        NTOM = NTOM + 1
    Wend
End Function

Public Function GetArrayMax(a() As Double) As Double
    Dim max As Double, min As Double, i As Integer
    max = a(0)
    min = a(0)
    For i = 1 To UBound(a) - 1
        If max < a(i) Then max = a(i)
        If min > a(i) Then min = a(i)
    Next i
    GetArrayMax = max
End Function

Public Function SSSS()
    Dim ii As Integer, nChannel As Integer, Index As Integer
    Dim xr() As Double
    Dim xi() As Double
    Dim TongDaoShu As Integer, EveryTDPoint As Long
    Dim arrmax As Double
    Writelog "进入循环!"
    Do While (bAIRun)
        Do While (bAIRun)
            If WaitForSingleObject(hEventDRAW, 10) = 0 Then
                Exit Do
            End If
        Loop
        
         'Status = WaitForSingleObject(hEventDRAW, INFINITE)
         If bAIRun = False Then
             Exit Function
         End If
        TongDaoShu = AD_Module.Para.nSampChanCount
        EveryTDPoint = AD_Module.Para.nPointsPerChan
        CurrentIndex = AD_Module.CurrentIndex
        Writelog TongDaoShu & " - " & EveryTDPoint & " - " & CurrentIndex
        
        ReDim xr(EveryTDPoint) As Double
        ReDim xi(EveryTDPoint) As Double
        For Index = 0 To EveryTDPoint - 1 Step 1
        DoEvents
            'Writelog Str(nChannel) + " " + Str(Index) + " " + Str(AD_Module.InUserRegion(nChannel + Index, CurrentIndex))
            For nChannel = 0 To TongDaoShu - 1 Step 1
                xr(Index) = AD_Module.InUserRegion(nChannel + Index, CurrentIndex)
                xi(Index) = 0
            Next nChannel
            Call FFT0(xr(), xi(), EveryTDPoint, 1)
         Next Index
         arrmax = GetArrayMax(xr())
         Writelog Str(arrmax)
         AD_Form.TongDaoHz(nChannel - 1).Caption = arrmax
'        For Channel = 0 To TongDaoShu - 1 Step 1
'            Writelog Channel
'            ReDim xr(EveryTDPoint) As Long
'            ReDim xr(EveryTDPoint) As Long
'            DoEvents
'            For Index = 0 To EveryTDPoint * TongDaoShu - 1 Step TongDaoShu
'                DoEvents
'                xr(Index / TongDaoShu) = AD_Module.InUserRegion(Channel + Index, CurrentIndex)
'                xi(Index / TongDaoShu) = 0
'            Next Index
'            Call FFT0(xr(), xi(), EveryTDPoint, 1)
'            AD_Form.TongDaoHz(Channel).Caption = GetArrayMax(xr())
'        Next Channel
        Writelog "完成循环!"
    Loop
End Function

Public Sub Writelog(ByVal message As String)
'Write Error LogFile

'    Dim ifile As Long
'    ifile = FreeFile
'    Open App.Path & "\log\" & Format(Now, "YYYYMMDD") & ".txt" For Append As #ifile
'    Write #ifile, CStr(Now) & "---(): " & message
'    Close #ifile
     
End Sub

2022-03-30 15:16
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 83楼 xulaoban
我的代码是针对数字的,就是把数字(多项式表示法)变为点值表示法,至于速度是每秒显示几个点我还不知道如何弄。
您可以试试把位数n提高一下试试,如何?就是处理256位的数字改为处理512位的或者1024位的。
2022-03-31 10:10
xulaoban
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2021-9-21
收藏
得分:0 
回复 84楼 ysr2857
我的是处理1024点或者2048点 取极值做FFT得到频率    例如2048为一组  一秒采集一次一组  每一秒都是采集2048个点,这一组里的最高值做FFT 得到频率,然后下一秒又采取2048个点 做FFT 得到一个频率
2022-04-02 20:56
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:923
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 84楼 ysr2857
对于一个问题的认知程度,往往是在不断的讨论中加深的。祝你们更上一层楼。

素数问题的解决是我学习编程永恒的动力。
2022-04-02 22:00
ysr2857
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:34
帖 子:809
专家分:77
注 册:2020-2-10
收藏
得分:0 
回复 83楼 xulaoban
修改如下这段程序试试:
Next i
            US = UR
            UR = US * WR - UI * WI
            UI = UI * WR + US * WI
        Next j

改为:
Next i
            US = UR
            UR2 = US * WR - UI * WI
            UI2 = UI * WR + US * WI
           US=UR2
          UI=UI2
        Next j

个见,仅供参考!
2022-04-03 06:53
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:923
专家分:683
注 册:2016-6-29
收藏
得分:0 
这个版块的排序,或许与vfp的不同,此版块最新回复会顶上来,而vfp版块只能在它的一个周期内待着。

素数问题的解决是我学习编程永恒的动力。
2022-04-03 07:33
xulaoban
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2021-9-21
收藏
得分:0 
回复 87楼 ysr2857
好的,谢谢 过两天采集卡回来我试一下 在看卡结果如何 反馈下
2022-04-03 20:45
独木星空
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:河北省曲阳县
等 级:版主
威 望:71
帖 子:923
专家分:683
注 册:2016-6-29
收藏
得分:0 
回复 84楼 ysr2857
从来没有往哪里想过,可能与自己的能力有关。

素数问题的解决是我学习编程永恒的动力。
2022-04-04 11:23
快速回复:这个倒序和蝶形算法vb程序如何运行?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024744 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved