amobbs.com 阿莫电子技术论坛

标题: 一个简单的语音识别程序 [打印本页]

作者: lcw_swust    时间: 2012-5-19 22:53
标题: 一个简单的语音识别程序
本帖最后由 lcw_swust 于 2012-5-19 22:57 编辑

最近想做语音识别玩玩,网上查了查,找到一个用Atmega32实现的语音识别机械车
地址是:http://courses.cit.cornell.edu/e ... h8_css34/index.html
貌似是利用带通滤波取得频谱(或者叫功率谱?),看不太懂.我决定用DFT算法,因为它节约内存

DFT程序借借鉴了 hendry 单片机 DTMF 软解码算法的实现
http://www.ourdev.cn/forum.php?m ... &highlight=dtmf

//--------------------------------------------------
//DFT运算
//注意,ad是有符号数,无符号的AD值需减128
//返回值为1表示已经计算了功率谱
//--------------------------------------------------
U8 dft(S8 ad)
{
        U8        i;
        U8        offset;//查表指针
        U32 temp;
        //ad-=128;//去直流分量
        for(i=0;i<NFREQ;i++)//每个频点计算实部和虚部
        {
                offset=tabp;//取查表指针
                s_dft_image += (S16)ad * sintab[offset];//>>8;
                offset+=PI2/4;//偏移1/4周期为cos表
                s_dft_real += (S16)ad * sintab[offset];//>>8;//cos表
                tabp+=tabinc;//指针下移
        }

        s_dft_p ++;
        if (s_dft_p == NSAMP)        //采样点已达到设定值,计算功率
        {
                s_dft_p = 0;                //点数清0
                for (i = 0; i < NFREQ; i ++)//每个频点计算功率
                {                       
                        s_dft_real/=NSAMP*6;        //除以合适的值能使得功率在一字节内
                        s_dft_image/=NSAMP*6;
                        temp=s_dft_real*s_dft_real + s_dft_image*s_dft_image;
                        if(temp>65535)temp=65535;
                        s_dft_real = sqrt16(temp);
                        //s_dft_real = sqrt32(((s_dft_real*s_dft_real) + (s_dft_image*s_dft_image)));
                }
                return 1;
        }
        return 0;
}

本程序流程大概是这样:
定时读取ADC,计算5个频率点的实部与虚部,采集64点后计算5个频率点的功率,称之为功率谱
当功率值达到一定值后,认为是一帧语音开始,此后计算的34次功率谱分别存入数组中.
若是在训练状态,则将这34个功率谱存入模板数组,训练完毕后进入识别状态.
在识别状态下,用这34个功率谱去与模板匹配,找出误差最小的,若误差小于一定值,则识别成功.
目前程序只识别两个命令,识别率还不太理想,偶尔会有误码.
如果把模板存进EEPROM,则可以增加命令的个数.
程序量较小,占用内存也小,可以很方便的移植到AVR单片机.

电路用了AGC,就是把2SK30A当作可变电阻,GS间负电压越大,DS间电阻越大.
据说可以用发光二极管+光敏电阻来做AGC.
初步的实验也可以用电脑音频输出串联电容到ADC输入口,至少这样每次放出来的声音是一样的,便于验证

频谱计算是否正确.

附件中有一个用VB写的查看波形的程序,只需通过串口向它发送数据就行了,格式是0xAA+数据字节数+数据
识别结果.jpg里每行最后一个字节是结果,为0表示未能识别,前10行是对命令1的识别,后10行是对命令2的识别


作者: downtoearth    时间: 2012-5-19 22:58
这个厉害呀,顶帖!
作者: Rick123    时间: 2012-5-19 23:16
语音 图像 这一块其实前景挺大的
因为用户会觉得交互越来越好了
作者: wxw123321    时间: 2012-5-19 23:19
这个得好好看看,我们现在的语音合成方案,声音不怎么好。
作者: xsh2005105326    时间: 2012-5-19 23:24
用光耦做AGC应该可行
作者: xsh2005105326    时间: 2012-5-19 23:34
wxw123321 发表于 2012-5-19 23:19
这个得好好看看,我们现在的语音合成方案,声音不怎么好。

