搜索
bottom↓
回复: 91

stm32音频FFT频谱极限速度测试!求灭!

  [复制链接]

出0入0汤圆

发表于 2014-3-29 21:35:51 | 显示全部楼层 |阅读模式
本帖最后由 Borden 于 2014-3-30 17:18 编辑

终于到周末了,刚做完一个活儿闲下来了,所以利用之前的一些积累用stm32开发板做了个音频AD/DA的速度测试。

视频:
http://v.youku.com/v_show/id_XNjkxODY4NzA0.html

配置如下:
stm32F103VC 72MHz,AD双声道采样,每声道采样率36kHz,对应音频范围0~18kHz。(差不多行了,15kHz以上我就听不见了)DA双声道输出也是同频率,36kHz。

屏幕320×240标准的ILI9320屏,16位FSMC驱动。同屏显示两个声道的时域信号以及其中一路的FFT频谱。(本来想做两路频谱的,内存不够了~)

FFT是4096点,不是余弦变换,不是实变换,是真正的复变换。每次输入512点时域信号,其余补零。算完之后实部和虚部算平方和求模,然后做了两种处理,一是开平方,二是求对数,视频里面可以看到用按键切换两种不同结果的显示。(这个板子按键很难用,按了好多下~)

时域和频谱数据都是256点显示,频谱数据是2048点降采样到256点,FFT算完一次显示一帧。

结果分析:
从视频可以看到,频谱为线性坐标(开平方)的时候帧率大致在53.xFPS,对数坐标的时候大致在55.xFPS。关闭FFT,不做任何运算的时候显示帧率大致在927.xFPS。

帧率在50多的话,每秒36000个采样,那么一帧就有600多个点,所以我每帧FFT算512个点的话实际上是有漏数据的。所以我也测试了1024点输入的FFT,结果大致在48.xFPS。这样每帧采样有36000/48 =750多个数据,算1024点就保证不会有丢数据了。

这个程序的FFT算法,开方、对数算法,显示输出,采样输入我在之前的项目中都已经优化了很久了,自我感觉基本上应该是达到stm32的速度极限了。也许一些细节部分还能优化一点点,比如说开方和求对数可以不做实时计算改用查表,这样也许还可以提高一两帧,但是我相信基本上也就是这样了,不大可能有数量级上的提高了。当然小弟知道这里高手很多,所以才特地发上来给各位大师看看,大师们觉得我这个程序速度还不达标的话,求教育!真诚的!

========================更新============================
我又把程序修改了一下,不再算4096点的FFT然后降采样显示了,之前这么做是因为我之前的项目用的就是4096点的FFT,直接搬过来的。现在为了匹配256点的显示,改到最小值512点了(对于实输入信号的FFT频谱的高半部分是负频率,跟低半部分对称的,这个大家都明白不多说了),视频:
http://v.youku.com/v_show/id_XNjkxOTc5ODMy.html

可以看到,最终幅度开平方的时候帧率大概是212~216,取对数的时候大概是229~23x,基本上就是这个数量级了。我之后又试了下关闭显示,只做输入输出以及算FFT,这时候的帧率是300以上。

这个测试数据告诉我们的是:72MHz的stm32F103,或者说Cortex-M3的真正实力是每秒钟至少可以算300个带幅度开方的512点复傅立叶变换,考虑到我的程序还不是最优化的情况下。4096点的FFT,我估计每秒算60个以上是不成问题的。

出0入0汤圆

 楼主| 发表于 2014-3-30 23:25:55 | 显示全部楼层
本帖最后由 Borden 于 2014-3-31 01:55 编辑

为什么主贴不能编辑了呢?

结果到现在才发现主贴的两个视频频谱全是错的!我犯了很严重低级的计算错误,虽然不影响计算量(速度测试结果是可靠的),但是频谱显得浑浊不堪。现在这个正确的频谱如水晶般清澈透明,我被那那跳动的谱线深深地吸引不能自拔,禁不住老泪纵横,真是令人感动呀~~

http://v.youku.com/v_show/id_XNjkyMzg2NTA4.html

另外优化了两个比较重要的地方,速度又有明显提升,这个业余小程序估计基本上就这样不再折腾了,我还是很期待有同学能搞出更快的程序~~~

出0入0汤圆

 楼主| 发表于 2014-3-29 21:37:44 | 显示全部楼层
高清的视频还在转码还没出来~烦躁~~~凑合着先看啦~

