【语音识别】语音识别信号灯图像模拟控制(带面板)【含GUI Matlab源码 757期】

💥💥💞💞欢迎来到Matlab仿真科研站博客之家💞💞💥💥

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。

🍎个人主页:Matlab仿真科研站博客之家

🏆代码获取方式:
💥扫描文章底部QQ二维码💥

⛳️座右铭:行百里者,半于九十;路漫漫其修远兮,吾将上下而求索。
在这里插入图片描述

⛄更多Matlab语音处理(仿真科研站版)仿真内容点击👇
Matlab语音处理(仿真科研站版)

⛄一、简介

1 案例背景
语音识别是一门覆盖面很广泛的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论及神经生物学等学科都有非常密切的关系"。通过语音信号处理和模式识别理论使得计算机自动识别和理解人类口述的语言,包括两种意义:一是将人类口述的语句逐句地进行识别并转换为文字;二是对口述语言所包括的需求和询问做出合理的分析,执行相关的命令,而不是仅仅转换为书面文字。本案例以语音识别为理论基础,通过与模式识别相结合的方式将其应用到信号灯图像的模拟控制领域,实现对指定语音信号进行自动识别并自动关联信号灯图像的效果,具有一定的使用价值。

2 理论基础
语音信号的端点检测是进行语音识别的一个基本步骤,它是特征训练和识别的基础。端点检测是指在语音信号中查找各种段落(如音素、音节、词素)的始点和终点的位置,并从语音信号中消除无声段,进而实现对语音有效信号段的截取。早期进行端点检测的主要依据是信号能量、振幅和过零率,但经常会出现误检测,效果并不明显。20世纪60年代日本学者Itakura提出了动态时间规整算法(Dynamic Time Warping, DTW) , 该算法的基本思想是把未知量均匀地延长或缩短,并达到与参考模式的长度一致的效果"。在这一过程中,未知语音段的时间轴要不均匀地变化或弯折,以使其特征与模型特征得到对应。因此,一个完整的基于统计的语音识别系统可大致分为以下步骤:
(1)语音信号预处理:
(2)语音信号特征提取;
(3)声学模型选择;
(4)模式匹配选择;
(5)语言模型选择:
(6)语言信息处理。
语音识别研究的第一步为选择识别单元,常用的语音识别单元有单词(句)、音节和音素三种,一般根据具体的研究任务来决定选择哪种识别单元。大部分中小词汇语音识别系统选择单词(句)作为识别单元,大词汇系统的模型库一般规模较大,训练模型步骤较多,模型匹配算法复杂度较高,选择单词(句)作为识别单元难以满足实时性要求。大部分汉语语音识别系统选择音节作为识别单元,其中,汉语是单音节结构的语言,英语是多音节结构的语言,汉语大约1300个音节,如果不考虑声调,则约有408个无调音节,待识别的音节数量相对较少。因此,中、大词汇量汉语语音识别系统一般选择以音节为识别
单元来进行系统设计。英语语音识别系统一般选择音素作为识别单元,中、大词汇量汉语语音识别系统也在越来越多地采用音素作为识别单元。汉语音节仅由声母和韵母构成,其中,零声母有22个,韵母有28个,且二者的声学特性相差很大。在实际应用中,为了提高易混淆音节的区分能力,通常把声母依后续韵母的不同而构成细化声母来进行处理。但是,由于协同发音的影响,音素单元往往具有不稳定的特点,所以如何获得稳定的音素单元依然有待于进一步研究。
选择合理的信号特征参数是语音识别的一个关键因素。为了提高对语音信号进行分析、处理的效率,需要提取特征参数,消除与语音识别无关的冗余信息,保留影响语音识别的重要信息,同时对语音信号进行压缩。因此,在特征参数提取的实际应用中,语音信号的压缩率一般介于10~100.此外,语音信号包含了大量不同种类的信息,需要综合考虑包括成本、性能、响应时间、计算量等在内的各方面因素来决定对哪些信息进行提取,以及选择哪种方式提取。非特定人语音识别系统为了保证一般性,往往侧重于提取反映语义的特征参数,尽量消除说话人的个人信息:特定人语音识别系统为了保证有效性,往往在提取反映语义的特征参数的同时,尽量也保留说话人的个人信息回。
LP(线性预测)分析技术属于特征参数提取技术,具有广泛的应用。许多成熟的语音识别应用系统都采用基于LP的技术来提取Mel倒谱参数作为特征。但LP模型作为一种纯数学模型具有局限性,没有考虑人类听觉系统对语音处理的特点。Mel倒谱参数和PLP(感知线性预测) 分析提取的感知线性预测倒谱, 应用了听觉感知方面的一些研究成果,在一定程度上模拟了人类听觉系统对语音处理的特点。实验证明,采用这种技术能在一定程度上提高语音识别系统的性能。根据目前的使用情况, Mel感知线性预测倒频谱参数充分考虑了人类发声与接收声音的特性并且具有良好的鲁棒性,因此已逐渐取代传统的线性预测编码倒频谱参数。此外,也有部分研究者尝试把小波分析技术应用于语音信号的特征提取,但其应用性能还具有一定的局限性,有待进一步研究。