LZ的是语音识别喔
作者: wxw123321    时间: 2012-5-19 23:43
对的,是看错了,不过这个也不容错过哈,业余学习一下
作者: 无级电工    时间: 2012-5-19 23:46
有谁能把这语音识别电路详细讲解下?  对AGC部分不太明了。
作者: SNOOKER    时间: 2012-5-19 23:49
不是MEGA32吗,怎么又是51的
作者: PCA    时间: 2012-5-20 01:52
太需要了,及时雨啊
作者: weiwei4    时间: 2012-5-20 08:58
学习,这个很有用!
作者: 淋湿的鸡毛    时间: 2012-5-20 09:12
特来学习
作者: gmyu    时间: 2012-5-20 09:50
will try it later.
作者: hsztc    时间: 2012-5-20 09:55
这个东西好
作者: cc6868    时间: 2012-5-20 10:11
这个猛料啊!怎么没置酷啊!
作者: 331086846    时间: 2012-5-20 10:19
牛掰啊,学习了
作者: airfex    时间: 2012-5-20 11:04
这个资料猛啊,可以置酷了。
作者: xyz543    时间: 2012-5-20 11:15
這太酷了,很喜歡研究這方面的東西,真的是即時雨呀! 不的不說一個贊字!!
作者: smfox10    时间: 2012-5-20 18:48
有两位MM也是做了这个,原理好像差不多http://people.ece.cornell.edu/la ... %20yz526/index.html
作者: sunkey    时间: 2012-5-20 18:55
这个要标记一下
作者: lcw_swust    时间: 2012-5-20 20:48
smfox10 发表于 2012-5-20 18:48
有两位MM也是做了这个,原理好像差不多http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects ...

这个貌似是用的"沃尔什(Walsh)变换"呀,速度应该会快些,就是没有看到源代码
作者: xiaoya1945    时间: 2012-5-20 21:03
核心问题是识别率有多少? 不过能有这个思路果断要赞一个... 个人觉得模版的提取是个大学问...
作者: wochai    时间: 2012-5-20 21:21
这东西要的!
作者: mayou    时间: 2012-5-20 23:02
这个可特别的厉害啊!
作者: li780713    时间: 2012-5-20 23:08
标记一下!!
作者: shi_90    时间: 2012-5-21 11:37
不错啊!!记录一下!!
作者: shi_90    时间: 2012-5-21 11:39
smfox10 发表于 2012-5-20 18:48
有两位MM也是做了这个,原理好像差不多http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects ...

那两个mm不错!!!
作者: heibaogame    时间: 2012-5-23 10:23
mark!
作者: sync765    时间: 2012-5-23 10:35
标记,用得着
作者: wgjwgj    时间: 2012-5-23 10:55
这个有意思,还可以发挥发挥。
作者: lijinen    时间: 2012-5-23 19:13
楼主太利害了!学习学习了。
作者: xyr    时间: 2012-5-23 19:54
这可是一个好东西,一定要试下.
作者: szxszx    时间: 2012-5-23 20:05
非特定人识别不好搞
作者: lxa0    时间: 2012-5-23 21:22
用51搞出这个,实在是太厉害啦~!~~~~~~~~~~
作者: armok    时间: 2012-5-24 07:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: baoqi    时间: 2012-5-24 08:31
mark
来自:amoBBS 阿莫电子论坛 Android客户端
作者: terencechang    时间: 2012-5-24 08:48
非特定人识别咋搞的呢?
作者: lcw_swust    时间: 2012-5-24 08:57
armok 发表于 2012-5-24 07:44
cool !

呵呵,多谢阿莫
作者: keshipt    时间: 2012-5-24 09:22
很好的资料,马渴!
作者: gmyu    时间: 2012-5-24 09:24
8位机做FFT太耗资源,不如搞两个324,一级前级放大,加5个带通一个高通,一个低通,然后学习这7路输出的特性。

有一广告词在我桌面摆了好久,忘了是TI还是AD的。  --- 世界还是模拟的。

把模拟的事情交个模拟IC做,逻辑的交个MCU做。可能效率更高。


作者: liycobl    时间: 2012-5-24 09:26
学习了      
作者: hamipeter    时间: 2012-5-24 09:31
顶一下!
作者: gmyu    时间: 2012-5-24 09:42
http://wenku.baidu.com/view/b8ce ... ight=15&count=5

http://wenku.baidu.com/view/cf7d ... ight=17&count=5

http://wenku.baidu.com/view/46cb ... ight=17&count=5


作者: bmagui    时间: 2012-5-24 09:46
好帖留名!
作者: lcw_swust    时间: 2012-5-24 11:40
gmyu 发表于 2012-5-24 09:24
8位机做FFT太耗资源,不如搞两个324,一级前级放大,加5个带通一个高通,一个低通,然后学习这7路输出的特 ...

各有各的优点,模拟电路速度快,数字的方式更灵活.
其实8位机做FFT也不会消耗太多资源,比如用ATMEGA8就能实现128点FFT,如果这个用模拟电路搭出来得多少阶滤波多少个运放呀.

作者: gmyu    时间: 2012-5-24 11:47
说的也对,有时间用STM8试试,如果后续处理太复杂就用两个MCU,哈哈,双核。关键是经验参数需要花时间提取。
作者: tangguanglun    时间: 2012-5-24 12:48
语音识别。音源怎么弄的呢
作者: lcw_swust    时间: 2012-5-24 12:56
tangguanglun 发表于 2012-5-24 12:48
语音识别。音源怎么弄的呢