出0入0汤圆

发表于 2014-3-29 21:43:01 | 显示全部楼层
这么牛擦,顶一个先。

出0入0汤圆

发表于 2014-3-29 22:25:46 | 显示全部楼层
不明觉厉

出105入79汤圆

发表于 2014-3-29 22:32:43 | 显示全部楼层
超级厉害~!! 楼主放出代码让大家学习一下吧。

出0入0汤圆

发表于 2014-3-29 22:33:02 | 显示全部楼层
明 觉厉.

出0入0汤圆

发表于 2014-3-29 22:35:05 | 显示全部楼层
请求楼主放出代码。

出0入0汤圆

 楼主| 发表于 2014-3-29 22:46:41 | 显示全部楼层
回楼上各位,代码是纯汇编的,放出来意思不大,对于各位用C的来说,没人有兴趣看。而对汇编程序员来说,这些都是很直白的标准算法~~

出105入79汤圆

发表于 2014-3-29 22:52:09 | 显示全部楼层
在stm32下使用汇编优化,这才是有料啊。两年前用io口驱动屏幕只有几帧一秒,我当时竟然觉得stm32太慢了。惭愧。。

出0入0汤圆

发表于 2014-3-29 23:18:37 | 显示全部楼层
楼主 DA没用上  只用了AD做FFT?

出0入0汤圆

 楼主| 发表于 2014-3-29 23:26:39 | 显示全部楼层
3050311118 发表于 2014-3-29 23:18
楼主 DA没用上  只用了AD做FFT?

不是啊,AD从音源输入,然后DA输出到喇叭啊。927FPS那一段就是关掉FFT,AD直出DA的。

视频开始的时候有照到音源输入的地方还接了一块小板,那个是我随便找了个PCB焊的一个运放,用于将输入音频加1.65V直流偏置以适应stm32的AD电压范围的。然后仔细听会听到比较大的噪音,那就是那个运放小板和DA输出引起的。

出0入0汤圆

发表于 2014-3-29 23:42:41 | 显示全部楼层
Borden 发表于 2014-3-29 23:26
不是啊,AD从音源输入,然后DA输出到喇叭啊。927FPS那一段就是关掉FFT,AD直出DA的。

视频开始的时候有 ...

哦  受教了   还有个问题  你说AD直接到DA  你是用的DMA的罗

出0入0汤圆

 楼主| 发表于 2014-3-29 23:51:56 | 显示全部楼层
3050311118 发表于 2014-3-29 23:42
哦  受教了   还有个问题  你说AD直接到DA  你是用的DMA的罗

不是啊,cpu读的。用DMA的话CPU就读不到数据了,那还咋做FFT咋做显示呀!如果不对数据做处理的话是可以用DMA。

出0入0汤圆

发表于 2014-3-30 00:00:51 | 显示全部楼层
Borden 发表于 2014-3-29 23:51
不是啊,cpu读的。用DMA的话CPU就读不到数据了,那还咋做FFT咋做显示呀!如果不对数据做处理的话是可以用 ...

楼主全部用汇编实现吗? 真是太强悍了

出0入0汤圆

发表于 2014-3-30 00:10:21 | 显示全部楼层
请放源码让我们拜读一下吧。

出0入0汤圆

发表于 2014-3-30 08:10:11 | 显示全部楼层
牛 厉害

出0入0汤圆

发表于 2014-3-30 09:42:30 | 显示全部楼层
收藏了

出0入0汤圆

发表于 2014-3-30 10:21:39 | 显示全部楼层
还没用汇编编过任何程序的路过

出0入0汤圆

发表于 2014-3-30 10:24:30 | 显示全部楼层
赞一个         

出0入0汤圆

发表于 2014-3-30 12:51:55 | 显示全部楼层
qwe2231695 发表于 2014-3-29 22:52
在stm32下使用汇编优化,这才是有料啊。两年前用io口驱动屏幕只有几帧一秒,我当时竟然觉得stm32太慢了。惭 ...

又见车友

出0入0汤圆

 楼主| 发表于 2014-3-30 18:58:14 | 显示全部楼层
完了丢人丢大了,才发现之前算的频谱是错的,有个无符号数转有符号数的错误没发现~~好丢脸~~~~

另外做了很多优化,现在无频谱帧率终于上1000了,对数频谱帧率达到300以上!稍后上正确频谱的视频。。。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-3-31 09:29:00 | 显示全部楼层
求教育!真诚的!

