语音处理-自相关-端点

基于自相关法的端点检测原理

个人理解
噪声信号和含噪语音的自相关函数存在极大的差异。

根据噪声的情况,设置两个阈值T1和T2,当相关函数最大值大于T2时,便判定是语音;当相关函数最大值大于或小于T1时,则判定为语音信号的端点

[外链图片转存失败(img-MTIOIHQ7-1564545326184)(assets/对比-端点-自相关.jpg)]

黑色根据静音时长。

蓝色根据幅度来计算。

%自相关端点检测
clear all; clc; close all;

filedir=[];                             % 指定文件路径
filename='D:\matlab\MATLAB\程序\program\speech_signal\bluesky1.wav';   %制定文件名                % 指定文件名
fle=[filedir filename] ;                 % 构成路径和文件名的字符串
[x,fs]=wavread(fle);                    % 读入数据文件
x=x/max(abs(x));                        % 幅度归一化
N=length(x);                            % 取信号长度
time=(0:N-1)/fs;                        % 计算时间

wlen=200;%帧长
inc=100;%帧移
win=hamming(wlen);%海明窗
N=length(x);%信号长度
time=(0:N-1)/fs;%计算出信号的时间刻度

X=enframe(x,win,inc)'; %分帧,一列是一帧
fn=size(X,2);%帧数
frameTime=frame2time(fn,wlen,inc,fs);  %求出每帧对应的时间

%短时自相关
for k=2:fn
    y=X(:,k);%每一帧数据
    ru=xcorr(y);
    R(k)=max(ru);
end
R=R/max(R);%归一化

r=[];%存储开始语音界限的位置
i1=1;
while (i1<length(R))
    for i1=i1:1:length(R)
        e=R(i1);
        if e>0.03
            r=[r i1-1];
            i1=i1+1;
            for i2=i1:length(R)
                e=R(i2);
                if e<0.0001
                    r=[r i2+1];
                    i1=i2+1;
                    break
                end               
            end
            break
        end
    end
end

%-短时自相关
plot(time,x)
title('男声“蓝天,白云,碧绿的大海”的端点检测');
ylabel('幅值'); xlabel(['时间/s' 10 '(a)']);
   for tq=1:length(r)
      line([frameTime(r(tq)) frameTime(r(tq))],[-1 1],'color','k','LineStyle','-');
      hold on
   end

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用户已经注册过

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值