【特征提取】语音信号短时能量含Matlab源码

本文介绍了一种基于短时能量的语音信号端点检测方法,并通过实验验证了该方法的有效性。采用不同短时能量计算方式及阈值进行检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

​1 简介

语音信号端点检测是语音信号的预处理,正确的语音信号端点检测结果直接影响语音识别等后续工作的运算量和准确率.本文介绍了时域方法中基于短时能量的语音信号端点检测方法,并用三种不同的短时能量计算方式和五种短时能量闲值进行了端点检测实验.

2 完整代码

clear all; clc; close all;filedir=[];                % 设置路径filename='s.wav';   % 设置文件名fle=[filedir filename];    % 构成完整的路径和文件名[x,Fs]=audioread(fle);     % 读入数据文件wlen=200; inc=80;          % 给出帧长和帧移win=hanning(wlen);         % 给出海宁窗N=length(x);               % 信号长度X=enframe(x,win,inc)';     % 分帧fn=size(X,2);              % 求出帧数。size函数里选择1时是返回行数,2是返回列数time=(0:N-1)/Fs;           % 计算出信号的时间刻度for i=1 : fn    u=X(:,i);              % 取出一帧    u2=u.*u;               % 求出能量    En(i)=sum(u2);         % 对一帧累加求和endsubplot 211; plot(time,x,'k'); % 画出时间波形 title('语音波形');ylabel('幅值'); xlabel(['时间/s' 10 '(a)']);frameTime=frame2time(fn,wlen,inc,Fs);   % 求出每帧对应的时间subplot 212; plot(frameTime,En,'k')     % 画出短时能量图title('短时能量'); ylabel('幅值'); xlabel(['时间/s' 10 '(b)']);
function frameTime=frame2time(frameNum,framelen,inc,fs)% ================= 计算分帧后每一帧对应的时间=====================% ================= 输     入 ===================================%frameNum          :  总帧数%framelen          : 帧长%inc               :  帧移%fs                : 采样频率%================== 输     出 ====================================%frametime         : 每帧的时间,即取这一帧数据中间位置的时间frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;
function f=enframe(x,win,inc) %ENFRAME split signal up into (overlapping) frames: one per row. F=(X,WIN,INC) % %  F = ENFRAME(X,LEN) splits the vector X up into %  frames. Each frame is of length LEN and occupies %  one row of the output matrix. The last few frames of X %  will be ignored if its length is not divisible by LEN. %  It is an error if X is shorter than LEN. % %  F = ENFRAME(X,LEN,INC) has frames beginning at increments of INC %  The centre of frame I is X((I-1)*INC+(LEN+1)/2) for I=1,2,... %  The number of frames is fix((length(X)-LEN+INC)/INC) % %  F = ENFRAME(X,WINDOW) or ENFRAME(X,WINDOW,INC) multiplies %  each frame by WINDOW(:)  %     Copyright (C) Mike Brookes 1997 %      Version: $Id: enframe.m,v 1.3 2005/02/21 15:22:12 dmb Exp $ % %   VOICEBOX is a MATLAB toolbox for speech processing. %   Home page: http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.html % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %   This program is free software; you can redistribute it and/or modify %   it under the terms of the GNU General Public License as published by %   the Free Software Foundation; either version 2 of the License, or %   (at your option) any later version. % %   This program is distributed in the hope that it will be useful, %   but WITHOUT ANY WARRANTY; without even the implied warranty of %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the %   GNU General Public License for more details. % %   You can obtain a copy of the GNU General Public License from %   ftp://prep.ai.mit.edu/pub/gnu/COPYING-2.0 or by writing to %   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  nx=length(x); nwin=length(win); if (nwin == 1)    len = win; else    len = nwin; end if (nargin < 3)    inc = len; end nf = fix((nx-len+inc)/inc); f=zeros(nf,len); indf= inc*(0:(nf-1)).'; inds = (1:len); f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); if (nwin > 1)     w = win(:)';     f = f .* w(ones(nf,1),:); end   

3 仿真结果

4 参考文献

[1]董梅, 廖云霞, 刘海山,等. 基于Matlab的语音信号特征提取系统的设计[J]. 电脑知识与技术:学术版, 2018(7Z):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值