您当前的位置: 首页 >  matlab

川川菜鸟

暂无认证

  • 1浏览

    0关注

    969博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

matlab 清浊音判断+源代码

川川菜鸟 发布时间:2021-10-28 01:17:09 ,浏览量:1

%对语音信号采样分帧
clear
clc
X= audioread('mei.wav');
%对信号进行预加重
x=X;
x4=filter([1,-0.9375],1,x);
figure(1)
subplot(2,1,1),plot(x)
title('原始语音信号');
xlabel('样本序列n');
ylabel('幅值');
subplot(2,1,2),plot(x4)
title('原始语音信号的预加重');
xlabel('样本序列n');
ylabel('幅值');


% 幅度归一化到[-1,1]
x=double(x);
x=x/max(abs(x));
% 常数设置
FrameLen=240; % 帧长取30ms,8kHz的采样率
FrameInc=80; % 帧移取10ms,1/3
amp1=3;
amp2=2;
zcr1=10;
zcr2=5;
maxsilence=3; % 3*10ms=30ms
minlen=15; % 15*10ms=150ms
status=0;
count=0;
silence=0;

% 短时过零率(矢量法)
tmp1=enframe(x(1:length(x)-1),FrameLen,FrameInc);
tmp2=enframe(x(2:length(x)),FrameLen,FrameInc);
signs=(tmp1.*tmp2) 0.02;
zcr=sum(signs.*diffs,2);
figure(2)
subplot(2,1,1)
plot(zcr);
title('短时过零率');
ylabel('zcr')

%计算短时能量
amp=sum(abs(enframe(filter([1-0.9375],1,x),FrameLen,FrameInc)),2);
inz=find(amp>1);
amm=amp(inz);
ll=min(amm);
figure(2)
subplot(2,1,2)
plot(amp);
title('短时能量');
ylabel('amp')

%调整能量门限
amp1=ll+(max(amp)-ll)/8;
amp2=ll+(max(amp)-ll)/16;
%开始端点检测
x1=0;
x2=0;
for n=1:length(zcr)
goto = 0;
switch status
case{0,1} % 0=静音,1=可能开始
if amp(n) > amp1 % 确信进入语音段
x1=max(n-count-1,1);
status=2;
silence=0;
count=count+1;
elseif amp(n) >amp2 | zcr(n) > zcr2 % 可能处于语音段
status=1;
count=count+1;
else % 静音状态
status=0;
count=0;
end
case 2, % 2=语音段
if amp(n) > amp2 | zcr(n) > zcr2 % 保持在语音段
count=count+1;
else
silence=silence+1;
if silence             
关注
打赏
1665165634
查看更多评论
0.1334s