3 程序实现
本案例采用MATLAB数学工具通过完成程序实现, 主要采用DTW算法实现语音识别,软件算法设计架构图如图所示。
在这里插入图片描述

⛄二、部分源代码

function varargout = EmotionRec(varargin)
% EMOTIONREC M-file for EmotionRec.fig
% EMOTIONREC, by itself, creates a new EMOTIONREC or raises the existing
% singleton*.
%
% H = EMOTIONREC returns the handle to a new EMOTIONREC or the handle to
% the existing singleton*.
%
% EMOTIONREC(‘CALLBACK’,hObject,eventData,handles,…) calls the local
% function named CALLBACK in EMOTIONREC.M with the given input arguments.
%
% EMOTIONREC(‘Property’,‘Value’,…) creates a new EMOTIONREC or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before EmotionRec_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to EmotionRec_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE’s Tools menu. Choose “GUI allows only one
% instance to run (singleton)”.
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help EmotionRec

% Last Modified by GUIDE v2.5 12-May-2013 18:24:47

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @EmotionRec_OpeningFcn, …
‘gui_OutputFcn’, @EmotionRec_OutputFcn, …
‘gui_LayoutFcn’, [] , …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT

% — Executes just before EmotionRec is made visible.
function EmotionRec_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to EmotionRec (see VARARGIN)

% Choose default command line output for EmotionRec
handles.output = hObject;
addpath(fullfile(pwd, ‘voicebox’));
clc;
axes(handles.axes1); cla reset; box on;
set(gca, ‘XTick’, [], ‘YTick’, [], …
‘XTickLabel’, ‘’, ‘YTickLabel’, ‘’, ‘Color’, [0.7020 0.7804 1.0000]);
set(handles.axes2, ‘XTick’, [], ‘YTick’, [], …
‘XTickLabel’, ‘’, ‘YTickLabel’, ‘’, ‘Color’, [0.7020 0.7804 1.0000], …
‘Box’, ‘On’);
handles.dirName = 0;
handles.S = 0;
handles.fileurl = 0;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes EmotionRec wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% — Outputs from this function are returned to the command line.
function varargout = EmotionRec_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% — Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%% 载入语音库
% 数据库路径
dirName = ‘./wav/Database’;
dirName = uigetdir(dirName);
if isequal(dirName, 0)
return;
end
msgbox(sprintf(‘载入%s成功!’, dirName), ‘提示信息’);
handles.dirName = dirName;
guidata(hObject, handles);

% — Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%% 提取特征参数
if isequal(handles.dirName, 0)
msgbox(‘请选择音频库目录’, ‘提示信息’, ‘modal’);
return;
end
S = GetDatabase(handles.dirName);
handles.S = S;
guidata(hObject, handles);
msgbox(‘音频信号特征提取完毕’, ‘提示信息’, ‘modal’);

% — Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%% 选择测试文件
file = ‘./wav/Test/1.wav’;
[Filename, Pathname] = uigetfile(‘*.wav’, ‘打开新的语音文件’,…
file);
if Filename == 0
return;
end
fileurl = fullfile(Pathname,Filename);
[signal, fs] = audioread(fileurl);
axes(handles.axes1); cla reset; box on;
plot(signal); title(‘待识别语音信号’, ‘FontWeight’, ‘Bold’);
msgbox(‘载入语音文件成功’, ‘提示信息’, ‘modal’);
handles.fileurl = fileurl;
handles.signal = signal;
handles.fs = fs;
guidata(hObject, handles);

% — Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

%% 识别
if isequal(handles.fileurl, 0)
msgbox(‘请选择音频文件’, ‘提示信息’, ‘modal’);
return;
end
if isequal(handles.S, 0)
msgbox(‘请计算音频库MFCC特征’, ‘提示信息’, ‘modal’);
return;
end
S = handles.S;
[num, MC] = Reco(S, handles.fileurl);
result = S(num).name;
result = result(1:2);
c = ‘r’;
function MC = GetFeather(file, flag)
if nargin < 2
flag = 0;
end
if nargin < 1
file = ‘.\wav\Database\关闭\关闭_bsm.wav’;
end
[signal, fs] = audioread(file);
framelength = 1024;
framenumber = fix(length(signal)/framelength);
for L = 1:framenumber
for m = 1:framelength
framedata(m) = signal((L-1)*framelength+m);
end
E(L) = sum(framedata.^2);
end
if flag
figure; plot(E);
end
meanE = mean(E);
startflag=0;
startnum=0;
startframe=0;
endframe = 0;
S = [];
for L = 1 : framenumber
if E(L) > meanE
startnum = startnum+1;
if startnum == 2
startframe = L-2;
startflag = 1;
end
end
if E(L) < meanE
if startflag == 1
endframe = L-1;
S = [S; startframe endframe];
startflag = 0;
startnum = 0;
end
end
end
if size(S, 1) > 1
ms = min(S(:, 1));
es = max(S(:, 2));
else
ms = S(1);
es = S(2);
end

MC = [];
snum = 1;
for i = ms : es
si = (i-1)framelength;
ei = i
framelength;
fi = signal(si:ei);
mc = mfcc(fi,fs);
MC{snum} = mc;
snum = snum + 1;
end

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

1.1 PID优化
1.2 VMD优化
1.3 配电网重构
1.4 三维装箱
1.5 微电网优化
1.6 优化布局
1.7 优化参数
1.8 优化成本
1.9 优化充电
1.10 优化调度
1.11 优化电价
1.12 优化发车
1.13 优化分配
1.14 优化覆盖
1.15 优化控制
1.16 优化库存
1.17 优化路由
1.18 优化设计
1.19 优化位置
1.20 优化吸波
1.21 优化选址
1.22 优化运行
1.23 优化指派
1.24 优化组合
1.25 车间调度
1.26 生产调度
1.27 经济调度
1.28 装配线调度
1.29 水库调度
1.30 货位优化
1.31 公交排班优化
1.32 集装箱船配载优化
1.33 水泵组合优化
1.34 医疗资源分配优化
1.35 可视域基站和无人机选址优化

2 机器学习和深度学习分类与预测
2.1 机器学习和深度学习分类
2.1.1 BiLSTM双向长短时记忆神经网络分类
2.1.2 BP神经网络分类
2.1.3 CNN卷积神经网络分类
2.1.4 DBN深度置信网络分类
2.1.5 DELM深度学习极限学习机分类
2.1.6 ELMAN递归神经网络分类
2.1.7 ELM极限学习机分类
2.1.8 GRNN广义回归神经网络分类
2.1.9 GRU门控循环单元分类
2.1.10 KELM混合核极限学习机分类
2.1.11 KNN分类
2.1.12 LSSVM最小二乘法支持向量机分类
2.1.13 LSTM长短时记忆网络分类
2.1.14 MLP全连接神经网络分类
2.1.15 PNN概率神经网络分类
2.1.16 RELM鲁棒极限学习机分类
2.1.17 RF随机森林分类
2.1.18 SCN随机配置网络模型分类
2.1.19 SVM支持向量机分类
2.1.20 XGBOOST分类

