资源简介
双门限语音端点检测 MATLAB程序 在使用时,新建一个M文件,调用此函数即可。
代码片段和文件信息
function [x1x2] = vad(x)%新建一个文件M,调用此函数即可
%幅度归一化到[-11]
x = double(x);
x = x / max(abs(x));
%常数设置
frameLen = 240;%帧长为240点
frameInc = 80;%帧移为80点
amp1 = 10;%初始短时能量高门限
amp2 = 2;%初始短时能量低门限
zcr1 = 10;%初始短时过零率高门限
zcr2 = 5;%初始短时过零率低门限
maxsilence = 8; % 8*10ms = 80ms
%语音段中允许的最大静音长度,如果语音段中的静音帧数未超过此值,则认为语音还没结束;如果超过了
%该值,则对语音段长度count进行判断,若count
%状态0;若count>minlen,则认为语音段结束;
minlen = 15; % 15*10ms = 150ms
%语音段的最短长度,若语音段长度小于此值,则认为其为一段噪音
status = 0; %初始状态为静音状态
count = 0; %初始语音段长度为0
silence = 0; %初始静音段长度为0
%计算过零率
tmp1 = enframe(x(1:end-1) frameLen frameInc);
tmp2 = enframe(x(2:end) frameLen frameInc);
signs = (tmp1.*tmp2)<0;
diffs = (tmp1 -tmp2)>0.02;
zcr = sum(signs.*diffs 2);
%计算短时能量
%amp = sum(abs(enframe(filter([1 -0.9375] 1 x) frameLen frameInc)) 2);
amp = sum(abs(enframe(x frameLen frameInc)) 2);
%调整能量门限
amp1 = min(amp1 max(amp)/4);
amp2 = min(amp2 max(amp)/8);
%开始端点检测
x1 = 0;
x2 = 0;
for n=1:length(zcr)
goto = 0;
switch status
case {01} % 0 = 静音 1 = 可能开始
if amp(n) > amp1 % 确信进入语音段
x1 = max(n-count-11);
status = 2;
silence = 0;
count = count + 1;
elseif amp(n) > amp2 | ... % 可能处于语音段
zcr(n) > zcr2
status = 1;
count = count +
相关资源
- matlab处理数字图像贴标签
- MATLAB程序(图像去噪 滤波 锐化 边缘
- MATLAB多径+扩频+rake接受+误码率曲线
- 二维云模型MATLAB
- 用于解决复杂网络社区划分的FastNew
- MIMO 注水算法 Matlab代码
- 基于遗传算法的高校在线排课系统的
- 分布式电源接入对配电网的影响
- matlab材料力学剪力图弯矩图绘制程序
- 路径规划 matlab
- Matlab图像识别
- 图像滤波Matlab代码
- 微电网光伏并网过程进行仿真microgr
-
双极性SPWM的simuli
nk仿真 - 无网格matlab程序
- 将世界时间转换为格林威治恒星时的
- MATLAB串口采集数据进阶
- MATLABGUI图割法(Grabcut)对象分割
- Matlab光学实验程序
- 人眼识别matlab
- 传染病模型的MATLAB程序和图数学模型
- VREP与MATLAB联合仿真程序--UR5机械臂动
- MATLAB-robotic-toolbox工具箱学习笔记
- 用matlab实现银行卡卡号定位并自动切
- 采用格子bolzmann方法MATLAB模拟圆柱绕流
- matlab 实现语音增强含维纳滤波、谱减
- 费诺编码matlab程序
- 单相桥式整流电路闭环相控调压
- 基于LDA(fisherface)和KNN的人脸识别
- jakes model实现锐利多径的matlab代码
评论
共有 条评论