OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14817|回复: 23

STM32F1做了一个简单FFT音频实验,分享给大家

[复制链接]

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2017-9-22
在线时间
21 小时
发表于 2017-10-18 12:10:12 | 显示全部楼层 |阅读模式
突然想用手边的STM32系统板做一个音频FFT实验,芯片是STM32F103ZET6。显示屏是320*240的花了一天时间看了论坛很多资料,参考论坛的资料自己做了一个比较简单的实验,高手勿喷

采样频率是192Khz,1024个点,利用的ST官方的DSP库文件,ADC+DMA+TIMER1,有个小视频
程序已上传。

FFT音频实验.rar

414.99 KB, 下载次数: 4288

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2017-9-22
在线时间
21 小时
 楼主| 发表于 2017-10-18 12:21:14 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2017-9-22
在线时间
21 小时
 楼主| 发表于 2017-10-18 12:25:40 | 显示全部楼层
信号发生器产生的交流信号
回复 支持 反对

使用道具 举报

头像被屏蔽

0

主题

22

帖子

0

精华

禁止发言

积分
48
金钱
48
注册时间
2017-10-9
在线时间
4 小时
发表于 2017-10-18 13:19:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2017-10-18 15:44:14 | 显示全部楼层
楼主做的很好。赞一个。
请教楼主,如果做音乐频谱的话,是否采样频率是40Khz,256个点就可以了?如果这样fft运算后的最高最高频率是多少?
回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2017-9-22
在线时间
21 小时
 楼主| 发表于 2017-10-19 17:56:52 | 显示全部楼层
rjx007 发表于 2017-10-18 15:44
楼主做的很好。赞一个。
请教楼主,如果做音乐频谱的话,是否采样频率是40Khz,256个点就可以了?如果这样 ...

可以呀。
你说的fft运算后的最高频率指的是什么?音频吗?
根据香农定律,采样两倍。也就是说40khz最高可以采集20khz的音频。
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10571
金钱
10571
注册时间
2017-2-18
在线时间
1914 小时
发表于 2017-10-19 18:26:06 | 显示全部楼层
这个可以,先收藏了 ,多谢分享
回复 支持 反对

使用道具 举报

14

主题

1592

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2622
金钱
2622
注册时间
2014-7-17
在线时间
350 小时
发表于 2017-10-19 19:59:16 | 显示全部楼层
好东西!!
回复 支持 反对

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2017-10-20 10:13:56 | 显示全部楼层
本帖最后由 rjx007 于 2017-10-20 10:28 编辑
ch871424956 发表于 2017-10-19 17:56
可以呀。
你说的fft运算后的最高频率指的是什么?音频吗?
根据香农定律,采样两倍。也就是说40khz最高 ...

我的意思是问:
1、如果用40KZ的采样率,采样点数为256点,经FFT运算后可以得到多少个频点?以什么规律分布?
2、FFT运算后形成的频谱,再做取模运算,第一个模应是直流分量,第2个模对应的频率是多少?。。。。最后的那个频率是多少?因为这决定了最后在屏上显示的柱条能够表示的音乐频率的情况。
3、如果想在屏上显示100HZ,200HZ,400HZ,800HZ,1.6KZ,3.2HZ,6.4HZ,12.8HZ的频柱,应怎么处理?按40KZ的采样率,取256点,能行吗?
请百忙中能予解答,诚心谢谢了!


回复 支持 反对

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2017-9-22
在线时间
21 小时
 楼主| 发表于 2017-10-21 17:43:06 | 显示全部楼层
rjx007 发表于 2017-10-20 10:13
我的意思是问:
1、如果用40KZ的采样率,采样点数为256点,经FFT运算后可以得到多少个频点?以什么规律 ...

40khz采样频率,40000/256=156.25hz,相当于分辨率就是156.25hz,分布的话就是
for(i=0;i<256;i++)
{
  freq=i*156.25;

}
第一个i=0;直流就是0呀,所以为了屏蔽直流。我在显示程序里面直接不显示,哈哈。
你可以看看我的显示代码unsigned int *pp = p+1; //p+1相当于我直接把0HZ部分滤掉了
然后你要想显示100hz、200hz等等,你就要注意分辨率了,1024点或者更多,
就别用STM32F1了,试试高级点带DSP的那种。
我也不知道我的分析对不对,如果有错望指正。
回复 支持 反对

