打印

[相关资料]关于FFT结果的意义,可以看一下圈圈以前写的**

[复制链接]
26065|88
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
computer00|  楼主 | 2009-3-7 01:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本实验源代码包下载:https://bbs.21ic.com/upfiles/img/20093/20093712445301.rar

频谱分析演示视频1:https://bbs.21ic.com/upfiles/img/20093/20093712258851.rar

频谱分析演示视频1:https://bbs.21ic.com/upfiles/img/20093/2009371240995.rar

    经过中午和整晚的忙活,圈圈的第三个AT91SAM7S64程序终于跑起来拉。
这是一个简单的FFT测试程序,LCD为NOKIA5110 84*48点的单色LCD屏。
使用AD6对音频信号进行采样,然后经过FFT后,将其频谱显示在LCD上。

    程序首先初始化系统时钟,将主时钟设置为48.05MHz。然后将对应
的LCD的IO口设置为输出状态并使能。然后对LCD进行初始化。

    本程序所用的实验平台是21IC的古道热肠设计的“DIY优盘开发板”,
详细的原理图可以去古道热肠的blog下载。

    由于音频信号是交流信号,先要对其进行平移到1/2Vcc才能采样。
从板上的J6引出GND、VCC、AD6这3根线。然后分别在GND和AD6、VCC和
AD6上连接一个10K欧姆的电阻,将AD6偏置到1/2Vcc处。然后再用一个
1K欧姆的电阻和一个10uF的电容串联后连接到AD6上。电阻的作用是保护
芯片,电容的作用是隔直。

    将程序下载到学习板中,然后将音频信号(例如电脑音频输出或者
接到音箱的喇叭线上)接到上面的电路中,播放一段音乐,就可以看到
信号的频谱拉。
   
    这个例子比较简单,使用的是128点的FFT,显示频谱只用前面64点,
因为后面64点是跟前面64点对称的。程序设置的采样频率为44.1KHz,
所以第64点(最右边)的频率就是22.05KHz。最左边那条(无信号输入
时约1.6V高度)为直流成分。你可以将直接将一个直流电压加在AD6上
看它显示的电压值。由于交流成分分散,所以对交流成分显示时是做
了适当的比例放大的,否则交流值显示很小。

    实际上,对音频频谱的显示,通常纵坐标是取对数,横坐标是按照
倍频关系来的,这里为了程序简单,都是用的线性关系。

    另外,为了显示效果美观,增加了峰值保持并下坠的效果(类似
千千静听或者windows多媒体播放器中频谱显示的效果)。

    不再废话了,感兴趣的就赶紧下载代码去玩玩吧~~~欢迎大家多多
交流~~~

                                     圈圈   2009-03-07 01:18

相关帖子

沙发
wswh2o| | 2009-3-7 08:50 | 只看该作者

qiang

使用特权

评论回复
板凳
wswh2o| | 2009-3-7 08:57 | 只看该作者

视频太不清楚

还不如上照片

使用特权

评论回复
地板
computer00|  楼主 | 2009-3-7 09:15 | 只看该作者

手机拍的,拍照片也不清晰...准备继续改进一下,分频段处

现在是做128点的FFT,频率平均显示的,这样在低频段的分辨力就很不够。
另一个缺点128点的时间不够,为了降低刷新率,人为延迟了一段时间,这样实时性不好。

决定将点数提高到512点,然后对不同频段进行处理,将频率高的部分多个点合并。这样显示效果应该会好一些。

使用特权

评论回复
5
古道热肠| | 2009-3-7 11:00 | 只看该作者

哈哈,不错,"自古英雄出少年"

贴几个图片看看吧,那3GP文件下了也没软件看.好象现在的PMP是支持这格式的.

使用特权

评论回复
6
computer00|  楼主 | 2009-3-7 11:15 | 只看该作者

回5楼:这个3gp的文件,暴风音影和windows媒体播放器都能播放

我在电脑上播放能打开才发上来的,不然大家咋看呢~~~

由于这个音频显示是动态的,静态的照片看起来没意思啊...

呆会发改进过的程序上来,嘿嘿~~~~

古道你也赶紧烧进去玩玩吧,哈哈~~~~即使不接音频信号,手指按到J6里面的线上也能出频谱的~~~

使用特权

评论回复
7
古道热肠| | 2009-3-7 11:18 | 只看该作者

号召项目组的组员及广大网友向圈圈学习.

学习圈圈的迎难而上,有理想,有目标,有行动,有结果的实干精神.
自己定一个目标,然后再去实践,再总结,再实践,迭代式开发,逐步完善和完美.
就拿文件系统来说吧,移植好FAT后,可以乘胜前进,可以做个读写字库文件,并提取汉字点阵的接口API嘛,想显什么汉字就显什么汉字,跟PC机一样的方便.
再如网络部分,能否搞个支持RS232转网络的功能呢,这个很有趣的.

