语音识别-过零率和短时能量-端点检测
端点检测
个人理解
能量与过零数的端点检测算法步骤
- 语音信号x(n)进行分帧处理
- 计算每一帧的短时能量,得到语音的短时帧能量
- 计算每一帧语音的过零数,得到短时帧过零数
- 考擦语音的平均能量设置一个较高的门限T1,用以确定语音的开始,然后根据背景噪声的平均能量确定一个稍低的门限T2,用以确定第一级语音结束点。第二级判决同样根据背景噪声平均过零,设置一个门限T3,判断语音前段清音和后端尾音。
我直接根据幅度来设置门限
a. 语音信号分帧处理
filedir=[];%设置路径
filename='D:\matlab\music\zj3.wav';
file=[filedir filename];
[x,Fs]=audioread(file);%得到语音信号的数据wlen=200;%帧长
inc=100;%帧移
win=hamming(wlen);%海明窗
N=length(x);%信号长度
time=(0:N-1)/Fs;%计算出信号的时间刻度X=enframe(x,win,inc)'; %分帧,一列是一帧
fn=size(X,2);%帧数
frameTime=frame2time(fn,wlen,inc,Fs); %求出每帧对应的时间
%这个公式得再看一下
b.
%短时能量for i=1:fny=X(:,i);%每一帧数据b=0;for m=1:1:200 %这是根据帧长定的b=b+y(m).^2; endE(i)=b;end%%参考-更简单点-尚未理解fn=size(X,2); % 求出帧数
time=(0:N-1)/Fs; % 计算出信号的时间刻度
for i=1 : fnu=X(:,i); % 取出一帧u2=u.*u; % 求出能量En(i)=sum(u2); % 对一帧累加求和
end
c. 短时帧过零数
%短时过零率Z=zeros(1,fn); % 初始化for i=1:fny=X(:,i);%每一帧数据b=0;for m=1:1:199 %根据帧长来定的if y(m)*y(m+1)<0;b=b+1;endZ(i)=b;endend%%更简单点-尚未理解fn=size(X,2); % 获取帧数
zcr1=zeros(1,fn); % 初始化
for i=1:fnz=X(:,i); % 取得一帧数据for j=1: (wlen- 1) ; % 在一帧内寻找过零点if z(j)* z(j+1)< 0 % 判断是否为过零点zcr1(i)=zcr1(i)+1; % 是过零点,记录1次endend
end
d.根据平均能量来设置门限
平均能量的结果:
[外链图片转存失败(img-Ciy7MbEu-1563959907473)(D:\matlab\语音信号处理实验教程-自己\assets\短时能量.jpg)]
E共有818个数据
T1设置为0.01,即当找到大于0.1标记。语音的开始
T2设置为0.001,即当找到小于0.001标记。语音的结束
找到了点,但是编程有点问题。就是要只显示端点而不是全部显示
[外链图片转存失败(img-2wWpu6Tz-1563959907475)(assets/找到了点-1但是没找到端点.jpg)]
经修改
[外链图片转存失败(img-SRvXb1fn-1563959907476)(assets/找到点-有点问题.jpg)]
过零率端点找得有点问题
%能量与过零数的端点检测算法1
clear all;
clc;
filedir=[];%设置路径
filename='D:\matlab\music\zs.wav';
file=[filedir filename];
[x,Fs]=audioread(file);
xmax=max(abs(x));
x=x/xmax';%归一化x=filter([1 -0.98],[1],x);%预加重wlen=200;%帧长
inc=100;%帧移
win=hamming(wlen);%海明窗
N=length(x);%信号长度
time=(0:N-1)/Fs;%计算出信号的时间刻度X=enframe(x,win,inc)'; %分帧,一列是一帧
% Xmax=max(abs(X));%矩阵归一化,这个还不行
% X=X/Xmax;
fn=size(X,2)';%帧数
frameTime=frame2time(fn,wlen,inc,Fs); %求出每帧对应的时间
%这个公式得再看一下%短时能量
for i=1:fny=X(:,i);%每一帧数据b=0;for m=1:1:200%一帧中的数据b=b+y(m).^2;endE(i)=b;
end%短时过零率
Z=zeros(1,fn); % 初始化,fn之前用过
for i=1:fny=X(:,i);%每一帧数据b=0;for m=1:1:199if y(m)*y(m+1)<0;b=b+1;endZ(i)=b;end
end%找短时能量的门限来确定语音的开始和结束
zeros(i);
q=[];%存储开始语音界限的位置
i1=1;
while (i1<length(E))for i1=i1:1:length(E)e=E(i1);if e>0.1q=[q i1-1];i1=i1+1;for i2=i1:length(E)e=E(i2);if e<0.1q=[q i2+1];i1=i2+1;breakend endbreakendend
end%过零率
i1=1;
w=[];%存储结束语音界限位置
while (i1<length(Z))for i1=i1:1:length(Z)e=Z(i1);if e>120w=[w i1];i1=i1+1;for i2=i1:length(Z)e=Z(i2);if e<50w=[w i2+1];i1=i2+1;breakend endbreakendend
end%画图subplot(311)plot(time,x);title('原始信号')xlabel('时间');ylabel('幅度');subplot(312)plot(frameTime(q),E(q),'or');hold onplot(frameTime,E);title('短时能量')xlabel('时间');ylabel('幅度');subplot(313)plot(frameTime(w),Z(w),'or');hold onplot(frameTime,Z);title('过零率')xlabel('时间');ylabel('次数');
最终结果
问题:因为判断方式不同,书上的判断更准确。
根据幅度来判断变化比较大,且还得根据音频来切换幅度。
语音识别-过零率和短时能量-端点检测相关推荐
- 语音处理/语音识别基础(六)- 语音的端点检测(EPD/VAD)
端点检测(End-point Detection,简称 EPD)的目标,是要找到音频信号(音讯)的开始和结束的位置,所以又可以称为 Speech Detection 或是 VAD (Voice Act ...
- 【语音识别】基于matlab语音分帧+端点检测+pitch提取+DTW算法歌曲识别【含Matlab源码 1057期】
⛄一.DTW简介 Dynamic Time Warping(DTW)诞生有一定的历史了(日本学者Itakura提出),它出现的目的也比较单纯,是一种衡量两个长度不同的时间序列的相似度的方法.应用也比较 ...
- 【语音识别】基于matlab GUI MFCC+VAD端点检测智能语音门禁系统【含Matlab源码 451期】
⛄一.MFCC简介 1 引言 语音识别是一种模式识别, 就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的技术.语音识别技术主要包括特征提取技术.模式匹配准则及模型训练技术3个方面.目前一 ...
- 【语音识别】语音端点检测及Python实现
[语音识别]语音端点检测及Python实现 一.语音信号的分帧处理 二.端点检测方法 2.1.短时能量 2.2.短时过零率 三.Python实现 从接收的语音信号中准确检测出人声开始和结束的端点是进行 ...
- 【基于pyAudioKits的Python音频信号处理(七)】端点检测和语音识别
pyAudioKits是基于librosa和其他库的强大Python音频工作流支持. API速查手册 通过pip安装: pip install pyAudioKits 本项目的GitHub地址,如果这 ...
- 基于双门限法的端点检测
基于双门限法的端点检测 代码+论文+PPT+仿真结果下载地址:下载地址 摘要 语音端点检测是指从一段语音信号中准确的找出语音信号的起始点和结束点,它的目的是为了使有效的语音信号和无用的噪声信号得以分离 ...
- MATLAB语音端点检测
第一章 绪论 Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发.数据可视化.数据分析以及数值计算的高级技术计算语言和交 ...
- C# 语音端点检测(VAD)实现过程分析
前言: 早期的方法大多是基于声学特征的提取, 在时域上, 1975年, Rabiner 等人提出了基于短时能量和过零率的语音端点检测方法, 这是第一个系统而完整的语音端点检测算法.该方法共有三个门限值 ...
- matlab浊音段和清音段,基于Matlab编写的语音端点检测1
wavread 基于Matlab编写的语音端点检测 专业: 班级: 姓名: 指导教师: 2011年6月18日 一.实验目的 1.学会MATLAB的使用,掌握MATLAB的程序设计方法: 3.掌握语音处 ...
最新文章
- firebug 的使用
- Get 了滤镜、动画、AR 特效,速来炫出你的短视频开发特技!
- PHP之mb_internal_encoding使用
- SEH反调试(SetUnhandledExceptionFilter)
- android 自定义flowlayout,Android 自定义ViewGroup之实现FlowLayout-标签流容器
- (7)nginx: 搭建 nginx+php环境
- node install.js 很长_余生很长,放下错的人,才能拥抱属于你的幸福。很唯美的心灵鸡汤...
- 【转】.NET平台开发Mongo基础知识
- dax 筛选 包含某个字_Power BI 利器——DAX
- 从程序员到项目经理(四):外行可以领导内行吗
- java三角形创建子类,A派生出子类B,B派生出子类C,并且在Java源代码中有如下声明: 1.A a0=new 2.A a1 =new 3.A a2=new 问以下哪个说法是正确的?()...
- input的一些使用方法
- 本地升级MySQL数据库版本为8.0.23,使用SQLyog(小海豚)无法进行连接
- c++ 智能指针的问题_窥见C++11智能指针
- DEVC编译器快捷键大全
- 2022 LINUX运维面试题目精选
- vue.js下载安装教程
- python可以手眼定标吗_机器人无标定手眼协调
- PhpSpreadsheet读取excel
- python 读取csv文件转成字符串,python实现csv格式文件转为asc格式文件的方法