使用道具 举报

64

主题

249

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1073
金钱
1073
注册时间
2017-6-10
在线时间
279 小时
发表于 2017-10-22 09:54:34 | 显示全部楼层
本帖最后由 rjx007 于 2017-10-22 10:17 编辑

谢谢指教,基本上懂了。有问题在请教你。
回复 支持 反对

使用道具 举报

5

主题

179

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8195
金钱
8195
注册时间
2016-9-7
在线时间
1113 小时
发表于 2017-10-23 08:57:15 | 显示全部楼层
正想找这方面得资料,多谢楼主分享
回复 支持 反对

使用道具 举报

11

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2017-6-14
在线时间
13 小时
发表于 2017-11-30 09:53:02 | 显示全部楼层
void InitBufInArray(void);请问楼主,这个函数是什么时候调用呢?
回复 支持 反对

使用道具 举报

11

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2017-6-14
在线时间
13 小时
发表于 2017-11-30 10:41:06 | 显示全部楼层
TIMER1在里面好像没有起作用
回复 支持 反对

使用道具 举报

33

主题

159

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2017-1-21
在线时间
192 小时
发表于 2018-1-2 22:03:40 | 显示全部楼层
信号发生器出来是交流信号诶,楼主是加了直流偏置信号处理成直流,然后AD采样??
回复 支持 反对

使用道具 举报

22

主题

98

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2014-5-25
在线时间
67 小时
发表于 2018-4-3 18:54:06 | 显示全部楼层
ch871424956 发表于 2017-10-19 17:56
可以呀。
你说的fft运算后的最高频率指的是什么?音频吗?
根据香农定律,采样两倍。也就是说40khz最高 ...

应该是来奎斯特采样定理和香农没关系
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-8-2
在线时间
24 小时
发表于 2018-6-3 14:54:15 | 显示全部楼层
在你给的程序中,我把采样频率从192K改到8192,改动的地方为主函数:TIM1_Int_Init(121,71);  和fft函数:u32 Fs=8192;
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2017-8-2
在线时间
24 小时
发表于 2018-6-3 14:57:48 | 显示全部楼层
在你给的程序中,我把采样频率从192K改到8192,改动的地方为主函数:TIM1_Int_Init(121,71);  和fft函数:u32 Fs=8192;
发现就不行了,必须改回192K才能使用,想问一下还需要改动什么地方吗?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2018-6-26
在线时间
6 小时
发表于 2018-6-26 23:57:10 | 显示全部楼层
请问楼主用的哪款开发板呢
回复 支持 反对

使用道具 举报

9

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-2-29
在线时间
25 小时
发表于 2018-9-15 20:13:45 | 显示全部楼层
楼主做的很好。赞一个。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2018-12-3
在线时间
2 小时
发表于 2018-12-3 16:05:35 | 显示全部楼层
本帖最后由 wqlwqc 于 2018-12-3 16:28 编辑

为什么仿真结果出来是错误的?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-5-9
在线时间
7 小时
发表于 2019-5-9 19:40:24 | 显示全部楼层
您好,我用的是mini板,下载了您这个工程之后加载后没反应,能请教您是为什么么?
回复 支持 反对

使用道具 举报

13

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
306
金钱
306
注册时间
2018-3-5
在线时间
70 小时
发表于 2019-6-1 17:14:40 | 显示全部楼层
nekicar 发表于 2017-11-30 10:41
TIMER1在里面好像没有起作用

TIMER1触发ADC的
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2019-6-11
在线时间
3 小时
发表于 2019-8-17 11:57:30 | 显示全部楼层
有个小疑问:ADC时钟12M,采样周期(12.5+55.5)得出的频率大约176k,小于tim1的触发周期192K,这样会发生一个问题吧:ADC采样没结束,下一次ADC转换触发又开始了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 15:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表