• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

基音周期提取2-基于线性相关系数的Matlab实现 - hedgehogli

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

基音周期提取2-基于线性相关系数的Matlab实现

基音周期提取2-基于线性相关系数的Matlab实现

基音周期提取结果


图1 基音提取结果

算法说明

线性相关系数

也称“皮尔逊积矩相关系数”(Pearson product-moment correlation coefficient)

通常用γ或ρ表示,是用来度量两个变量之间的相互关系(线性相关),取值范围在[-1,+1]之间。

γ>0为正相关,γ<0为负相关,γ=0表示不相关。γ的绝对值越大,相关程度越高。

r=1时为完全正相关;如两者呈负相关则r为负值,而r=-1时为完全负相关。
通常|r|大于0.75时,认为两个变量有很强的线性相关性。


图2 线性相关系数计算公式

式中x,y为两个向量,这里理解为两帧语音的采样序列。当x,y为相邻的两帧数据,且帧长等于基音周期时,其相关系数为最大值(最接近1)。

Matlab应用编程

Matlab中可用corrcoef(x,y)函数计算相关系数。
%inx:     输入的语音采样数据
%Pos:     查找Pos点处的基音周期
%minpth:  基音周期最小值对应的采样点数
%maxpth:  基音周期最大值对应的采样点数
%plotfig: 为1时绘制计算过程曲线图
%
%out:       以不同样点数作为期音周期的相似系数,其最大值点就对应基音周期
function [out] = findPitchCorrcoef(inx,Pos,minpth,maxpth,plotfig)
[line,row] = size(inx);
out = 0;
if(line<Pos+ceil(maxpth))
    return;
end
if(Pos<ceil(maxpth))
    return;
end
out=zeros(ceil(maxpth),1);
for i=floor(minpth):ceil(maxpth)
    xa = inx(Pos-i:Pos);        %以i为帧长,Pos点为分界,取其前后两帧数据
    xb = inx(Pos+1:Pos+1+i);
    if(max(abs(xa))<0.05)       %为减小计算量,幅度小于0.05时认为是噪音,不作计算
        continue;
    end
    if(max(abs(xb))<0.05)
        continue;
    end
    corrcoefxab = corrcoef(xa,xb);
    out(i)=corrcoefxab(2,1);
end


if(plotfig == 1)				%绘计算过程曲线
    figure;
    subplot(2,1,1);
    plot(inx,\'.-\');
    grid on;
    subplot(2,1,2);
    plot(out,\'*-\');
    grid on;    
end


图3 基音计算过程曲线

由图3可以看出,在帧长为42点时(8K采样,对应190.5Hz),相邻两帧语音具有最大相似系数0.9359。而且帧长41点和43点时对应的相似系数小于0.7,对比可知:

基于线性相关系数的基音周期计算,具有优秀的分辨能力

图3右侧对50Hz的工频噪音作基音提取,帧长158点对应50.6Hz也非常准确。

改变findPitchCorrcoef函数的Pos参数并取输出最大值对应的帧长,即可计算语音数据在各点处的基音周期。如图1。

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi内嵌汇编语言BASM精要(转帖)发布时间:2022-07-18
下一篇:
Delphi7.0常用函数速查手册发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap