搜索
bottom↓
回复: 12

问个关于音频频谱显示的问题

[复制链接]

出0入0汤圆

发表于 2015-7-29 17:01:26 | 显示全部楼层 |阅读模式
是这样,我用STM32F407读取SD卡WAV数据,然后用STM32的官方DSP库里面的那个FFT库,进行傅里叶变换,变换之后的结果在取模,这个也是那个库里面的现成函数;
取模之后的结果在显示在OLED上,但是无论怎么搞,看起来都不太美观,和千千静听上的那个频谱图,完全不是一回事啊,所以,我怀疑千千静听那个频谱图,傅里叶变换之后,还做过其他手脚使得显示更加美观;
就想问一下大神们,有搞过这个音频频谱显示的么,给给点指引,谢过先!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2015-7-29 17:03:58 | 显示全部楼层
FFT就使用了下面三个函数,

arm_cfft_radix4_init_f32(&scfft,FFT_LENGTH,0,1);//初始化 scfft 结构体,设定 FFT 参数
arm_cfft_radix4_f32(&scfft,fft_inputbuf);            //FFT 计算(基 4)
arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH);//取模得幅值

以及声明了下面几个全局变量
#define FFT_LENGTH          1024        //FFT 长度,默认是 256 点 FFT
float fft_inputbuf[FFT_LENGTH*2];   //FFT 输入数组
float fft_outputbuf[FFT_LENGTH];     //FFT 输出数组
arm_cfft_radix4_instance_f32 scfft;

出0入0汤圆

 楼主| 发表于 2015-7-30 08:08:55 | 显示全部楼层
唉,失误了,应该发到 STM32板块去,发这里没人回呢

出0入0汤圆

发表于 2015-7-30 08:26:51 | 显示全部楼层
试试先滤波在进行频谱分析,用FIR就可以,网上资料挺多

出0入0汤圆

 楼主| 发表于 2015-7-30 09:59:05 | 显示全部楼层
hechengzhu04 发表于 2015-7-30 08:26
试试先滤波在进行频谱分析,用FIR就可以,网上资料挺多

你是说,先把原始信号低通滤波,然后再FFT么?
那不是很多频率就显示不出来了

出0入21汤圆

发表于 2015-8-17 07:11:17 | 显示全部楼层
对数据加窗后再fft变换,还有不要刷新太快,否则也不好看,没有“从容”感

出0入0汤圆

 楼主| 发表于 2015-8-17 08:35:26 | 显示全部楼层
kunnsd 发表于 2015-8-17 07:11
对数据加窗后再fft变换,还有不要刷新太快,否则也不好看,没有“从容”感 ...

加窗是啥意思?
如果不刷新太快,那么,就是数据采样是间隔的进行,一部分数据会跳过去,是么?

之前我的问题已经解决了,原来是程序上,没有把WAV原始数据转换成有符号的,所以FFT出来的结果总是似对非对的样子,做一个强制类型转换,就好了,现在看起来还有那么点意思!!

出0入21汤圆

发表于 2015-8-17 08:39:19 | 显示全部楼层
搞个以前模拟的那种频谱显示电路看看。

出0入0汤圆

发表于 2015-8-17 09:32:35 | 显示全部楼层
有详细介绍音频的资料吗?

出0入21汤圆

发表于 2015-8-18 22:27:12 | 显示全部楼层
dudududu 发表于 2015-8-17 08:35
加窗是啥意思?
如果不刷新太快,那么,就是数据采样是间隔的进行,一部分数据会跳过去,是么?

对于窗函数的选择,应考虑被分析信号的性质与处理要求。如果仅要求精确读出主瓣频率,而不考虑幅值精度,则可选用主瓣宽度比较窄而便于分辨的矩形窗,例如测量物体的自振频率等;如果分析窄带信号,且有较强的干扰噪声,则应选用旁瓣幅度小的窗函数,如汉宁窗、三角窗等;对于随时间按指数衰减的函数,可采用指数窗来提高信噪比,下面简要介绍各种窗函数的优缺点。
矩形窗属于时间变量的零次幂窗。矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣,导致变换中带进了高频干扰和泄漏,甚至出现负谱现象。
三角窗亦称费杰(Fejer)窗,是幂窗的一次方形式。与矩形窗比较,主瓣宽约等于矩形窗的两倍,但旁瓣小,而且无负旁瓣。
汉宁窗又称升余弦窗,汉宁窗可以看作是3个矩形时间窗的频谱之和,或者说是 3个 sinc(t)型函数之和,而括号中的两项相对于第一个谱窗向左、右各移动了 π/T,从而使旁瓣互相抵消,消去高频干扰和漏能。可以看出,汉宁窗主瓣加宽并降低,旁瓣则显著减小,从减小泄漏观点出发,汉宁窗优于矩形窗.但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。
海明窗也是余弦窗的一种,又称改进的升余弦窗。海明窗与汉宁窗都是余弦窗,只是加权系数不同。海明窗加权的系数能使旁瓣达到更小。分析表明,海明窗的第一旁瓣衰减为一42dB.海明窗的频谱也是由3个矩形时窗的频谱合成,但其旁瓣衰减速度为20dB/(10oct),这比汉宁窗衰减速度慢。海明窗与汉宁窗都是很有用的窗函数。
以上转自百度百科,下面的常用的几个窗


矩型窗 RN(n)

海明窗 0.54-0.46*cos[2*PI*n/(N-1)]         0≤n≤N-1

汉宁窗 0.5*[1-cos[2*PI*n/(N-1)]]             0≤n≤N-1

布莱克曼窗 0.42-0.5*cos[2*PI*n/(N-1)]+0.08cos[4*PI*n/(N-1)]

出0入0汤圆

 楼主| 发表于 2015-8-19 08:42:37 | 显示全部楼层
kunnsd 发表于 2015-8-18 22:27
对于窗函数的选择,应考虑被分析信号的性质与处理要求。如果仅要求精确读出主瓣频率,而不考虑幅值精度, ...

坤大,完全看不懂的说,算了,这已经严重超出我的理解范围,大学的信号与系统还有数字信号处理,都还给老师了!!

出0入0汤圆

发表于 2015-8-19 08:52:29 | 显示全部楼层
你可以找个音频软件自己把两三个频率合成一个音频,然后FFT出来显示看看波峰是不是当初的那两三个频率
然后再定夺如何查找问题

出0入0汤圆

 楼主| 发表于 2015-8-19 08:55:45 | 显示全部楼层
zb05022005 发表于 2015-8-19 08:52
你可以找个音频软件自己把两三个频率合成一个音频,然后FFT出来显示看看波峰是不是当初的那两三个频率
然后 ...

这个没问题了,现在频谱显示已经正常了,FFT计算结果也正确了,就是要怎么显得好看了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 19:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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