%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Content: T2&BIC(Zhou & Hansen)
%% Data: 2009.12.28
%% Author: Bill See(CQUPT)
%% Acknowledgment:<Efficient audio Stream Segmentation via the Combined
%% T2 Statistic and BIC>
%%
%% 改进的T2&BIC程序,将原有的程序添加了一个最大窗,超过这个最大窗的时候
%% 程序以滑动窗口运行,直到出现△BIC大于零的值。其中△BIC的值的计算仍与原程序
%% 相同,即调用BICone()函数;除此之外在Shift.m的基础之上,以2分钟为单位再进行
%% 二次窗口的划分,与SV_BIC的窗口相同。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tic
[y,fs,bits]=wavread('test1.wav'); %news3.wav
y=y(:,1); %仅提取单声道的音频
allLen = length(y); %音频的长度
allTime = allLen/fs; %音频的时间
%设定每一帧的长度,和帧的增幅
frameLen = 256;
frameMov = 128;
SV_BIC_SegT=0; %用来记录每个跳变点的时间
clipLen=floor(120*fs); %将整个语音以段的形式来处理
staClip=1; %设定段的起始点
numClip=0 %段的个数
k=1;
T2num=0;
labeta=1.05;
labetaAck=1;
wMin=101;
wMax=2100; %窗口 最大值
wShift=300; %
wGrow=100;
winbod=20;
wMar=43;
wLap=300;
wAck=400;
delta=25;% 多次试验证明25是理想的数值
deltaH=5;
pp=0;
newP=0;
while staClip+clipLen<=allLen+clipLen
if staClip+clipLen<=allLen
s = y(staClip:staClip+clipLen);
else
s = y(staClip:allLen);
end
numClip=numClip+1
mel=melcepst(s,fs,'m',12); %用来存储该段内的音频,(分帧以后)
En=shorten(s);% 求短时帧能量
z=zcr(s); %求短时过零率
melL=[mel,En,z];
% clear En z;
% mel2=deltamfcc(mel,11); %一阶差分MFCC
% mel2=dct(mel); %利用dct.m计算一阶差分MFCC
% mel=[mel,mel2];
% clear mel2;
mel=[mel,En];
[N,fd]=size(mel);
k=0;
wStart=1;
wDyn=wMin; %动态窗值,即窗口的末尾值
while wDyn<N
wSignal=mel(wStart:wDyn,:);
if wDyn>N
wDyn=N;
k=k+1;
end
tempinx=computT(wSignal,wStart,delta);
if tempinx<wDyn-winbod & tempinx>wStart+winbod
detBIC=computeBIC(wSignal,tempinx-wStart,labeta,fd);
else
detBIC=-1;
end
while wDyn<=wStart+wMax & detBIC<0 & wDyn<N & k<2
wDyn=wDyn+wGrow;
if wDyn>N
wDyn=N;
k=k+1;
end
wSignal=mel(wStart:wDyn,:);
tempinx=computT(wSignal,wStart,delta);
if tempinx<wDyn-winbod & tempinx>wStart+winbod
detBIC=computeBIC(wSignal,tempinx-wStart,labeta,fd);
else
detBIC=-1;
end
end
while wDyn>wStart+wMax & detBIC<0 & wDyn<N & k<2
wStart=wDyn-wShift;
wDyn=wStart+wMax/2;%floor(wMax/2);%floor(3*wMax/4);
if wDyn>N
wDyn=N;
k=k+1;
end
wSignal=mel(wStart:wDyn,:);
tempinx=computT(wSignal,wStart,delta);
if tempinx<wDyn-winbod & tempinx>wStart+winbod
detBIC=computeBIC(wSignal,tempinx-wStart,labeta,fd);
else
detBIC=-1;
end
pp=0;
if tempinx>wDyn-winbod
wDyn=wStart+wGrow;
pp=1;
end
end
if detBIC>0 & pp==0
tempinx2=ackT(mel,tempinx,wStart,wDyn,wAck,delta);
detBIC2=computeBIC(wSignal,tempinx2-wStart,labeta,fd);
if detBIC2>0
temp=(numClip-1)*(clipLen-wLap)/frameMov+tempinx2;
T2num=[T2num,temp];
wStart=tempinx2+wMar;
wDyn=wStart+wMin;
fnum=ceil((T2num(end-1)*128)/(clipLen-wLap));
lnum=ceil((T2num(end)*128)/(clipLen-wLap));
if fnum==lnum
newS=T2num(end-1)-(numClip-1)*(clipLen-wLap)/frameMov+86;
else
newS=86;
end
newE=T2num(end)-(numClip-1)*(clipLen-wLap)/frameMov-86;
newSignal=mel(newS:newE,:);
newP=[newP;LDA(newSignal,newS,newE,labetaAck,fd,deltaH)+(numClip-1)*(clipLen-wLap)/frameMov];
else
detBIC=-1;
wStart=tempinx-wMin+1;
wDyn=wStart+wMin;
end
end
end
staClip=staClip+clipLen-wLap;
end
T2num=T2num*128/fs;
T2num=T2num';
% for m=1:N plot(m,tt(m),'k');hold on; end
j=2;
m=length(T2num);
while j<=m
if T2num(j)-T2num(j-1)<3.2
T2num=[T2num(1:j-1);[];T2num(j+1:m)];
m=m-1;
else
j=j+1;
end
end
T2num
newP=newP*128/fs; clear mel;
fprintf('This is the total time of improved T2BIC :\n');
toc
matlab.rar_LPCC的matlab实现_SVM 语音_mfcc svm c++_语音识别 svm_语音识别SVM
版权申诉
5星 · 超过95%的资源 113 浏览量
2022-07-13
19:17:12
上传
评论 1
收藏 1.7MB RAR 举报
周楷雯
- 粉丝: 78
- 资源: 1万+
最新资源
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
- Apache Flink 未授权访问+远程代码执行.pdf
- hadoop-基于hive的聊天数据分析报表可视化案例数据源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