出0入0汤圆

发表于 2014-3-31 09:34:23 | 显示全部楼层
楼主,对刷屏的帧率,我有一点疑问

这个屏是240*320的屏,16位驱动。一帧要刷76800个点,一秒1000帧,那就是76800000个点,这不是已经超过STM32的最高频率了吗?还没有算FSMC的最高频率和实际效率……

出0入0汤圆

发表于 2014-3-31 09:40:22 | 显示全部楼层
我印象中,FSMC刷屏,常规能达到60帧,优化以后能达到100帧以上已经很接近极限了

而且这个还是仅仅空刷的情况,如果是实际刷图,那速度还要再低

所以你这个测试能达到1000帧,完全颠覆了我的概念啊……

出0入0汤圆

发表于 2014-3-31 10:45:13 | 显示全部楼层
对数坐标怎么计算。有没有简单的表可查。

出0入0汤圆

 楼主| 发表于 2014-3-31 18:07:58 | 显示全部楼层
STM32_Study 发表于 2014-3-31 09:34
楼主,对刷屏的帧率,我有一点疑问

这个屏是240*320的屏,16位驱动。一帧要刷76800个点,一秒1000帧,那就 ...

这个是因为我们对帧的定义不同呀。你的计算是没错,那是刷满屏的帧率,但是要想快,就不能刷满屏呀!基本上速度优化最主要的方法就是尽量避免任何多余的计算啊~

出0入0汤圆

 楼主| 发表于 2014-3-31 18:14:16 | 显示全部楼层
无级电工 发表于 2014-3-31 10:45
对数坐标怎么计算。有没有简单的表可查。

我觉得对数用查表是不好做的。一般适合做查表的函数,它的曲线取值范围在x和y方向上至少要有一个是有限的。对数在两个方向上都是到无穷的,一般还是用泰勒展开求前面几项比较简单。我这个程序的对数是我自己搞的近似算法,等价于只取泰勒展开的第一项,速度很快,精度很低

出0入4汤圆

发表于 2014-3-31 18:58:40 | 显示全部楼层
你4096个点算一多久?

出0入0汤圆

 楼主| 发表于 2014-3-31 19:07:40 | 显示全部楼层
zhanyanqiang 发表于 2014-3-31 18:58
你4096个点算一多久?

一秒钟60个以上吧,看主贴最后一句的结论

出0入0汤圆

发表于 2014-3-31 19:57:40 | 显示全部楼层
Borden 发表于 2014-3-31 18:07
这个是因为我们对帧的定义不同呀。你的计算是没错,那是刷满屏的帧率,但是要想快,就不能刷满屏呀!基本 ...

嗯,话说帧的定义应该就是每秒满屏刷新的速度吧?不过每个人的概念不一样,你定义的1000帧是怎样的概念?

出0入0汤圆

发表于 2014-3-31 20:46:53 | 显示全部楼层
Borden 发表于 2014-3-30 23:25
为什么主贴不能编辑了呢?

结果到现在才发现主贴的两个视频频谱全是错的!我犯了很严重低级的计算错误,虽 ...

“我被那那跳动的谱线深深地吸引不能自拔,禁不住老泪纵横,真是令人感动呀~~”

我也有同样感受,太漂亮了。。

问下:帧率是什么意思,1秒刷1000多帧LCD反应得过来吗

出0入0汤圆

 楼主| 发表于 2014-3-31 21:01:52 | 显示全部楼层
STM32_Study 发表于 2014-3-31 19:57
嗯,话说帧的定义应该就是每秒满屏刷新的速度吧?不过每个人的概念不一样,你定义的1000帧是怎样的概念? ...

嗯,你说的这个实际上是填充率。填充率这个东西没什么难度啊,要达到FSMC的带宽极限是很容易的事情,这个没什么好比的。而且如果真的需要满屏刷新,比如显示视频,那么一般大家会转用RGB接口,而且驱动芯片也有专门的视频模式,跟我这里做的不是一码事呀!

我所说的一帧,是指完整地呈现一幅我所需要显示的画面,包括画面本身的绘制和这幅画面背后所需要的计算。这个才是有实际意义的啊!对于大多数应用,其实都不是时时刻刻整屏的内容都改变的,如果在这种情况下每帧都满屏刷新,我觉得只能说程序员太懒了,一个有追求的程序员是不会这样做的,因为没有意义。用户看不到的,对最终结果没有影响的计算都是无意义的浪费。