2.2 机器学习和深度学习预测
2.2.1 ANFIS自适应模糊神经网络预测
2.2.2 ANN人工神经网络预测
2.2.3 ARMA自回归滑动平均模型预测
2.2.4 BF粒子滤波预测
2.2.5 BiLSTM双向长短时记忆神经网络预测
2.2.6 BLS宽度学习神经网络预测
2.2.7 BP神经网络预测
2.2.8 CNN卷积神经网络预测
2.2.9 DBN深度置信网络预测
2.2.10 DELM深度学习极限学习机预测
2.2.11 DKELM回归预测
2.2.12 ELMAN递归神经网络预测
2.2.13 ELM极限学习机预测
2.2.14 ESN回声状态网络预测
2.2.15 FNN前馈神经网络预测
2.2.16 GMDN预测
2.2.17 GMM高斯混合模型预测
2.2.18 GRNN广义回归神经网络预测
2.2.19 GRU门控循环单元预测
2.2.20 KELM混合核极限学习机预测
2.2.21 LMS最小均方算法预测
2.2.22 LSSVM最小二乘法支持向量机预测
2.2.23 LSTM长短时记忆网络预测
2.2.24 RBF径向基函数神经网络预测
2.2.25 RELM鲁棒极限学习机预测
2.2.26 RF随机森林预测
2.2.27 RNN循环神经网络预测
2.2.28 RVM相关向量机预测
2.2.29 SVM支持向量机预测
2.2.30 TCN时间卷积神经网络预测
2.2.31 XGBoost回归预测
2.2.32 模糊预测
2.2.33 奇异谱分析方法SSA时间序列预测

2.3 机器学习和深度学习实际应用预测
CPI指数预测、PM2.5浓度预测、SOC预测、财务预警预测、产量预测、车位预测、虫情预测、带钢厚度预测、电池健康状态预测、电力负荷预测、房价预测、腐蚀率预测、故障诊断预测、光伏功率预测、轨迹预测、航空发动机寿命预测、汇率预测、混凝土强度预测、加热炉炉温预测、价格预测、交通流预测、居民消费指数预测、空气质量预测、粮食温度预测、气温预测、清水值预测、失业率预测、用电量预测、运输量预测、制造业采购经理指数预测

3 图像处理方面
3.1 图像边缘检测
3.2 图像处理
3.3 图像分割
3.4 图像分类
3.5 图像跟踪
3.6 图像加密解密
3.7 图像检索
3.8 图像配准
3.9 图像拼接
3.10 图像评价
3.11 图像去噪
3.12 图像融合
3.13 图像识别
3.13.1 表盘识别
3.13.2 车道线识别
3.13.3 车辆计数
3.13.4 车辆识别
3.13.5 车牌识别
3.13.6 车位识别
3.13.7 尺寸检测
3.13.8 答题卡识别
3.13.9 电器识别
3.13.10 跌倒检测
3.13.11 动物识别
3.13.12 二维码识别
3.13.13 发票识别
3.13.14 服装识别
3.13.15 汉字识别
3.13.16 红绿灯识别
3.13.17 虹膜识别
3.13.18 火灾检测
3.13.19 疾病分类
3.13.20 交通标志识别
3.13.21 卡号识别
3.13.22 口罩识别
3.13.23 裂缝识别
3.13.24 目标跟踪
3.13.25 疲劳检测
3.13.26 旗帜识别
3.13.27 青草识别
3.13.28 人脸识别
3.13.29 人民币识别
3.13.30 身份证识别
3.13.31 手势识别
3.13.32 数字字母识别
3.13.33 手掌识别
3.13.34 树叶识别
3.13.35 水果识别
3.13.36 条形码识别
3.13.37 温度检测
3.13.38 瑕疵检测
3.13.39 芯片检测
3.13.40 行为识别
3.13.41 验证码识别
3.13.42 药材识别
3.13.43 硬币识别
3.13.44 邮政编码识别
3.13.45 纸牌识别
3.13.46 指纹识别

