一、语音处理简介

1 语音信号的特点
通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点:
①在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。利用这个特点,可以用一个防混迭的带通滤波器将此范围内的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。
②在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。

2 语音信号的采集
在将语音信号进行数字化前,必须先进行防混叠预滤波,预滤波的目的有两个:①抑制输入信导各领域分量中频率超出fs/2的所有分量(fs为采样频率),以防止混叠干扰。②抑制50Hz的电源工频干扰。这样,预滤波器必须是一个带通滤波器,设其上、下截止颜率分别是fH和fL,则对于绝人多数语音编译码器,fH=3400Hz、fL=60~100Hz、采样率为fs=8kHz;而对丁语音识别而言,当用于电话用户时,指标与语音编译码器相同。当使用要求较高或很高的场合时fH=4500Hz或8000Hz、fL=60Hz、fs=10kHz或20kHz。
为了将原始模拟语音信号变为数字信号,必须经过采样和量化两个步骤,从而得到时间和幅度上均为离散的数字语音信号。采样也称抽样,是信号在时间上的离散化,即按照一定时间间隔△t在模拟信号x(t)上逐点采取其瞬时值。采样时必须要注意满足奈奎斯特定理,即采样频率fs必须以高于受测信号的最高频率两倍以上的速度进行取样,才能正确地重建波它是通过采样脉冲和模拟信号相乘来实现的。
在采样的过程中应注意采样间隔的选择和信号混淆:对模拟信号采样首先要确定采样间隔。如何合理选择△t涉及到许多需要考虑的技术因素。一般而言,采样频率越高,采样点数就越密,所得离散信号就越逼近于原信号。但过高的采样频率并不可取,对固定长度(T)的信号,采集到过大的数据量(N=T/△t),给计算机增加不必要的计算工作量和存储空间;若数据量(N)限定,则采样时间过短,会导致一些数据信息被排斥在外。采样频率过低,采样点间隔过远,则离散信号不足以反映原有信号波形特征,无法使信号复原,造成信号混淆。根据采样定理,当采样频率大于信号的两倍带宽时,采样过程不会丢失信息,利用理想滤波器可从采样信号中不失真地重构原始信号波形。量化是对幅值进行离散化,即将振动幅值用二进制量化电平来表示。量化电平按级数变化,实际的振动值是连续的物理量。具体振值用舍入法归到靠近的量化电平上。
语音信号经过预滤波和采样后,由A/D变换器变换为二址制数字码。这种防混叠滤波通常与模数转换器做在一个集成块内,因此目前来说,语音信号的数字化的质量还是有保证的。
采集到语音信号之后,需要对语音信号进行分析,如语音信号的时域分析、频谱分析、语谱图分析以及加噪滤波等处理。

3 语音信号分析技术
语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理[8]。而且,语音合成的音质好坏,语音识别率的高低,也都取决于对语音信号分桥的准确性和精确性。因此语音信号分析在语音信号处理应用中具有举足轻重的地位。
贯穿于语音分析全过程的是“短时分析技术”。因为,语音信号从整体来看其特性及表征其本质特征的参数均是随时间而变化的,所以它是一个非乎稳态过程,不能用处理乎稳信号的数字信号处理技术对其进行分析处理。但是,由于不同的语音是由人的口腔肌肉运动构成声道某种形状而产生的响应,而这种口腔肌肉运动相对于语音频率来说是非常缓慢的,所以从另一方面看,虽然语音倍号具有时变特性,但是在一个短时间范围内(一般认为在10~30ms的短时间内),其特性基本保持不变即相对稳定,因面可以将其看作是一个准稳态过程,即语音信号具有短时平稳性。所以任何语音信号的分析和处理必须建立在“短时”的基础上.即进行“短时分析”,将语音信号分为一段一段来分析其特征参数,其中每一段称为一“帧”,帧长一般取为10~30ms。这样,对于整体的语音信号来讲,分析出的是由每一帧特征参数组成的特征参数时间序列。
根据所分析出的参数的性质的不同,可将语音信号分析分为时域分析、频域分析、倒领域分析等;时域分析方法具有简单、计算量小、物理意义明确等优点,但由于语音信号最重要的感知特性反映在功率谱中,而相位变化只起着很小的作用,所以相对于时域分析来说频域分析更为重要。

4 语音信号的时域分析
语音信号的时域分析就是分析和提取语音信号的时域参数。进行语音分析时,最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。这种分析方法的特点是:①表示语音信号比较直观、物理意义明确。②实现起来比较简单、运算且少。③可以得到语音的一些重要的参数。④只使用示波器等通用设备,使用较为简单等。
语音信号的时域参数有短时能量、短时过零率、短时白相关函数和短时平均幅度差函数等,这是语音信号的一组最基本的短时参数,在各种语音信号数字处理技术中都要应用[6]。在计算这些参数时使用的一般是方窗或汉明窗。

5 语音信号的频域分析
语音信号的频域分析就是分析语音信号的频域持征。从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法、线件预测法等几种。

二、部分源代码

function varargout = dsp(varargin)
% --- 数字音频分析与处理系统
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @dsp_OpeningFcn, ...'gui_OutputFcn',  @dsp_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end% --- Executes just before dsp is made visible.
function dsp_OpeningFcn(hObject, eventdata, handles, varargin)% Choose default command line output for dsp
handles.output = hObject;% 设置坐标轴
set(gcf,'defaultAxesXGrid','off', ...'defaultAxesYGrid','off', ...'defaultAxesZGrid','off');% 初始化
movegui(gcf,'center'); % figure居中
handles.Sample=[]; % 初始化样本为空
handles.CSample=[]; % 初始化样本副本
handles.volume=0; % 初始化音量为0
handles.Fs=0; % 初始化采样率if (exist('speech_database.mat','file')==2)load('speech_database.mat','-mat');handles.data=data;c=data2cell(handles.data);
elsec=cell(0,0);
end
set(handles.data_uitable,'Data',c);% Update handles structure
guidata(hObject, handles);% --- Outputs from this function are returned to the command line.
function varargout = dsp_OutputFcn(hObject, eventdata, handles)% Get default command line output from handles structure
varargout{1} = handles.output;function record_radiobutton_Callback(hObject, eventdata, handles)function file_radiobutton_Callback(hObject, eventdata, handles)% --- 显示文件路径
function filepath_edit_Callback(hObject, eventdata, handles)function filepath_edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction fs_popupmenu_Callback(hObject, eventdata, handles)function fs_popupmenu_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end% --- 文件输入音频
function file_choose_pushbutton_Callback(hObject, eventdata, handles)
[filename,pathname]=uigetfile({'*.wav;*.mp3;*.flac;*.m4a', ...'音频文件(*.wav,*.mp3,*.flac,*.m4a)'},'选择文件');%弹出选择文件窗口
% 判断文件为空
% 不能使用if isempty(filename)||isempty(pathname)
% 取消窗口时会报错,取消时uigetfile返回filename为0
if filename==0return
elsehandles.Filepath=[pathname,filename];set(handles.filepath_edit,'string',handles.Filepath);% 显示文件名[handles.Sample,handles.Fs]=audioread(handles.Filepath);% 读取音频文件% 若输入音频为双声道,则使用一个通道samplesize=size(handles.Sample);if samplesize(2)>1handles.Sample=handles.Sample(:,1);endhandles.CSample=handles.Sample;% 创建副本handles.player=audioplayer(handles.CSample,handles.Fs);setplayer(handles);set(handles.play_pushbutton,'enable','on');set(handles.play_stop_pushbutton,'enable','on');set(handles.putfile_pushbutton,'enable','on');guidata(hObject,handles);
end% --- 录音按钮
function record_start_pushbutton_Callback(hObject, eventdata, handles)
fs_list=get(handles.fs_popupmenu,'string');% 获取列表
fs_value=get(handles.fs_popupmenu,'value');% 获取参数序号
fs=str2double(fs_list{fs_value});% 获取选定采样率
% list类型为cell必须转换
handles.Fs=fs;handles.recObj=audiorecorder(fs,16,1);% 创建一个录音器set(handles.recObj,'StartFcn',{@recordstart_Callback,handles}, ...'StopFcn',{@recordstop_Callback,handles}); % 录音回调record(handles.recObj);% 开始录音guidata(hObject,handles);% --- 停止录音按钮
function record_stop_pushbutton_Callback(hObject, eventdata, handles)
stop(handles.recObj);% 停止录音
handles.Sample=getaudiodata(handles.recObj);% 获取录音
handles.CSample=handles.Sample;% 创建副本
handles.player=audioplayer(handles.CSample,handles.Fs);
setplayer(handles);guidata(hObject,handles);% --- 播放器设置
function setplayer(handles)
% 创建player回调函数
set(handles.player,'StartFcn',{@playstart_Callback,handles}, ...'StopFcn',{@playstop_Callback,handles});% 音频信息
sample_length=length(handles.Sample); % 音频时长
t=sample_length/handles.Fs;
set(handles.timeinfo_text,'String',['时长:',num2str(t),'s']); % 显示时长
set(handles.fsinfo_text,'String',['采样率:',num2str(handles.Fs),'Hz']); % 显示采样率% plot wave
audio_analyze(handles.Sample,handles.Fs,handles.axes1,handles); % 绘制初始样本
audio_analyze(handles.CSample,handles.Fs,handles.axes2,handles);% 绘制样本副本nvar=std(handles.Sample).^2; % 初始方差
set(handles.nvar_edit,'String',round(nvar,3,'significant'));
nmean=mean(handles.Sample); % 初始均值
set(handles.nmean_edit,'String',round(nmean,3,'significant'));
dvar=std(handles.CSample).^2; % 样本方差
set(handles.dvar_edit,'String',round(dvar,3,'significant'));
dmean=mean(handles.CSample); % 样本均值
set(handles.dmean_edit,'String',round(dmean,3,'significant'));% --- 播放按钮
function play_pushbutton_Callback(hObject, eventdata, handles)
play(handles.player);% 开始播放% --- 停止播放按钮
function play_stop_pushbutton_Callback(hObject, eventdata, handles)
stop(handles.player);% 停止播放% --- 输入方式按钮组
function uibuttongroup1_SelectionChangedFcn(hObject, eventdata, handles)
switch get(hObject,'tag')case 'record_radiobutton'set(handles.fs_popupmenu,'enable','on');set(handles.record_start_pushbutton,'enable','on');set(handles.record_stop_pushbutton,'enable','off');set(handles.filepath_edit,'enable','off');set(handles.file_choose_pushbutton,'enable','off');set(handles.play_pushbutton,'enable','off');set(handles.play_stop_pushbutton,'enable','off');case 'file_radiobutton'set(handles.fs_popupmenu,'enable','off');set(handles.record_start_pushbutton,'enable','off');set(handles.record_stop_pushbutton,'enable','off');set(handles.filepath_edit,'enable','on');set(handles.file_choose_pushbutton,'enable','on');set(handles.play_pushbutton,'enable','off');set(handles.play_stop_pushbutton,'enable','off');
end% --- 波形选择栏
function wave_select_listbox_Callback(hObject, eventdata, handles)
audio_analyze(handles.Sample,handles.Fs,handles.axes1,handles);
audio_analyze(handles.CSample,handles.Fs,handles.axes2,handles);function wave_select_listbox_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end

