资源简介

该程序实现了对一段语音信号的分帧,预加重,并求了短时能量,过零率

资源截图

代码片段和文件信息

% 对一个语音信号进行分帧,并研究分帧后的短时能量和过零率特性
%读音频文件
clc;
clear all;
[filenamepathname]=uigetfile(‘*.wav‘‘请选择语音文件:‘);
[soundfs]=wavread([pathnamefilename]);                 %sound里面放的是采样的数值。fs是采样频率;
a=size(sound(:2));

Tn=(a(1)-1)/fs;                                          %Tn是总采样时间;

t=0:1/fs:Tn;                                             %t是用来追踪每次的采样的时间;

figure(1)
subplot(411)plot(tsound(:2))xlabel(‘t(s)‘)ylabel(‘sound‘)

%预加重处理
k=0.97;
tmp(1)=sound(12);
for i=2:a
    tmp(i)=sound(i2)-k*sound(i-12);
end
for i=1:a
    sound(i2)=tmp(i);
end

%分帧
N=fs*20*10.^(-3);                                        %分帧的点数(窗函数的点数);

frame_shift=N/1.5                                        %frame_shift是帧移;

frame_array=enframe(sound(:2)hamming(N)frame_shift);
subplot(412)plot(frame_array)xlabel(‘帧‘)ylabel(‘分帧加窗后矩阵‘)

%求短时能量
n=size(frame_array);
for i=1:n(1)
    frame_energy(i)=frame_array(i:)*frame_array(i:)‘;
end
subplot(413)plot(frame_energy)xlabel(‘帧‘)ylabel(‘短时能量‘)

%求过零率
a=sign(frame_array);
b=zeros(1n(1));
c=[b‘ a];
d=[a b‘];
zeropass_density=d-c;
zeropass_density=(0.5*sum(abs(zeropass_density)2))/(n(2)-1);
%zeropass_density=0.5*sum(abs(zeropass_density)2);
subplot(414)plot(zeropass_density)xlabel(‘帧‘)ylabel(‘过零率‘)


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     162564  2007-11-30 14:58  语音分帧,短时能量,过零率\FJ1.wav

     文件       1377  2010-11-04 11:02  语音分帧,短时能量,过零率\frame_win.m

     文件      65846  2010-10-29 14:26  语音分帧,短时能量,过零率\silent2.wav

     文件      78896  2010-11-02 14:13  语音分帧,短时能量,过零率\FJ1改.wav

     文件       1262  2010-11-04 10:53  语音分帧,短时能量,过零率\frame_win.asv

     目录          0  2008-08-25 21:50  语音分帧,短时能量,过零率

----------- ---------  ---------- -----  ----

               309945                    6


评论

共有 条评论