3.14 图像修复
3.15 图像压缩
3.16 图像隐写
3.17 图像增强
3.18 图像重建

4 路径规划方面
4.1 旅行商问题(TSP)
4.1.1 单旅行商问题(TSP)
4.1.2 多旅行商问题(MTSP)
4.2 车辆路径问题(VRP)
4.2.1 车辆路径问题(VRP)
4.2.2 带容量的车辆路径问题(CVRP)
4.2.3 带容量+时间窗+距离车辆路径问题(DCTWVRP)
4.2.4 带容量+距离车辆路径问题(DCVRP)
4.2.5 带距离的车辆路径问题(DVRP)
4.2.6 带充电站+时间窗车辆路径问题(ETWVRP)
4.2.3 带多种容量的车辆路径问题(MCVRP)
4.2.4 带距离的多车辆路径问题(MDVRP)
4.2.5 同时取送货的车辆路径问题(SDVRP)
4.2.6 带时间窗+容量的车辆路径问题(TWCVRP)
4.2.6 带时间窗的车辆路径问题(TWVRP)
4.3 多式联运运输问题

4.4 机器人路径规划
4.4.1 避障路径规划
4.4.2 迷宫路径规划
4.4.3 栅格地图路径规划

4.5 配送路径规划
4.5.1 冷链配送路径规划
4.5.2 外卖配送路径规划
4.5.3 口罩配送路径规划
4.5.4 药品配送路径规划
4.5.5 含充电站配送路径规划
4.5.6 连锁超市配送路径规划
4.5.7 车辆协同无人机配送路径规划

4.6 无人机路径规划
4.6.1 飞行器仿真
4.6.2 无人机飞行作业
4.6.3 无人机轨迹跟踪
4.6.4 无人机集群仿真
4.6.5 无人机三维路径规划
4.6.6 无人机编队
4.6.7 无人机协同任务
4.6.8 无人机任务分配

5 语音处理
5.1 语音情感识别
5.2 声源定位
5.3 特征提取
5.4 语音编码
5.5 语音处理
5.6 语音分离
5.7 语音分析
5.8 语音合成
5.9 语音加密
5.10 语音去噪
5.11 语音识别
5.12 语音压缩
5.13 语音隐藏

6 元胞自动机方面
6.1 元胞自动机病毒仿真
6.2 元胞自动机城市规划
6.3 元胞自动机交通流
6.4 元胞自动机气体
6.5 元胞自动机人员疏散
6.6 元胞自动机森林火灾
6.7 元胞自动机生命游戏

7 信号处理方面
7.1 故障信号诊断分析
7.1.1 齿轮损伤识别
7.1.2 异步电机转子断条故障诊断
7.1.3 滚动体内外圈故障诊断分析
7.1.4 电机故障诊断分析
7.1.5 轴承故障诊断分析
7.1.6 齿轮箱故障诊断分析
7.1.7 三相逆变器故障诊断分析
7.1.8 柴油机故障诊断

7.2 雷达通信
7.2.1 FMCW仿真
7.2.2 GPS抗干扰
7.2.3 雷达LFM
7.2.4 雷达MIMO
7.2.5 雷达测角
7.2.6 雷达成像
7.2.7 雷达定位
7.2.8 雷达回波
7.2.9 雷达检测
7.2.10 雷达数字信号处理
7.2.11 雷达通信
7.2.12 雷达相控阵
7.2.13 雷达信号分析
7.2.14 雷达预警
7.2.15 雷达脉冲压缩
7.2.16 天线方向图
7.2.17 雷达杂波仿真

7.3 生物电信号
7.3.1 肌电信号EMG
7.3.2 脑电信号EEG
7.3.3 心电信号ECG
7.3.4 心脏仿真