出0入0汤圆

 楼主| 发表于 2014-3-31 21:08:18 | 显示全部楼层
SNOOKER 发表于 2014-3-31 20:46
“我被那那跳动的谱线深深地吸引不能自拔,禁不住老泪纵横,真是令人感动呀~~”

我也有同样感受,太漂 ...

来抱一个

实际上视频传到优酷之后声画同步是有点问题的,声音比画面滞后了有大概10几个ms吧,看原视频或者实物,谱线、波形和声音是非常同步的,那种感动还会加倍!

显然LCD是跟不上的,所以你看波形显示是一团雾状的东西,因为一个像素还没完全点亮就熄灭了。谱线也是,你会发现谱线中间亮,边缘一些毛刺就比较暗。那是因为中间部分是好几帧都一直点亮的,所以像素可以达到最大亮度,边缘的那些闪一帧就没了。如果LCD的翻转率够快,谱线看起来会比现在丰满很多。

但是,既然是做速度测试,显然我们不可能等垂直同步什么的啊,都是一直刷啊刷,结果就是酱了~

出0入0汤圆

发表于 2014-3-31 21:19:53 | 显示全部楼层
Borden 发表于 2014-3-31 21:01
嗯,你说的这个实际上是填充率。填充率这个东西没什么难度啊,要达到FSMC的带宽极限是很容易的事情,这个 ...

嗯,你说的局部刷新这个概念我明白

我就是对你现在这个应用有疑惑,频谱的画面变化应该很大吧?这样整个画面需要刷新变动的地方应该很占了很大比例的,跟普通GUI有很大的不同

而且你的测试中,完整的应用跟测试刷屏极限的应用是不一样的,那个1000帧的具体是做了哪些过程?我就是没搞清楚这个实际是怎么计算的

出0入0汤圆

 楼主| 发表于 2014-3-31 21:51:20 | 显示全部楼层
STM32_Study 发表于 2014-3-31 21:19
嗯,你说的局部刷新这个概念我明白

我就是对你现在这个应用有疑惑,频谱的画面变化应该很大吧?这样整个 ...

这个程序很简单,一共做4件事情:

1、AD采样,DA输出。
2、显示时域波形。
3、算FFT。
4、显示频谱。

其中第一步是在AD中断里面做的,后面3步在主程序做。在不显示频谱的时候,只做1、2两步。所以如果你想灭掉我这个程序的话,1010帧那个速度应该是比较容易超越的,因为不涉及任何计算,只是简单的采样显示就行了。

出0入0汤圆

发表于 2014-3-31 21:59:15 | 显示全部楼层
stm32还是挺快的

出0入0汤圆

发表于 2014-3-31 22:33:02 | 显示全部楼层
真会玩,嘿嘿,顶一个

出0入0汤圆

发表于 2014-4-1 01:14:49 | 显示全部楼层
Borden 发表于 2014-3-31 21:51
这个程序很简单,一共做4件事情:

1、AD采样,DA输出。

1010帧,就是只做第四步,是吗?

其实我就是想问,这个1010帧,是怎么计算出来的?大家统一标准才有比较呀

我之前说的标准就是每刷完整的一个画面作为一帧,你这个显然不是这个概念,那具体是怎样计算出来的1010帧?

出0入0汤圆

 楼主| 发表于 2014-4-1 01:29:50 | 显示全部楼层
STM32_Study 发表于 2014-4-1 01:14
1010帧,就是只做第四步,是吗?

其实我就是想问,这个1010帧,是怎么计算出来的?大家统一标准才有比较 ...

不是啊,1010FPS的时候是不算FFT的,只做1、2两步。其中第一步是在AD中断完成的,主程序只循环做第二步。主程序每做完一次第二步,也就是显示完一帧时域波形,记为一帧。帧率就是主程序一秒钟能做完多少个第二步的记数而已。你再仔细看看我上个回帖说的步骤啊,我觉得我描述得没什么歧义啊~

出0入618汤圆

发表于 2014-4-1 01:58:04 | 显示全部楼层
Borden 发表于 2014-4-1 01:29
不是啊,1010FPS的时候是不算FFT的,只做1、2两步。其中第一步是在AD中断完成的,主程序只循环做第二步。 ...

