dudududu 发表于 2015-7-29 17:01:26

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

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

dudududu 发表于 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 输入数组
float fft_outputbuf;   //FFT 输出数组
arm_cfft_radix4_instance_f32 scfft;

dudududu 发表于 2015-7-30 08:08:55

唉,失误了,应该发到 STM32板块去,发这里没人回呢{:sweat:}

hechengzhu04 发表于 2015-7-30 08:26:51

试试先滤波在进行频谱分析,用FIR就可以,网上资料挺多

dudududu 发表于 2015-7-30 09:59:05

hechengzhu04 发表于 2015-7-30 08:26
试试先滤波在进行频谱分析,用FIR就可以,网上资料挺多

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

kunnsd 发表于 2015-8-17 07:11:17

对数据加窗后再fft变换,还有不要刷新太快,否则也不好看,没有“从容”感

dudududu 发表于 2015-8-17 08:35:26

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

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

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

onece 发表于 2015-8-17 08:39:19

搞个以前模拟的那种频谱显示电路看看。

richie550 发表于 2015-8-17 09:32:35

有详细介绍音频的资料吗?

kunnsd 发表于 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         0≤n≤N-1

汉宁窗 0.5*]             0≤n≤N-1

布莱克曼窗 0.42-0.5*cos+0.08cos

dudududu 发表于 2015-8-19 08:42:37

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

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

zb05022005 发表于 2015-8-19 08:52:29

你可以找个音频软件自己把两三个频率合成一个音频,然后FFT出来显示看看波峰是不是当初的那两三个频率
然后再定夺如何查找问题

dudududu 发表于 2015-8-19 08:55:45

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

这个没问题了,现在频谱显示已经正常了,FFT计算结果也正确了,就是要怎么显得好看了{:lol:}
页: [1]
查看完整版本: 问个关于音频频谱显示的问题