✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
自相关基音检测算法是语音信号处理的关键技术,算法的效率直接影响语音信号实时处理的质量。在对自相关基音检测算法基本原理进行分析的基础上,设计了Matlab算法实现方案,通过对一段具体语音时域信号采样值进行滤波、分帧、求短时自相关函数,得到了浊音语音的基音周期。
⛄ 代码
clc
clear all
close all
waveFile = 'qinghua.wav ';
[y, fs] =audioread(waveFile);
time=(1:length(y))/fs;
frameSize=floor(40*fs/1000); %帧长
startIndex=round(15000); %起始序号
endIndex=startIndex+frameSize-1; %结束序号
frame = y(startIndex:endIndex); %取出该帧
frameSize=length(frame);
frame2=frame.*hamming(length(frame)); % 加hamming窗
rwy = rceps(frame2); % 求倒谱
ylen=length(rwy);
cepstrum=rwy(1:ylen/2); %基音检测
LF=floor(fs/500); %设置基音搜索的范围
HF=floor(fs/70);
cn=cepstrum(LF:HF);
[mx_cep ind]=max(cn); %设置门限,找到峰值位置
if mx_cep > 0.08 & ind >LF
a= fs/(LF+ind);
else
a=0;
end
figure(1);
plot(time, y); title(waveFile); axis tight
ylim=get(gca, 'ylim');
line([time(startIndex), time(startIndex)], ylim, 'color', 'r');
line([time(endIndex), time(endIndex)], ylim, 'color', 'r');
title('语音波形');
figure(2);
subplot(2,1,1);
plot(frame);
title('取出帧的波形');
subplot(2,1,2);
plot(cepstrum);
title('倒谱图');
[x,sr]=audioread('qinghua.wav');
meen=mean(x);
x= x - meen;
updRate=floor(20*sr/1000); %每20ms更新
fRate=floor(40*sr/1000); %40ms一帧
n_samples=length(x);
nFrames=floor(n_samples/updRate)-1; %帧数
k=1;
pitch=zeros(1,nFrames);
f0=zeros(1,nFrames);
LF=floor(sr/500);
HF=floor(sr/70);
m=1;
avgF0=0;
for t=1:nFrames
yin=x(k:k+fRate-1);
cn1=rceps(yin);
cn=cn1(LF:HF);
[mx_cep ind]=max(cn);
if mx_cep > 0.08 & ind >LF
a= sr/(LF+ind);
else
a=0;
end
f0(t)=a;
if t>2 & nFrames>3 %中值滤波对基音轨迹图进行平滑
z=f0(t-2:t);
md=median(z);
pitch(t-2)=md;
if md > 0
avgF0=avgF0+md;
m=m+1;
end
else
if nFrames<=3
pitch(t)=a;
avgF0=avgF0+a;
m=m+1;
end
end
k=k+updRate;
end
figure(3)
subplot(211);
plot((1:length(x))/sr, x);
ylabel('幅度');
xlabel('时间');
subplot(212);
xt=1:nFrames;
xt=20*xt;
plot(xt,pitch)
xlim([0,3]);
axis([xt(1) xt(nFrames) 0 max(pitch)+50]);
ylabel('基音频率/HZ');
xlabel('时间');
⛄ 运行结果
⛄ 参考文献
[1] 郭武, 王仁华, 戴礼荣. 基于基音周期与清浊音信息的梅尔倒谱参数[J]. 数据采集与处理, 2007, 22(2):5.
[2] 宋建华, 朱勇, 徐军,等. 基于Matlab的一种基音周期检测算法[J]. 信息技术, 2009(1):5.
[3] 段继鹏, 李春泉, 熊殷. 基于MATLAB的语音信号基音周期检测的实现[J]. 中国科技博览, 2008(21):2.
⛳️ 代码获取关注我
❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料