你该不会是说第一步AD采样完成后,第二步把刚刚的两个采样值点到屏幕上就算一帧吧?

出0入0汤圆

 楼主| 发表于 2014-4-1 02:10:13 | 显示全部楼层
gzhuli 发表于 2014-4-1 01:58
你该不会是说第一步AD采样完成后,第二步把刚刚的两个采样值点到屏幕上就算一帧吧? ...

咋能那样捏大哥!那不是作弊嘛! 我说的显然是完整显示左右声道两条256点长的波形是一帧啊!

出0入0汤圆

发表于 2014-4-1 09:00:50 | 显示全部楼层
Borden 发表于 2014-3-31 18:07
这个是因为我们对帧的定义不同呀。你的计算是没错,那是刷满屏的帧率,但是要想快,就不能刷满屏呀!基本 ...

楼主说的估计就是直接清除上一次谱线的轨迹,这个我做示波器时候优化用过,一般人我不告诉他

出0入0汤圆

 楼主| 发表于 2014-4-1 09:18:39 | 显示全部楼层
杨大侠 发表于 2014-4-1 09:00
楼主说的估计就是直接清除上一次谱线的轨迹,这个我做示波器时候优化用过,一般人我不告诉他  ...

出0入0汤圆

发表于 2014-4-1 15:48:56 | 显示全部楼层
真不错,

出0入0汤圆

发表于 2014-4-4 15:13:55 | 显示全部楼层
能把程序共享吗

出0入0汤圆

发表于 2014-4-21 23:16:04 | 显示全部楼层
汇编达人,
对算法也很有研究。膜拜

出0入8汤圆

发表于 2014-4-22 00:38:13 | 显示全部楼层
不错  ~~~~~~~~

出0入0汤圆

发表于 2014-4-22 00:54:10 | 显示全部楼层
漂亮

出0入0汤圆

发表于 2014-4-22 10:11:19 | 显示全部楼层
最近做音乐频谱,楼主好人15549463791@sina.cn

出0入0汤圆

发表于 2014-5-8 10:44:30 | 显示全部楼层
你好,能共享下代码吗?我最近也在做类似的东西,采集频率为100K的,想请教下前辈lpdpzc@126.com

出0入0汤圆

发表于 2014-5-8 15:55:58 来自手机 | 显示全部楼层
拜年来mark.求教局部刷新

出0入0汤圆

发表于 2014-5-9 11:26:26 | 显示全部楼层
撸主威武,求示例代码,tianqing324@163.com

出0入0汤圆

发表于 2014-5-9 11:35:44 | 显示全部楼层
每次把上次数据写成背景色,再写当前数据,就算一帧?
膜拜汇编FFT

出0入0汤圆

发表于 2014-5-9 13:56:54 | 显示全部楼层
顶一个,以后做音乐频谱的时候可以参照一下

出0入0汤圆

发表于 2014-5-9 14:57:09 | 显示全部楼层
Borden 发表于 2014-3-31 19:07
一秒钟60个以上吧,看主贴最后一句的结论

4096*(1/38khz)= 107.78947368421052631578947368421毫秒。

楼主是否用滑动式的缓冲?不然每然每个块都108个毫秒了!

出0入0汤圆

 楼主| 发表于 2014-5-9 15:31:29 | 显示全部楼层
tclandmei 发表于 2014-5-9 14:57
4096*(1/38khz)= 107.78947368421052631578947368421毫秒。

楼主是否用滑动式的缓冲?不然每然每个块 ...

嗯,不能这么算的,对输入数据的计算是有冗余的,用循环缓冲区,当前指针在哪里就从哪里开始算。我这个帖子里有说明:http://www.amobbs.com/thread-5575912-1-1.html

出0入0汤圆

发表于 2014-5-19 23:03:37 | 显示全部楼层
这是我见过最牛逼的音乐频谱了,太强大了。

出0入54汤圆

发表于 2014-5-20 10:45:47 | 显示全部楼层
厉害哦 相当佩服了

出0入0汤圆

发表于 2014-5-30 14:48:23 | 显示全部楼层
十分的佩服!
我现在有个问题想请楼主帮忙分析下,关于声音处理的,我的声音经话筒通过ADC到STM32,希望STM32能够最快速度的检测我声音频率并实时的显示这个频率的值(不用频谱,百分数就行),分辨率做到1-2hz,声音频率范围75hz--2000hz,速度大概是多少?能在3ms内有结果吗?比如我唱“死了都要爱”这5个字,准确的识别这5个字的频率并显示,用STM32能做到上面要求的指标吗?