7.4 通信系统
7.4.1 DOA估计
7.4.2 LEACH协议
7.4.3 编码译码
7.4.4 变分模态分解
7.4.5 超宽带仿真
7.4.6 多径衰落仿真
7.4.7 蜂窝网络
7.4.8 管道泄漏
7.4.9 经验模态分解
7.4.10 滤波器设计
7.4.11 模拟信号传输
7.4.12 模拟信号调制
7.4.13 数字基带信号
7.4.14 数字信道
7.4.15 数字信号处理
7.4.16 数字信号传输
7.4.17 数字信号去噪
7.4.18 水声通信
7.4.19 通信仿真
7.4.20 无线传输
7.4.21 误码率仿真
7.4.22 现代通信
7.4.23 信道估计
7.4.24 信号检测
7.4.25 信号融合
7.4.26 信号识别
7.4.27 压缩感知
7.4.28 噪声仿真
7.4.29 噪声干扰

7.5 无人机通信

7.6 无线传感器定位及布局方面
7.6.1 WSN定位
7.6.2 高度预估
7.6.3 滤波跟踪
7.6.4 目标定位
7.6.4.1 Dv-Hop定位
7.6.4.2 RSSI定位
7.6.4.3 智能算法优化定位
7.6.5 组合导航

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

语音识别MATLAB实现 声控小车结题报告 小组成员:关世勇 吴庆林 一、 项目要求: 声控小车是科大华为科技制作竞赛命题组的项目,其要求是编写一个语言识别程序并适当改装一个小型机动车,使之在一个预先不知道具体形状的跑道上完全由声控来完成行驶比赛。跑道上可以有坡面,坑, 障碍等多种不利条件,小车既要具有较快的速度,也要同时具有较强的灵活性,能够克服上述条件。 二、 项目分析: 由于小车只要求完成跑道上的声控行驶,所以我们可以使用简单的单音命令来操作,如“前”、“后”、“左”、“右”等。 由于路面有各种不利条件,而且规则要求小车尽可能不越过边线,这就决定了我们的小车不能以较高的速度进行长时间的快速行驶。所以我们必须控制小车的速度和行进距离。 由于外界存在噪声干扰,所以我们必须对噪声进行处理以减小其影响。 鉴于上诉各种要求,我们决定对购买的遥控小车进行简单改造,使用PC机已有的硬件条件编写软件来完成语音的输入,采集,处理和识别,以实现对小车的控制。 三、 解决思路与模块: 整个程序大致可划分为三个模块,其结构框图如下图所示: 整个程序我们在Visual C++ 环境下编写。 四、 各模块的实现: 1 声音的采集: 将声音信号送入计算机,我们利用了声卡录音的低层操作技术,即对winmm.lib进行API调用。具体编程时这一部分被写在一个类中(Soundin类)。 在构造函数中设定包括最大采样率(11025),数据缓存(作为程序一次性读入的数据,2048),声卡本身所的一些影响采样数据等的各种参数; 调用API函数waveInGetNumDevs(返回UNIT,参数为空)检察并打开声音输入设备,即声卡;并进而使用waveInGetDevCaps得到声卡的容量(在waveInCaps中存有该数据,对其进行地址引用,从DWORD dwFormats得到最大采样率、声道数和采样位); 创建一个叫WaveInThreadEvent的事件对象,并赋予一个Handle,叫m_WaveInEvent,开始利用线程指针m_WaveInThread调用自定义的线程WaveInThreadProc; 对结构WAVEFORMATEX中WaveInOpen开始提供录音设备。注意设备句柄的得到是通过对HWAVEIN 型数据m_WaveIn的引用。 由于通过这种方式进行录音的文件格式是.wav,所以要先设置录音长度,以及对头文件进行一些设置:包括buffer的地址为InputBuffer的初始地址,大小为录音长度的两倍,类型。使用waveInPrepareHeader为录音设备准备buffer。然后使用waveInAddBuffer函数为录音设备送出一个输入buffer。最后使用waveInStart(m_WaveIn)打开设备。 程序中WaveInThreadProc需要提出另外说明,因为通过这个线程我们可以实现采样和数据提取。该线程首先定义一个指向CsoundIn类的指针pParam,并将其宏定义为PT_S。而线程参数即为空指针pParam。使用WaitForSingleObject将录音过程设置为一旦开始就不中止(除非中止线程)。在此线程中做如下两个工作:将数据送入buffer,并将数据传入某个参数(其调用一个函数,将buffer中的数据送入该函数的参数*pt),而这些数据正是我们要利用和处理的数字化的语音信息。 2 声音的预处理: 声音信息的预处理主要包括音头和音尾的判断,声音的预加重,分帧处理和窗化处理。 A 音头音尾的判断与提取: 这是该项目的一个难点。由于我们的声音信号不是连续给出的,而且现场还有噪声的存在,所以我们必须通过适当的方法来判断采集的数据是不是我们所要的声音控制信号。这又是该项目的一个重点。若声音指令信号提取的不恰当,那么我们采样所得的数据就和我们实际的语音信号就会有很大的出入,这样不但会延迟语音识别的时效性,而且会降低对这些声音信号的识别率。对声音信号的提取,主就是确定音头、音尾的位置。常用的方法有过零率和短时距能量等几种。我们这里采用的就是过零率这个方法。首先对噪声取样,从这些噪声样本中得到噪声的上下限,将实时信号与这个门限进行比较,得到过零率。 定义过零率Zcr如下: 其中: 利用过零率的大小来判断是否有声音信号进入,若 ( 为预设的过零率值),则表示有声音信号进入,就找到了音头。在找到音头的情况下,若 ,则表示声音结束,也就找到了音尾。在环境噪声较大且比声音指令小的多的情况下可以对这个门限加一修正。音头和音尾之间的部分就是我们用以作为识别用的声音指令信号了。由于一般情况下人们所发出的单音都有一定的时间长度而大的噪声则大多是突发的,持续时间较短,所以我们可以再对所得到的声音指令信号做一次筛选,若得到的声音信号的长度小于预设值,就可认为是噪声干扰,舍弃;若得到的声音信号的常到大于预设值,则将其作为有用信号存储。实验表明,利用过零率和预设长度相结合起来提取声音指令信号的方法很有效的。 B 语音信号的预加重: 我们所采用的预加重的方法是较为常用的网络: 传递函数为: 得到的信号为: 预加重的目的在于滤除低频干扰,尤其是50Hz或60Hz的工频干扰,将对于语音识别更为有用的高频部分的频谱进一步提升。在计算短时能量之前应用该滤波器,还可以起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。 C 分帧处理 在计算各个系数之前要先将语音信号作分帧处理。语音信号是瞬时变化的,但在10~20ms内是相对稳定的,而我们设定的采样频率为11025所以我们对预处理后的语音信号S1(n)以300点为一帧进行处理,帧移为100个采样点。 (N=300) D 窗化处理: 为了避免矩形窗化时对LPC系数在端点的误差,我们采用了汉明窗函数来进行窗化。即: 其中: 3 语音数据的特征提取: 语音信号的特征有多种度量标准,我们采用的是比较常用的倒谱特征。 语音信号是一种典型的时变信号,然而如果把观察时间缩短到几十毫秒,则可以得到一系列近似稳定的信号。人的发音器官可以用若干段前后连接的声管进行模拟,这就是所谓的声管模型。全极点线性预测模型(LPC)可以对声管模型进行很好的描述,每段声管对应一个LPC模型的极点。一般情况下,极点的个数在12-16个之间就可以足够清晰地描述语音信号的特征了。 语音信号经过预处理,它的每个样值均可由过去若干个样值的线性组合来逼近,同时可以采用使实际语音抽样与线性预测抽样之间的均方差最小的方式,来解出一组预测的系数 。这就是LPC所提取出来的信号的初始特征。 预测值时域表达式为: 其中, 为加权系数,即LPC系数。预测的误差为: 使 在均方误差最小的条件下,可求得唯一的 ,此过程即为LPC分析过程。 这里采用的是Levinson-Durbin法。由上面的式子有: 其中, 为待分析与引信号的自相关序列: 因此:Levinson-Durbin算法为: 1. 初始化: 2. 迭代计算:对于 3. 最后就算: 以上式中的 为反射系数。 ; 为最小预测误差,随着阶数的增加而减少; 为模型增益常量。 在语音识别系统中,很少直接使用LPC系数,而是由LPC系数推导出另一种参数:线性预测倒谱系数(LPCC)。倒谱实际上是一种同态信号处理方法,标准的倒谱系数计算流程需要进行FFT变换、对数操作和相位校正等步骤,预算比较复杂。在实际计算中,他不是由原始信号x(n)得到,而是由LPC系数 得到的。 LPC系数算出后,就可以直接进行倒谱系数 的计算,其迭代算法如下: 1.初始化: 2.迭代计算: 这里C(0)实际上就是直流分量,在识别中通常是不用的,也不去计算。 综合考虑识别误差和识别速度的影响,我们在计算LPC 时,LPC系数的阶数Q值取为8,而LPCC系数的阶数P值取为12。 4 DTW 算法: 语音识别程序的核心部分即采用合适的算法来识别不同的语音信号,在特定人语音识别算法中,对于孤立词语语音识别而言,最为简单的方法是采用DTW(Dynamic Time Warping,动态时间弯折)算法,该算法基于动态规划)(DP)的思想,解决了发音长短不一的模本匹配问题,是语音识别中出现较早、较为经典的一种算法。我们这里采用的就是DTW算法。 我们用R表示已存的参考模板,T表示待识别的测试模板,R(1),R(2) ,…,R(m),T(1),T(2),…,T(n)分别表示参考模板和测试模板中的各语音帧,d[T(n),R(m)]表示这两帧特征矢量之间的距离(DTW算法中通常采用欧氏距离)。为了比较R和T之间的相似度,可以计算他们之间的距离D[T,R],距离越小则相似度越高。D[T,R]的计算通常采用的是动态规划的方法。 将R和T的各个帧号分别在直角坐标系的横轴和纵轴上标出,则如下图可得到一个网格,网格中各点表示R和T中的一帧的交汇点。DP算法可以归结为寻找一条通过此网格中若干格点的路径,使得沿路径的累积距离达到最小值。 为了使路径不至于过分倾斜,可以约束斜率在0.5-2范围内,如果路径已经通过了格点( ),那么下一个通过的格点( )只能是下列三种情况之一: 搜索最佳路径的方法如下: 搜索从( )开始,网格中任意一点只可能有一条路径通过。对于( ),其可达到该格点的前一格点之可能是 ( ),( ),( ),那么( )一定选择这3个距离中的最小者所对应的格点作为其前续格点。若用( )代表此格点,并将通过该格点的路径延伸而通过( ),这时此路径的累积距离为: 其中的 由下式决定: 这样可以从初始点出发依次搜索直到搜索到终点 便可得到最佳路径。 五、整个系统的软件流程图: 见右图。 六、硬件 用四个c1108型三极管来控制小车遥控手柄的前、后、左、右触点的通断。从计算机的并口引出四根信号线,与三极管相连,与前、后、左、右一一对应。若判断出指令信号后,则相应的信号线上输出高电平,该电路导通,发送无线信号。若无指令,则信号线上输出低电平,电路断路,不发送无线信号。电路示意图如下:(由于四条线路基本是一致的,这里只画出了其中的一根信号线与外电路的连接示意图) 七、实现功能与技术指标: 1. 软件上可以识别前、后、左、右、停等语音指令,并发出相应的控制信号。 2. 硬件上可以实时的收发无限信号,并控制小 车作相应的动作。 3. 语音识别正确率大于95%,从发出语音指令 到执行该指令的延时小于100ms。 八、与原设计方案的比较: 我们的整个方案基本是按照原设计方案来进行的,各项指标也基本达到了预定目标。 九、经费使用情况: 主要分为两部分: 第一, 由于我们都没有学过语音识别方面的知识,所以一开始我们就买了一些参考书和资料。 第二, 在软件部分初步成型后,在对小车进行改装时购买了一些电子元器件以及其他一些工具。 十、致谢: 感谢华为研究所为我们提供这样好的锻炼机会,我们从中学到了很多书本上学不到的知识。 感谢铁伟涛同学为我们提供方案支持。 感谢我的导师魏衡华老师和314实验室的所有负责人为我们提供PC机和其它硬件条件以及方便的实验环境。 感谢所有的评委老师在开题和中评审中给我们提供很多宝贵的意见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值