语音处理-自相关-端点

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

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

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

语音处理-自相关-端点_第1张图片

黑色根据静音时长。

蓝色根据幅度来计算。

%自相关端点检测
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 (i10.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

你可能感兴趣的:(MATLAB,自相关端点,matlab)