出0入4汤圆

发表于 2014-5-30 15:01:20 | 显示全部楼层
很多年前就对频谱感兴趣,只是这水平从来就没长进过,佩服

出0入0汤圆

发表于 2014-5-30 15:08:57 | 显示全部楼层
汗,我都把STM32用废了~~

出0入0汤圆

 楼主| 发表于 2014-5-30 16:45:48 | 显示全部楼层
yuan1995 发表于 2014-5-30 14:48
十分的佩服!
我现在有个问题想请楼主帮忙分析下,关于声音处理的,我的声音经话筒通过ADC到STM32,希望STM3 ...

汗~你说的这个叫基音检测(pitch detection),是很大一门课题,是语音识别的基础,有各种流派无数种算法,可以很简单,也可以做得很复杂。但是就跟人脸识别一样,没有一个公认完美的算法。如果就是简单的滤波+自相关+FFT的话,速度可以很快,几个ms应该问题不大,但是这种简单算法识别率不高。另外除了计算速度以外,延迟还主要取决于窗长度,一般来说窗长度至少要3个要检测的最长周期以上吧~

出0入0汤圆

发表于 2014-5-30 18:07:56 | 显示全部楼层
谢谢楼主指教!您说的很对,我就是用于基音识别,受限于成本,希望能用STM32或价格比较低DSP来做。用了几款安卓手机上的校音软件,能够识别人声频率,但有几十MS的延迟,频率识别比较准确。

出0入0汤圆

 楼主| 发表于 2014-5-30 19:29:05 | 显示全部楼层
yuan1995 发表于 2014-5-30 18:07
谢谢楼主指教!您说的很对,我就是用于基音识别,受限于成本,希望能用STM32或价格比较低DSP来做。用了几款 ...

如果你有现成的符合你要求的算法,可以试着移植过来stm32试试呀,我觉得安卓这种java虚拟机都能做到几十ms的话,stm32用汇编也许可以做到更低的~

出0入0汤圆

发表于 2014-5-30 20:21:23 | 显示全部楼层
好的,谢谢!有不懂的再向楼主请教。如果楼主能够做出达到指标的程序,可协商价格购买。DSP、STM32等芯片都可以,再次表示感谢!

出0入0汤圆

 楼主| 发表于 2014-5-30 22:17:07 | 显示全部楼层
yuan1995 发表于 2014-5-30 20:21
好的,谢谢!有不懂的再向楼主请教。如果楼主能够做出达到指标的程序,可协商价格购买。DSP、STM32等芯片都 ...

互相研究一下没问题,请教谈不上,我也是猴子派来的逗逼
另外我接单价格挺高的,我就不报价了,伤感情~ 我觉得你还是找专门做音频算法的同学来搞比较靠谱~

出0入0汤圆

发表于 2014-5-31 23:23:28 | 显示全部楼层
好的,十分感谢。
头像被屏蔽

出0入0汤圆

发表于 2014-6-1 08:52:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入54汤圆

发表于 2014-6-1 08:58:42 | 显示全部楼层
很牛逼的样子了 卤煮实在厉害 佩服佩服呀
头像被屏蔽

出0入0汤圆

发表于 2014-6-1 17:49:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽

出0入0汤圆

发表于 2014-6-1 18:11:45 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2014-6-1 19:02:28 | 显示全部楼层
bbs2009 发表于 2014-6-1 17:49
安卓这种java虚拟机都能做到几十ms的话....
--------------------------------------------------------- ...

你要是用预编译的库会有很严重的兼容性问题吧?机型适配什么的~~

出0入0汤圆

 楼主| 发表于 2014-6-1 19:05:49 | 显示全部楼层
bbs2009 发表于 2014-6-1 18:11
请教 LZ。
是否可这样理解 。你说的  基音检测  是指 自然语言的 基音检测。  
而  60 楼 说的 是 歌唱  ...

没研究过~~不过按我自己的理解应该是一回事。是唱歌还是说话,那都是应用层的东西,物理层的发声原理,元音+辅音那套东西还是一样的~

出0入0汤圆

发表于 2014-6-28 09:27:18 | 显示全部楼层
楼主威武求测试代码  wlf19890312@qq.com

出0入0汤圆

