1、流程
图1 流程图
2、MATLAB实现
(1)主程序
clear all
clc
[x0,Fs]=audioread('1234567890.wav');
%sound(x0,Fs);
N=length(x0); %采样点
k=(0:N-1);
f=(k/N-1/2)*Fs;
X0=fft(x0);
figure
subplot(2,1,1),plot(x0)
title('原始按键音(时域)'),xlabel('t'),ylabel('振幅')
subplot(2,1,2),plot(f,abs(fftshift(X0)));xlim([0,4000])
title('原始按键音(频域)'),xlabel('f/Hz'),ylabel('幅度')
% -----------------------------------------带通滤波
Hd=band_pass; %带通滤波器
x1=filter(Hd,x0); %滤波
%sound(x1,Fs)
X1=fft(x1);
figure
subplot(2,1,1),plot(x1)
title('滤波后的按键音(时域)'),xlabel('t'),ylabel('振幅')
subplot(2,1,2),plot(f,abs(fftshift(X1))),xlim([0,2000])
title('滤波后的按键音(频域)'),xlabel('f/Hz'),ylabel('幅度')
% -------------------------------------------过零率与短时能量
len=2000; %帧长
d=50; %帧重叠样点长
s=fra(len,len-d,x1); %分帧,s为帧数
es=s.^2; %一帧内各样点能量
energy=sum(es,2); %一帧的能量,行求和
zcr=zcro(s); %求过零率
figure
subplot(3,1,1),plot(x1)
title('按键音1234567890'),ylabel('幅度')
subplot(3,1,2),plot(energy)
title('短时能量'),xlabel('帧编号'),ylabel('E')
subplot(3,1,3),plot(zcr)
title('信号过零率'),xlabel('帧编号'),ylabel('过零次数')
%-------------------------------------------端点检测
flag=energy; %有效信号标志
Ethresh=0.02; %短时能量阈值
flag(find(en