基于MATLAB的语音的短时平均能量分析

  • 题目要求
    编程实现一句话语音的短时能量曲线,并比较窗长、窗口形状(以矩形窗和哈明窗为例)对短时平均能量的影响。
  • 常见问题
    1.未定义与 ‘double’ 类型的输入参数相对应的函数 ‘enframe’
    解决办法:下载MATLAB voicebox工具包
function frameTime=frame2time(frameNum,framelen,inc,fs)
% ================= 计算分帧后每一帧对应的时间=====================
% ================= 输     入 ===================================
%frameNum          :  总帧数
%framelen          : 帧长
%inc               :  帧移
%fs                : 采样频率
%================== 输     出 ====================================
%frametime         : 每帧的时间,即取这一帧数据中间位置的时间
frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;

2.未定义与 ‘double’ 类型的输入参数相对应的函数 ‘frame2time’
可在MATLAB toolbox\voicebox文件夹中添加frame2time.m文件

function frameTime=frame2time(frameNum,framelen,inc,fs)
% ================= 计算分帧后每一帧对应的时间=====================
% ================= 输      入 ==================================
%frameNum       :  总帧数
%framelen       :  帧长
%inc            :  帧移
%fs             : 采样频率%
================== 输      出 ====================================
%frametime      : 每帧的时间,即取这一帧数据中间位置的时间
frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;

检验工具包是否安装成功:

>> addpath(genpath('D:\MATLAB R2014a\toolbox\voicebox\voicebox'))
>> savepath
>> which activlev.m

如果结果为D:\MATLAB R2014a\toolbox\voicebox\voicebox\activlev.m即表示输出成功。

  • 源代码
clear
[x,Fs]=wavread('E:\szyy.wav');       % 读入数据文件
x=x(:,1);                 % 双声道变单声道
wlen=200; inc=80;          % 给出帧长和帧移
win=hanning(wlen);         % 给出海宁窗
N=length(x);               % 信号长度
X=enframe(x,win,inc)';     % 分帧
fn=size(X,2);              % 求出帧数
time=(0:N-1)/Fs;           % 计算出信号的时间刻度
for i=1 : fn
    u=X(:,i);              % 取出一帧
    u2=u.*u;               % 求出能量
    En(i)=sum(u2);         % 对一帧累加求和
end
subplot 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)']);

矩形窗(窗长200帧)短时平均能量图如下:
基于MATLAB的语音的短时平均能量分析
矩形窗 窗长150帧
基于MATLAB的语音的短时平均能量分析
矩形窗 窗长100帧
基于MATLAB的语音的短时平均能量分析
矩形窗 窗长50帧
基于MATLAB的语音的短时平均能量分析

哈明窗 窗长1000帧
基于MATLAB的语音的短时平均能量分析
哈明窗 窗长200帧
基于MATLAB的语音的短时平均能量分析
哈明窗 窗长150帧
基于MATLAB的语音的短时平均能量分析
哈明窗 窗长100帧
基于MATLAB的语音的短时平均能量分析
哈明窗 窗长50帧
基于MATLAB的语音的短时平均能量分析