发表于 2014-6-30 09:09:48 | 显示全部楼层
楼主V5!一直想学习FFT这块,lz有没有什么好的书籍推荐下?谢谢~!

出0入0汤圆

 楼主| 发表于 2014-6-30 15:32:21 | 显示全部楼层
youpeng 发表于 2014-6-30 09:09
楼主V5!一直想学习FFT这块,lz有没有什么好的书籍推荐下?谢谢~!

FFT没什么好学的啊,就是简单的加减乘法而已啊,关键是要动手做啊。自己推几遍蝶形,写一遍算法,很快就熟了,光看书看到死都没用。

出0入0汤圆

发表于 2014-6-30 16:41:23 | 显示全部楼层
bbs2009 发表于 2014-6-1 08:52
分辨率做到1-2hz,声音频率范围75hz--2000hz,速度大概是多少?能在3ms内有结果吗?
-------------------- ...

貌似分辨率是靠采样时长决定,3MS只能分辨到333HZ.
75HZ要到13MS才能分辨出来。

出0入0汤圆

发表于 2014-6-30 16:47:53 | 显示全部楼层
本帖最后由 wingerchen 于 2014-6-30 16:49 编辑
yuan1995 发表于 2014-5-30 18:07
谢谢楼主指教!您说的很对,我就是用于基音识别,受限于成本,希望能用STM32或价格比较低DSP来做。用了几款 ...


几十MS的延迟估计是受采样时长限制,没到一定时长,低频信号是分辨不出来的。

安卓4核运算2K-4K点,也就2MS(做了CUBIC插值,重采样,WELCH窗等)     补充:全JAVA代码,还没用C来优化。

有个小技巧,就是先采满一帧数据,比如50MS,然后后面的每3ms数据和前面47MS的一起组成50MS一帧数据来做FFT,当然,这种用法不确定是否适合你,我用着倒挺爽,因为我的最小周期25秒,每25秒搞一次,会让我非常不爽,换成这种算法,数据的响应速度高很多了,看着倍爽。

出0入0汤圆

发表于 2014-6-30 18:25:43 | 显示全部楼层
本帖最后由 中子星 于 2014-6-30 18:32 编辑
yuan1995 发表于 2014-5-30 14:48
十分的佩服!
我现在有个问题想请楼主帮忙分析下,关于声音处理的,我的声音经话筒通过ADC到STM32,希望STM3 ...


如果这是个正式的项目的话,我可以有偿开发,并且已经有相当的基础。

出0入0汤圆

发表于 2014-7-3 10:00:41 | 显示全部楼层
请教下LZ:做32点FFT,官方库可以直接用吗?

出0入0汤圆

 楼主| 发表于 2014-7-3 14:34:21 | 显示全部楼层
prince2010 发表于 2014-7-3 10:00
请教下LZ:做32点FFT,官方库可以直接用吗?

不行,用官方库,点数必须是4^n。不过你可以补零到64点,输出64点的频域数据。

出0入0汤圆

发表于 2014-7-3 14:55:36 | 显示全部楼层
Borden 发表于 2014-7-3 14:34
不行,用官方库,点数必须是4^n。不过你可以补零到64点,输出64点的频域数据。 ...

谢谢,不太会玩,算了

出0入0汤圆

发表于 2014-11-22 13:38:32 | 显示全部楼层
感谢lz的分享

出0入0汤圆

发表于 2014-11-22 17:27:17 | 显示全部楼层
本帖最后由 mmswza 于 2014-11-22 17:32 编辑

好帖留名~

眼馋!

出0入0汤圆

发表于 2014-11-22 17:29:49 | 显示全部楼层
牛逼的感觉……

出0入0汤圆

发表于 2014-11-22 17:48:51 | 显示全部楼层
大神膜拜中

出0入0汤圆

发表于 2014-11-22 18:07:09 | 显示全部楼层
汇编的,膜拜下

出0入0汤圆

发表于 2014-11-28 16:47:23 | 显示全部楼层
强大啊!! 顶上了

出0入0汤圆

发表于 2014-11-29 10:36:53 | 显示全部楼层
厉害,一直想做来着,看着真好玩。

出0入0汤圆

发表于 2015-8-28 07:52:48 来自手机 | 显示全部楼层
学习了,楼主很厉害了

出0入0汤圆

发表于 2021-4-26 14:33:11 | 显示全部楼层
最近在学习音频的频谱方案,学些了,谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 03:14

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

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