热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

语音端点检测matlab论文,基于MATLAB的语音端点检测

求助,哪位高手帮忙看看以下程序全不?基于Matlab编写的语音端点检测程序function[x1,x2]vad(x)%幅度归一化到[-1,1]xdouble(x);xxmax(ab

求助,哪位高手帮忙看看以下程序全不?

基于Matlab编写的语音端点检测程序

function [x1,x2] = vad(x)

%幅度归一化到[-1,1]

x = double(x);

x = x / max(abs(x));

%常数设置

FrameLen = 240;

FrameInc = 80;

amp1 = 10;

amp2 = 2;

zcr1 = 10;

zcr2 = 5;

maxsilence = 8;  % 6*10ms  = 30ms

minlen  = 15;    % 15*10ms = 150ms

status  = 0;

count   = 0;

silence = 0;

%计算过零率

tmp1  = enframe(x(1:end-1), FrameLen, FrameInc);

tmp2  = enframe(x(2:end)  , FrameLen, FrameInc);

signs &#61; (tmp1.*tmp2)<0;

diffs &#61; (tmp1 -tmp2)>0.02;

zcr   &#61; sum(signs.*diffs, 2);

%计算短时能量

amp &#61; sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);

%调整能量门限

amp1 &#61; min(amp1, max(amp)/4);

amp2 &#61; min(amp2, max(amp)/8);

%开始端点检测

x1 &#61; 0;

x2 &#61; 0;

for n&#61;1:length(zcr)

goto &#61; 0;

switch status

case {0,1}                   % 0 &#61; 静音, 1 &#61; 可能开始

if amp(n) > amp1          % 确信进入语音段

x1 &#61; max(n-count-1,1);

status  &#61; 2;

silence &#61; 0;

count   &#61; count &#43; 1;

elseif amp(n) > amp2 | ... % 可能处于语音段

zcr(n) > zcr2

status &#61; 1;

count  &#61; count &#43; 1;

else                       % 静音状态

status  &#61; 0;

count   &#61; 0;

end

case 2,                       % 2 &#61; 语音段

if amp(n) > amp2 | ...     % 保持在语音段

zcr(n) > zcr2

count &#61; count &#43; 1;

else                       % 语音将结束

silence &#61; silence&#43;1;

if silence

count  &#61; count &#43; 1;

elseif count

status  &#61; 0;

silence &#61; 0;

count   &#61; 0;

else                    % 语音结束

status  &#61; 3;

end

end

case 3,

break;

end

end

count &#61; count-silence/2;

x2 &#61; x1 &#43; count -1;

subplot(311)

plot(x)

axis([1 length(x) -1 1])

ylabel(&#39;Speech&#39;);

line([x1*FrameInc x1*FrameInc], [-1 1], &#39;Color&#39;, &#39;red&#39;);

line([x2*FrameInc x2*FrameInc], [-1 1], &#39;Color&#39;, &#39;red&#39;);

subplot(312)

plot(amp);

axis([1 length(amp) 0 max(amp)])

ylabel(&#39;Energy&#39;);

line([x1 x1], [min(amp),max(amp)], &#39;Color&#39;, &#39;red&#39;);

line([x2 x2], [min(amp),max(amp)], &#39;Color&#39;, &#39;red&#39;);

subplot(313)

plot(zcr);

axis([1 length(zcr) 0 max(zcr)])

ylabel(&#39;ZCR&#39;);

line([x1 x1], [min(zcr),max(zcr)], &#39;Color&#39;, &#39;red&#39;);

line([x2 x2], [min(zcr),max(zcr)], &#39;Color&#39;, &#39;red&#39;);

程序&#xff1a;

%读入语音文件

fin&#61;fopen(&#39;DR4_MLJHO_SX334.ADC&#39;,&#39;r&#39;);

x&#61;fread(fin,&#39;short&#39;);

fclose(fin);

%窗长

l&#61;300;

step&#61;100;

e_x&#61;frame(x,&#39;energy&#39;);

figure(1);

plot(e_x,&#39;LineWidth&#39;,2);

xlabel(&#39;时间t&#39;);

ylabel(&#39;贞输出&#39;);

s&#61;sort(e_x);

min_e&#61;s(ceil(5*step/64));

max_e&#61;s(length(s)-ceil(5*step/64));

%设置阈值

threshold&#61;min_e&#43;0.2*(max_e-min_e);

a&#61;e_x>threshold;

%门限检验

if((length(a)<15*64/step)|(max_e/min_e<1.3)),

disp(&#39;No speech found&#39;);

else

figure(2);

plot(a,&#39;LineWidth&#39;,2);

xlabel(&#39;时间 t&#39;);

ylabel(&#39;端点&#39;);

set(gca,&#39;ylim&#39;,[0 1.5]);

end

%frame.m

function[yy]&#61;frame(x,func,SAMP_FREQ,1,step)

[m,n]&#61;size(x);

if m>n

n&#61;m;

else

n&#61;n;

x&#61;x&#39;;

end

if nargin<3,SAMP_FREQ&#61;8000;end;

if nargin<4,l&#61;SAMP_FREQ/40;end;

if nargin<5,step&#61;1/2;end;

%贞的数目

num_frame&#61;ceil(n/step);

%补零

x(n&#43;1:n&#43;2*1)&#61;zeros(2*1,1);

i&#61;[0:step:num_frames*step]&#39;;

j&#61;i*ones(1,1);

i&#61;j&#43;ones(num_frames&#43;1,1)*[1:1];

y&#61;reshape(x(i),num_frames&#43;1,1)&#39;;

y&#61;(hanning(l)*ones(1,num_frames&#43;1)).*y;

for i&#61;1:num_frames

cmd&#61;sprintf(&#39;yy(:,i)&#61;%s(y(:,i));&#39;,func);

eval(cmd);

end

[本帖最后由 mooni 于 2009-4-8 13:38 编辑]

a70cbf5f56cb187f20fb09bae08ed3de.gif

2009-4-8 13:30 上传

点击文件名下载附件

2.39 KB, 下载次数: 12025

a70cbf5f56cb187f20fb09bae08ed3de.gif

2009-4-8 13:30 上传

点击文件名下载附件

1.08 KB, 下载次数: 8257



推荐阅读
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • switch语句的一些用法及注意事项
    本文介绍了使用switch语句时的一些用法和注意事项,包括如何实现"fall through"、default语句的作用、在case语句中定义变量时可能出现的问题以及解决方法。同时也提到了C#严格控制switch分支不允许贯穿的规定。通过本文的介绍,读者可以更好地理解和使用switch语句。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
author-avatar
bls6653474
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有