赞
踩
代码其实很简单,但是写代码之前要了解基础知识,比如特征提取的短时能量的公式等。
还要了解一些参数,分帧时,帧数、帧移、帧长等
用到的matlab函数有俩,一个是hanming();一个是enframe,enframe函数需要在matlab路径中加到toolbox使用,这个直接搜就有很详细的教程。
下面是代码的实现,下面的代码中,每一行代表的准确意思我都有标注。
- %新代码 分帧+加窗
- clear all;
- clc;
- [A,fs]=audioread('高通滤波处理后.wav'); %A为列向量,是数字化的音频信号,读出的数据,fs是音频文件的采样频率
- info=audioinfo('高通滤波处理后.wav') %采样频率65536,总的采样点数897024
- N=length(A);%采样长度,即A的长为N; N=采集时长t*采样频率fs
- %sound(A,fs) %播放音频文件
- time=(0:N-1)/fs;%T=N/fs
- plot(time,A)
-
-
- n=1024; %窗宽, 帧长
- nx=(2*N/n)-1;% 帧数 nx=(N-n+0.5*n)/(n*0.5)
- h=hamming(n);%汉明窗
- y=enframe(A,h,512);%帧长1200(1024),帧移600(512),重叠50% 分帧为1012*1200
-
-
- %短时能量
- su=0;
- for i=1:nx
- en(i)=y(i,:)*y(i,:).';
- su=su+en(i);
- end
- %短时平均幅度
- dpf=0; %dp代表短时平均幅度
- for i=1:nx
- mn(i)=sum(abs(y(i,:)));
- pmn(i)=mn(i)/n;
- % dpf(i)=dpf(i)+mn(i);
- end
- %短时平均过零率
- zn1=0;
- for i=1:nx
- zn=0;
- for j=1:1023
- za=y(i,j);
- zb=y(i,j+1);
- if (za*zb)<0
- zn=zn+1;
- end
- end
- % zn1=zn1+zn;
- z(i)=zn;
- end
- %zn2=zn1/nx;
- %短时零能比
- for i=1:nx
- zen(i)=z(i)/en(i);
- end
-
- save E:\TZTQ\en.txt en -ascii
- save E:\TZTQ\pmn.txt pmn -ascii
- save E:\TZTQ\z.txt z -ascii
- save E:\TZTQ\zen.txt zen -ascii
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。