三、运行结果






四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
[3]宋云飞,姜占才,魏中华.基于MATLAB GUI的语音处理界面设计[J].科技信息. 2013,(02)

【语音处理】基于matlab GUI数字音频分析与处理系统【含Matlab源码 1739期】相关推荐

  1. 【通信仿真】基于matlab GUI数字基带通信仿真【含Matlab源码 2510期】

    ⛄一.数字基带信号波形仿真简介 主要研究了数字信号的基带传输的基本概念及数字信号基带传输的传输过程和如何用MATLAB软件仿真设计数字基带传输系统.本文首先介绍了MATLAB仿真软件.然后介绍了本课题 ...

  2. 【肌电信号】基于matlab GUI脉搏信号分析(去噪+特征提取)【含Matlab源码 862期】

    ⛄一.脉搏信号分析简介 人体脉搏信号是一种微弱信号, 信噪比较低.在检测和采集时, 由于受仪器.人体等方面的影响, 所采集的信号中常存在如下3种噪声:1) 基线漂移.人体呼吸等低频干扰, 频率小于1 ...

  3. 【语音隐写】基于matlab GUI DCT音频数字水印嵌入提取【含Matlab源码 837期】

    一.离散小波变换的音频信号数字水印技术简介 0 引言 近年来, 数字水印技术的作用越来越重要.数字水印技术是将一些标识信息直接嵌入数字载体当中, 或间接表示在信号载体中, 且不影响原载体的使用价值.通 ...

  4. 【电力预测】基于matlab GUI灰色模型电力负荷预测【含Matlab源码 769期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [电力负荷预测]基于matlab GUI灰色模型电力负荷预测[含Matlab源码 769期] 获取代码方式2: 通过订阅紫极神光博客付费专 ...

  5. 【芯片识别】基于matlab GUI形态学PCB板芯片识别【含Matlab源码 1820期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[芯片识别]基于matlab GUI形态学 PCB板芯片识别[含Matlab源码 1820期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  6. 【大米粒计数】基于matlab GUI形态学大米粒颗粒识别【含Matlab源码 915期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[大米粒计数]基于matlab GUI形态学大米粒颗粒识别[含Matlab源码 915期] (https://download.csdn. ...

  7. 【光学】基于matlab GUI菲涅尔系数计算【含Matlab源码 1165期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI菲涅尔系数计算[含Matlab源码 1165期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  8. 基于JAVA学生管理部门信息共享交流系统计算机毕业设计源码+系统+数据库+lw文档+部署

    基于JAVA学生管理部门信息共享交流系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA学生管理部门信息共享交流系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目 ...

  9. [智慧农业]Python基于改进YOLOv5的猕猴桃叶病害检测系统(完整源码&数据集&视频教程)

    1.背景 现如今由于农作物病虫害的多样性和复杂性,在特定的条件下其很容易在大范围内发生,导致农产品产量急剧下降.因此,预防和监测农作物病虫害已成为农业生产活动中的重要环节.当前,耕地面积逐渐减少,世界 ...

  10. 基于JAVA甜趣网上蛋糕店订购系统计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVA甜趣网上蛋糕店订购系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA甜趣网上蛋糕店订购系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S ...

最新文章

  1. J2EE项目移植问题一
  2. 将自己写的经常复用的类封装成动态库的方法
  3. 若想学 HTML,应从何入手?
  4. 签名别人的公钥以及验证签名的公钥
  5. FIFO算法与LRU算法软考试题
  6. 弹出“FRM-40400:事务完成:已应用和保存X条记录
  7. 640-802 新版CCNA考试题库下载
  8. 乐橙本地录像回放不了_解决大华或乐橙录像机添加摄像头不能显示的密码问题...
  9. LaTeX 008:比较方便的键入下划线的方式
  10. 国内各大高校开源镜像站
  11. php小小通讯录,小小通讯录
  12. linux服务器挂掉之后
  13. 《Implicit Class-Conditioned Domain Alignment for Unsupervised Domain Adaptation》
  14. oracle数据库小记
  15. ggplot2绘制点图
  16. css文件处理,安装 less-loader
  17. Java api中文在线版
  18. 备份/恢复数据库资料
  19. 微信服务号开发-获取用户位置信息
  20. 云适配联合IT巨头拟成立“中国企业级HTML5产业联盟”

热门文章

  1. Leetcode题目practice
  2. 济南 天然气 暖气 物业费 水费 电费价格
  3. Linux 命令查询工具
  4. jquery-animate()动画
  5. 初识Git 如何使用Git将本地项目上传到Github
  6. 【代码笔记】iOS-手机系统版本
  7. 【ImageMagick】ImageMagick命令行工具
  8. 一种支持多种并行环境的栅格地理计算并行算子
  9. 190117每日一句
  10. Atitit 设计模式与算法,与流程的关系