| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1208 人关注过本帖
标题:真心求教,快速傅里叶变换FFT的滚屏显示
只看楼主 加入收藏
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
真心求教,快速傅里叶变换FFT的滚屏显示
FFT变换.zip (2.2 KB)

各位版主朋友,附件里是一个快速傅里叶变换的程序,我用随机数模拟采集的数据,然后对这些数据做FFT运算,我想实现的功能是每次对128个数据实现完FFT运算并且输出图像以后,屏幕cls,紧接着输出下面128个数的FFT运算,以此类推,实现滚屏显示,希望各位版主大神帮帮忙!
搜索更多相关主题的帖子: 朋友 
2014-04-06 10:28
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
程序代码:
Dim i As Integer
Dim xr(128) As Double
Dim xi(128) As Double
Dim IaIn(0 To 127) As Double
Private Sub Command1_Click()
Picture1.AutoRedraw = True
Timer1.Enabled = True
'赋值,IaIn(i)是采得的数据。
For i = 0 To 127
IaIn(i) = Val(List1.List(i))
xr(i) = IaIn(i)
xi(i) = 0
Next
'FFT变换
Call FFT0(xr(), xi(), 128, 1)
'绘图
Picture1.Scale (0, 100)-(127, -100)
Picture1.DrawWidth = 1
For i = 0 To 127
Picture1.Line (i, Abs(xr(i)))-(i + 1, Abs(xr(i + 1))), vbBlue
Next i
End Sub

Private Sub Command2_Click()
Timer1.Enabled = False
End Sub

Private Sub Command3_Click()
End
End Sub

Private Sub Timer1_Timer()
Dim value As Integer
Randomize
value = Int(200 * Rnd + (-100))
List1.AddItem value
End Sub

以上是我编的代码,请各位大神修改一下,实现滚屏显示
2014-04-06 10:30
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:20 
'同志,你根本没有理解什么是编程,完全机械地拷贝拼凑代码,既然你已经把采集的数据放到list1中了,你还需要数组IaIn(0 To 127)来过渡吗?拷贝下述代码你就看的到你要的效果了,每采集128个数会画曲线。
'FFT是对离散的时域信号变换为频域信号的一种变换方法,画出来的应该是组成这些离散信号的频谱图,你这画出来的是频谱图吗?频谱图应该表现为低频段幅值大,越往高频端则幅度低的特性的,应该是一个“个”字的图形类型。
Dim xr(128) As Double
Dim xi(128) As Double

Private Sub Command1_Click()
  Timer1.Enabled = True
End Sub

Private Sub Command2_Click()
  Timer1.Enabled = False
End Sub

Private Sub Command3_Click()
  End
End Sub

Private Sub Form_Load()
  Timer1.Enabled = True
  Timer1.Interval = 10
  Picture1.AutoRedraw = True
End Sub

Private Sub Timer1_Timer()
  Dim value As Integer, i As Integer
  Randomize
  value = Int(200 * Rnd + (-100))
  List1.AddItem value
  If List1.ListCount = 128 Then
    Picture1.Cls
    For i = 0 To 127
      xr(i) = Val(List1.List(i))
      xi(i) = 0
    Next
    'FFT变换
    Call FFT0(xr(), xi(), 128, 1)
    '绘图
    Picture1.Scale (0, 100)-(127, -100)
    Picture1.DrawWidth = 1
    For i = 0 To 127
      Picture1.Line (i, Abs(xr(i)))-(i + 1, Abs(xr(i + 1))), vbBlue
    Next i
    List1.Clear
  End If
End Sub

[ 本帖最后由 lowxiong 于 2014-4-6 15:52 编辑 ]
2014-04-06 15:40
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
回复 3楼 lowxiong
版主,我是一个学机械的,VB只是当初过了个二级,现在真心不怎么会了,而且毕业设计里必须要用到这一块,还是希望能得到你和各位版主的帮助。
关于FFT这个程序是我从网上找的,这么复杂的程序我是肯定不能编出来的,至于你说的那个频谱特性问题,我觉得是因为模拟的数字是纯随机的,我试过其他的比如正余弦曲线的信号,输出的确实是频谱图。另外还有个问题,前几天我发了一个关于动态曲线的绘制问题,这个频谱分析是它的下一步工作,所以能不能在不删除list1里的数据的前提下,实现FFT的滚动绘制,凭你的实力,我相信在你编的上一段程序里稍微修改下,就可以实现我需要的功能,提前谢过朋友!
2014-04-06 19:30
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
'毕业设计还是自力更生吧。
'list1最终也会溢出的,不会无穷additem下去,对Timer1_Timer代码部分修改如下:
Private Sub Timer1_Timer()
  Dim value As Integer, i As Integer
  Randomize
  value = Int(200 * Rnd + (-100))
  List1.AddItem value
  If List1.ListCount > 0 And (List1.ListCount Mod 128 = 0) Then
    Picture1.Cls
    For i = List1.ListCount - 128 To List1.ListCount - 1
      xr(128 - (List1.ListCount - i)) = Val(List1.List(i))
      xi(128 - (List1.ListCount - i)) = 0
    Next
    'FFT变换
    Call FFT0(xr(), xi(), 128, 1)
    '绘图
    Picture1.Scale (0, 100)-(127, -100)
    Picture1.DrawWidth = 1
    For i = 0 To 127
      Picture1.Line (i, Abs(xr(i)))-(i + 1, Abs(xr(i + 1))), vbBlue
    Next i
  End If
End Sub
2014-04-06 20:46
nql_neu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-4-1
收藏
得分:0 
回复 5楼 lowxiong
版主你的功力真的很强大,佩服!这部分内容只是我的毕业论文里的一部分,但是让我自己去编这些东西确实费劲,但是我能读懂大部分代码,以后真得多向你请教,感激不尽!
2014-04-06 22:17
谈一刻
Rank: 1
等 级:新手上路
威 望:2
帖 子:17
专家分:3
注 册:2012-7-20
收藏
得分:0 
还是不懂如何引用fft,  依然是楼主的题目。按照修改后的,运行出错。
可能是我找的fft 不一样,麻烦那位帖个完整的程序来,包括fft 模块的。
论坛的FFT变换.rar (44.42 KB)
2018-05-17 11:00
快速回复:真心求教,快速傅里叶变换FFT的滚屏显示
数据加载中...
 
   



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

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