【语音分析】基于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 ]);
三、运行结果
四、备注
版本:2014a
标签:10,559,幅值,源码,语音,ylabel,短时,时域 来源: https://blog.51cto.com/u_15287606/2975927