热门标签 | 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



推荐阅读
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 2012-06-0821:26:42  用matlab来建模,仿真不同时刻ostask在队列中的装载情况。输入参数如下作为初学者,M文件写的有点长。能实现功能就算学以致用了。cle ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 在PHP中,高效地分割字符串是一项常见的需求。本文探讨了多种技术,用于在特定字符(如“或”)后进行字符串分割。通过使用正则表达式和内置函数,可以实现更加灵活和高效的字符串处理。例如,可以使用 `preg_split` 函数来实现这一目标,该函数允许指定复杂的分隔符模式,从而提高代码的可读性和性能。此外,文章还介绍了如何优化分割操作以减少内存消耗和提高执行速度。 ... [详细]
  • 本文深入解析了Linux系统中常用的文件和目录操作命令,包括但不限于`ls`、`cd`等。通过详细讲解每个命令的功能、语法及应用场景,帮助读者掌握这些基本工具的使用方法,提升在Linux环境下的操作效率。此外,文章还介绍了如何结合选项和参数来实现更复杂的文件管理任务,为初学者提供了丰富的实践示例和技巧。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 使用 `git stash` 可以将当前未提交的修改保存到一个临时存储区,以便在后续恢复工作目录时使用。例如,在处理中间状态时,可以通过 `git stash` 命令将当前的所有未提交更改推送到一个新的储藏中,从而保持工作目录的整洁。此外,本文还将详细介绍如何解决 `git stash pop` 时可能出现的冲突问题,帮助用户高效地管理代码变更。 ... [详细]
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社区 版权所有