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

基音周期提取结果



图1 基音提取结果

算法说明

线性相关系数

  1. 也称“皮尔逊积矩相关系数”(Pearson product-moment correlation coefficient
  2. 通常用γ或ρ表示,是用来度量两个变量之间的相互关系(线性相关),取值范围在[-1,+1]之间。
  3. γ>0为正相关,γ<0为负相关,γ=0表示不相关。γ的绝对值越大,相关程度越高。
  4. r=1时为完全正相关;如两者呈负相关则r为负值,而r=-1时为完全负相关。
  5. 通常|r|大于0.75时,认为两个变量有很强的线性相关性。



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

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

Matlab应用编程

  1. Matlab中可用corrcoef(x,y)函数计算相关系数。
  1. %inx: 输入的语音采样数据
  2. %Pos: 查找Pos点处的基音周期
  3. %minpth: 基音周期最小值对应的采样点数
  4. %maxpth: 基音周期最大值对应的采样点数
  5. %plotfig: 1时绘制计算过程曲线图
  6. %
  7. %out: 以不同样点数作为期音周期的相似系数,其最大值点就对应基音周期
  8. function [out] = findPitchCorrcoef(inx,Pos,minpth,maxpth,plotfig)
  9. [line,row] = size(inx);
  10. out = 0;
  11. if(line<Pos+ceil(maxpth))
  12. return;
  13. end
  14. if(Pos<ceil(maxpth))
  15. return;
  16. end
  17. out=zeros(ceil(maxpth),1);
  18. for i=floor(minpth):ceil(maxpth)
  19. xa = inx(Pos-i:Pos); %以i为帧长,Pos点为分界,取其前后两帧数据
  20. xb = inx(Pos+1:Pos+1+i);
  21. if(max(abs(xa))<0.05) %为减小计算量,幅度小于0.05时认为是噪音,不作计算
  22. continue;
  23. end
  24. if(max(abs(xb))<0.05)
  25. continue;
  26. end
  27. corrcoefxab = corrcoef(xa,xb);
  28. out(i)=corrcoefxab(2,1);
  29. end
  30. if(plotfig == 1) %绘计算过程曲线
  31. figure;
  32. subplot(2,1,1);
  33. plot(inx,'.-');
  34. grid on;
  35. subplot(2,1,2);
  36. plot(out,'*-');
  37. grid on;
  38. end



图3 基音计算过程曲线

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

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

  1. 3右侧对50Hz的工频噪音作基音提取,帧长158点对应50.6Hz也非常准确。
  2. 改变findPitchCorrcoef函数的Pos参数并取输出最大值对应的帧长,即可计算语音数据在各点处的基音周期。如图1

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

  1. 小梅哥FPGA数字逻辑设计教程——基于线性序列机的TLC5620型DAC驱动设计

    基于线性序列机的TLC5620型DAC驱动设计 目录 TLC5620型DAC芯片概述:    2 TLC5620型DAC芯片引脚说明:    2 TLC5620型DAC芯片详细介绍:    3 TLC ...

  2. pandas通过皮尔逊积矩线性相关系数(Pearson's r)计算数据相关性

    皮尔逊积矩线性相关系数(Pearson's r)用于计算两组数组之间是否有线性关联,举个例子: a = pd.Series([1,2,3,4,5,6,7,8,9,10]) b = pd.Series( ...

  3. 【线性表基础】基于线性表的简单算法【Java版】

    本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeR ...

  4. Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现

    转自:http://blog.csdn.net/wsywl/article/details/5859751 Spearman Rank(斯皮尔曼等级)相关系数 1.简介 在统计学中,斯皮尔曼等级相关系 ...

  5. 用mplayer从视频中按周期提取帧

    使用方法:extract file time step folder time 设置时间长度 step 设置周期 均以秒(s)为单位 贡献:1. 从视频文件中周期性提取图片:2. Windows下批处 ...

  6. Pearson(皮尔逊)相关系数及MATLAB实现

    转自:http://blog.csdn.net/wsywl/article/details/5727327 由于使用的统计相关系数比较频繁,所以这里就利用几篇文章简单介绍一下这些系数. 相关系数:考察 ...

  7. 7-4线性分组码的matlab程序

    补充一点,关于生成矩阵G和校验矩阵H的关系:生成矩阵G是4*7矩阵,分为两块,前4列组成的4*4矩阵为单位矩阵,后3列组成的4*3矩阵我称它监督矩阵,校验矩阵是3*7矩阵,前4列组成的3*4矩阵是监督 ...

  8. 基于TCP/IP的Matlab Modbus与M340 PLC通讯

    本人原创,代码拿出来供大家交流学习经验,勿作他用. 废话不多说,代码直接上. 1.创建链接 function link = connect_create(client_addr,port) %**** ...

  9. WebRTC中的NetEQ

    NetEQ使得WebRTC语音引擎能够快速且高解析度地适应不断变化的网络环境,确保了音质优美且缓冲延迟最小,其集成了自适应抖动控制以及丢包隐藏算法. WebRTC和NetEQ概述 WebRTC Web ...

随机推荐

  1. 位段(bitfield)

    struct { unsigned int fieldA        :       4 ; unsigned int fieldB        :       2 ; unsigned int ...

  2. c++ 中string用c输入输出

    对于string自带的函数 c_str()返回的const char*类型,对于scanf函数不能使用,可以通过如下方法使用 string s; scanf("%s",&* ...

  3. Rust的几个预测

    写程序多年,语言也用过不下十种,对于Rust有种亲人的感觉,就像在梦中见到过似的.现在对于Rust特做出以下一些预测,希望Rust会有更大的影响力. 1. 当前的Rust的核心功能现以比较稳定,可以用 ...

  4. 关于c#的事件如何使用

    c#的委托delegate事件的详细使用 一.无参数,无返回的委托事件 委托事件类.事件的发生源.1.声明委托  2定义事件 3具体方法 public class Test { // …. publi ...

  5. div显示提示信息

    div显示提示信息 <body> <style type="text/css"> a.link{position:relative;} a.link div ...

  6. (转) PowerDesigner逆向工程导入MYSQL数据库总结

    PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYS ...

  7. Git相关知识

    一些有用的链接: https://www.git-scm.com/ http://nvie.com/posts/a-successful-git-branching-model/ Git开发模式: 建 ...

  8. js自定义对象

    一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascrip ...

  9. clob型不能用 distinct,以及转换clob类型方法

    举例clob型不能用 distinct public List<WorkingPaper> findAssignedWorkPapers(String projectId, String ...

  10. 构造 & 析构 & 匿名对象‍

    ‍以前仅知道创建对象,但对匿名对象的了解基本为0. 通过阅读google chromium源代码 中关于 log 的使用,查阅相关资料,了解了一下匿名对象,予以记录. 什么是匿名对象‍ 匿名对象可以理 ...