【语音分析】基于matlab语音短时时域分析【含Matlab源码 559期】

一、简介

语音信号的时域分析就是分析和提取语音信号的时域参数。进行语音分析时,最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。这种分析方法的特点是:①表示语音信号比较直观、物理意义明确。②实现起来比较简单、运算量少。③可以得到语音的一些重要的参数。④只使用示波器等通用设备,使用较为简单等。

二、源代码

clear all; clc; close all;

[x,Fs]=audioread('clean_signal.wav');       % 读入数据文件

wlen=200; inc=100;          % 给出帧长和帧移
win=hanning(wlen);          % 给出海宁窗
N=length(x);                    % 信号长度
time=(0:N-1)/Fs;                % 计算出信号的时间刻度
En=STEn(x,win,inc);             %短时能量
Mn=STMn(x,win,inc);             %短时平均幅度
Zcr=STZcr(x,win,inc);              %短时过零率
%此处和上述3个参数不同,返回的不是向量而是矩阵,因为一帧信号得到的不是一个数值
X=enframe(x,win,inc)';     % 分帧
xn=X(:);
Ac=STAc(X);                         %计算短时自相关
Ac=Ac(:);
Amdf=STAmdf(X);             %计算短时幅度差
Amdf=Amdf(:);

fn=length(En);             % 求出帧数

figure(1)
subplot 211; plot(time,x); axis tight% 画出时间波形 
title('(a)语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 ]); 
frameTime=FrameTimeC(fn,wlen,inc,Fs);   % 求出每帧对应的时间
ylabel('幅值'); xlabel(['时间/s' 10 ]);  
subplot 212; plot(frameTime,En)     % 画出短时能量图
title('(b)短时能量');
 ylabel('幅值'); xlabel(['时间/s' 10 '(b)']);

 figure(2)
subplot 211; plot(time,x); axis tight% 画出时间波形 
title('(a)语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 ]); 
subplot 212; plot(frameTime,Zcr)     % 画出短时过零率图
title('(b)短时过零率');
ylabel('幅值'); xlabel(['时间/s' 10 ]);  

% figure(3)
% subplot 211; plot(xn); % 画出时间波形 
% title('(a)语音波形');
% ylabel('幅值'); xlabel(['点数' 10 ]); 
% subplot 212; plot(Ac,'b')                    % 画出短时自相关图
% title('(b)短时自相关');
% ylabel('幅值'); xlabel(['点数' 10 ]);  

三、运行结果

【语音分析】基于matlab语音短时时域分析【含Matlab源码 559期】

四、备注

版本:2014a

上一篇:559,动态规划解不相交的线


下一篇:【559】R学习笔记