音源可以自己说话呀,或者用手机录音,或者用windows录音机
作者: leifeng    时间: 2012-5-24 14:22
厉害阿!语音识别
作者: twuking    时间: 2012-5-24 15:02
好东西啊!!

不过没看懂是怎么回事!!
作者: lovelywwei    时间: 2012-5-24 15:10
学习学习。很强大
作者: rpg_9527    时间: 2012-5-24 15:57
MARK!  非常感谢!
作者: kxm2008    时间: 2012-5-24 16:04
MEGA32是avr吗
作者: ky51    时间: 2012-5-25 15:20
语音识别 mark
作者: lvjun1013    时间: 2012-5-25 23:11
可以好好学习下
作者: liuchangkui    时间: 2012-5-25 23:30
mark  顶上来
作者: LM1876    时间: 2012-5-25 23:35
这个有空得试试
作者: ym7205    时间: 2012-6-5 09:07
精辟啊     
作者: ym7205    时间: 2012-6-13 07:28
不错,学习了  
作者: usingavr    时间: 2012-6-13 08:08
很强大啊,期待更低误码,更多命令
作者: minier    时间: 2012-6-13 09:08
算法还有很多可以改进的地方
作者: zengdz    时间: 2012-6-13 14:46
lcw_swust 发表于 2012-5-20 20:48
这个貌似是用的"沃尔什(Walsh)变换"呀,速度应该会快些,就是没有看到源代码

有源码的,仔细找找
作者: lovelywwei    时间: 2012-6-13 14:56
MARK.个人也觉得这方面前景不错。
作者: avrwoo    时间: 2012-6-13 15:17
标注,等有时间学习一下
作者: if_else    时间: 2012-6-13 23:21
在新域名下标记一下
作者: cos    时间: 2012-6-14 12:32
很好的资料,特来学习
作者: dadalijun    时间: 2012-6-14 15:39
强大,顶
作者: richards    时间: 2012-6-14 15:44
这个确实比较cool  之前用过一款语音芯片无疑增加了硬件成本。这样既好了。
作者: cddx    时间: 2012-6-17 00:33
不错,mark一下日后研究
作者: shotstar    时间: 2012-6-17 08:25
语言识别,能识别人 就难了
作者: ieee911    时间: 2012-6-17 09:33
好东西,必须顶!
作者: 国强    时间: 2012-6-17 11:27
学习学习..........................
作者: bangbangji    时间: 2012-6-17 11:56
不错,想法和效果都挺好的
作者: wtiechen1969    时间: 2012-6-17 22:14
好东西,学习了!
作者: wood.wang.wl    时间: 2012-6-18 16:23
不知STM8能否搞定啊,不过即使能做出来,和台湾那些带51核的专业语音识别芯片比,效果应该还是要差很多的,而且此类芯片已经可以做到20元以下啦,就是资料太少了……
作者: freshuman    时间: 2012-6-20 16:55
真是好东西!
作者: ZhrDiscovery    时间: 2012-6-20 21:48
学习一下
作者: john_8    时间: 2012-6-21 09:58
这个好,mark下
作者: mcuprogram    时间: 2012-6-21 10:01
mark                           
作者: sync765    时间: 2012-6-21 11:17
很好的东东
支持
作者: fengtianzhifeng    时间: 2012-6-21 15:27
好厉害谢谢         楼主
作者: creep    时间: 2012-6-21 21:34
好好学习 不懂的太多了 算法
作者: yzlisheng111    时间: 2012-8-11 19:53
   mark               
作者: llysc    时间: 2012-8-11 20:53
好东西,要顶上去!!!!!!!!!!!
作者: hlgps    时间: 2012-9-7 21:18
参考下,正准备做个语言控制系统。
作者: chenfzg    时间: 2012-9-8 08:02
谢谢分享了         
作者: gdjsfy_86    时间: 2012-9-8 08:16
xuexiyixia
作者: cumtguojp    时间: 2012-9-25 23:44
mark,方便学习
作者: 想不到    时间: 2012-9-25 23:52
MARK               
作者: dhy13    时间: 2012-9-26 00:01
不错 哦~~~~~~
作者: lihebb    时间: 2012-9-26 10:26
菜鸟漂过~~~
作者: z903057128    时间: 2012-9-26 10:28
好厉害.exe
作者: weahdeng    时间: 2012-9-26 11:51
这个很牛
作者: qiu452555846    时间: 2012-9-26 11:54
好东西,做一个标签!
作者: zyw19987    时间: 2012-9-26 21:26
语音识别
作者: naclo    时间: 2012-10-5 19:37
顶,喜欢看数学算法的帖子
作者: along    时间: 2012-10-23 06:28
学习了!!!
作者: metalmadman    时间: 2012-10-23 08:43
        mark
作者: eryueniao    时间: 2012-10-23 09:00
cool                                                                  
作者: wwxxcc    时间: 2012-11-27 16:41
MARK  音频通信




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4