使用特权

评论回复
8
computer00|  楼主 | 2009-3-7 11:43 | 只看该作者

改进版程序(改成了512点FFT,并对频率轴和幅度都进行了压

单击次处下载更新版程序:https://bbs.21ic.com/upfiles/img/20093/200937111126472.rar

    又对程序进行了一些修改,将128点FFT改成了512点,更能反映
实际信号的情况。在频率轴上不再是线性显示,第0点为直流信号,
1~13点每两点间频率间隔为86Hz,第14~23点每两点间频率间隔为2*86Hz,
第24~33点每两点间频率间隔为3*86Hz,第34~43点每两点间频率间隔
为4*86Hz,第44~53点每两点间频率间隔为6*86Hz,第54~63点每两点
间频率间隔为9*86Hz。

    在幅度轴上,使用了开根号进行压缩。试用了对数压缩,发现
压缩得太厉害,最后决定使用开根号压缩。

    由于采样和计算时间增加,原来的延迟50ms被去掉。

                                    圈圈  2009-03-07  11:06

较清晰视频下载:https://bbs.21ic.com/upfiles/img/20093/20093711391189.rar

图片:




使用特权

评论回复
9
古道热肠| | 2009-3-7 11:48 | 只看该作者

哈哈,这回看到图片了,很有趣

用您这项目稍做修改,可做成一个低频的示波器.

使用特权

评论回复
10
computer00|  楼主 | 2009-3-7 11:49 | 只看该作者

嘿嘿,7楼所说的,正是俺所想做的~~~~

准备搞个GPS模块,读到GPS数据后,在数据库(当然是放在外挂的FLASH中了,使用FAT文件格式,
可以通过USB口当作U盘更新数据库。另外当然还有7楼所说的汉字字库文件了)中进行查询,
找到最近以及周围的一些地点,直接用汉字显示周边地理位置,并可以查询从当前点到
指定地点的距离、方位等等...有必要的话,再搞个语音模块也不错~~~可以直接读出来……

俺没钱玩大尺寸的LCD,只好搞这么简单的LCD,用汉字显示GPS的地理位置了...

使用特权

评论回复
11
computer00|  楼主 | 2009-3-7 11:51 | 只看该作者

是可以做示波器,前段时间见有人用STM32做过,USB口传数据的

可以直接移植过来用吧~~~~

使用特权

评论回复
12
xwj| | 2009-3-7 12:18 | 只看该作者

呵呵,我 我... 我刚睡醒,还没刷牙

蛋蛋的效率可真高啊...

使用特权

评论回复
13
computer00|  楼主 | 2009-3-7 12:34 | 只看该作者

我晕...俺午饭都吃完回来了...你才起来?

使用特权

评论回复
14
xwj| | 2009-3-7 12:34 | 只看该作者

To 古道热肠:

遇到视频播放不了的话,就去下载个“完美解码”,就都能放了
同时其他播放器也能够播放了

使用特权

评论回复
15
computer00|  楼主 | 2009-3-7 13:15 | 只看该作者

晕...不知道15楼从哪看出来的超频啊?我的程序跑得很正常啊

使用特权

评论回复
16
computer00|  楼主 | 2009-3-7 13:52 | 只看该作者

提供一些仿真的数据给你参考一下吧:

FFT耗时(包括位倒序和FFT运算)

1024点—— 约58ms
 512点—— 约22ms
 256点—— 约11ms
 128点—— 约4.4ms
  64点—— 约1.8ms


当然,这个FFT计算部分肯定还可以进一步优化,因为俺写的程序总是以实现结果为最大目标,
不会在性能上做很深入的研究……感兴趣、又有时间的慢慢去优化吧...更变态的甚至可以用汇编去写一个...

使用特权

评论回复
17
computer00|  楼主 | 2009-3-7 14:06 | 只看该作者

[相关资料]关于FFT结果的意义,可以看一下圈圈以前写的**

使用特权

评论回复
18
huangqi412| | 2009-3-7 17:24 | 只看该作者

原来俺版本高,圈圈版本低

使用特权

评论回复
19
wangkj| | 2009-3-7 17:26 | 只看该作者

你搞个音频示波器多好??

使用特权

评论回复
20
computer00|  楼主 | 2009-3-7 17:33 | 只看该作者

俺是直接把音频信号接在功放输出上的,直接接电脑声卡还

“慢好多哦, 64点应该在 40us”你这程序优化得也太好了点,

我光把64点的正常序排成倒序的,都花掉了53us…………

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

246

主题

14693

帖子

210

粉丝