自组织神经网络元音识别

来源:互联网 发布:java spring框架是什么 编辑:程序博客网 时间:2024/05/23 11:00

自组织神经网络元音识别

一、声音数据采集

语音信号的采集工作通过是Cool Edit Pro V2.1软件实现。文件为.wav音频格式,采样频率选择44.1kHz,采样编码数为8,声道为单声道。
实验中语音样本分别取自6人,实验要求每人对a,e,i,o,u五个元音字母进行依次朗读,根据录入数据建立6组,一共30个孤立声音样本。
下图其中一段语音波形:
语音波形图

二、MFCC特征参数提取

基于Matlab的MFCC特征参数提取函数可以参考:

https://cn.mathworks.com/matlabcentral/fileexchange/32849-htk-mfcc-matlab?s_tid=srchtitle

对于MFCC通俗易懂点的理解可以参考:

http://blog.csdn.net/zouxy09/article/details/9156785/

更深入点的理解可以参考:

http://my.oschina.net/jamesju/blog/193343

三、特征参数处理

由于是简单音节的分类,那么就需要给出比较有特征的声音段来作为识别依据,即端点识别。
其中一个是给定一个阈值。Mel频率倒谱系数一般会随着声音的变化产生较为明显的变化,那么就设置一个阈值,系数超过这个值的就提取为较有特征的一类。
在发音的过程也会出现音长的不同,在分类中需要每一个元音较有特征的一段保持一致的帧数,你可以通过一个数字进行补全。笔者是抽取的25帧,数据量不多就肉眼识别了……
MFCC中一帧的数据(0.01s)可不是简单的一个数字,而是一个十二阶的参数,那需要处理的话就得通过其他一些算法将这一部分数据转换为一个特征值,即将一帧的数据计算为一个值,本次实验直接将Mel倒谱系数拿过来用啦!
元音字母“a”Mel倒谱系数图如下:
差分倒谱系数分析图

四、数据分类

使用MATLAB自带的selforgmap函数进行处理:

load sample.txt;//载入声音样本inputs=sample;inputs=inputs';//矩阵转置net=selforgmap(5);//定义自组织神经网络net=train(net,inputs);//训练result=net(inputs);classes=vec2ind(result);c=hist(classes,5);plotsomhits(net,inputs);//显示分类结果

本次实验结果如下:
分类结果
按照预期的话应该是每一类6个,乍一看的话准确率有93%,还挺高的哈。自组织神经网络是不用事先对结果进行标记的,当然你也不能从图像中看出哪一类代表哪一个字母。

0 0
原创粉丝点击