声音信号基音提取算法基频和谐波处理分析

article/2025/10/13 6:44:11

1、内容简介


293-可以交流、咨询、答疑

2、内容说明

一、 实验原理:

傅里叶变换建立了信号频谱的概念。所谓傅里叶分析即分析信号的频谱(频率构成)、频带宽度等。要想合成出一段音乐,就要了解该段音乐的基波频率、谐波构成等。因此,必须采用傅里叶变换这一工具。对于连续时间信号,其傅里叶变换为:

由于其变换两边的函数 和都是连续函数, 不适合于计算机处理。 MATLAB语言提供了符号函数FOURIER来实现傅里叶变换,但该函数需要信号的解析表达式。而工程应用中经常需要对抽样数据进行傅里叶分析,这种情况下往往无法得到信号的解析表达式,必须采用傅里叶变换的数值计算方法。

如果的主要取值区间为,定义为区间长度。在该区间内抽样N个点,抽样间隔为:

则有:

可以计算出任意频点的傅里叶变换值,假设的主要取值区间位于,要计算其间均匀抽样的k个值,则有:

其中,为频域抽样间隔。

基音周期检测也称为基频检测(Pitch Detection),它的目标是找出和声带振动频率完全一致的基音周期变化轨迹曲线,或者是尽量相吻合的轨迹曲线。基音周期检测在语音信号的各个处理领域中,如语音分析与合成、有调语音的辨意、低速率语音压缩编码、说话人识别等都是至关重要的,它的准确性及实时性对系统起着非常关键的作用,影响着整个系统的性能。 

浊音信号的周期称为基音周期,它是声带振动频率的倒数,基音周期的估计称为基音检测。基音检测是语音处理中的一项重要技术之一,它在有调语音的辨意、低速率语音编码、说话人识别等方面起着非常关键的作用;但在实现过程中, 由于声门激励波形不是一个完全的周期脉冲串,而且声道的影响很难去除、基音周期的定位困难、背景噪声的强烈影响等一系列因素,基音检测面临着很大的困难。而自相关基因检测算法是一种基于语音时域分析理论的较好的算法。

语音信号s(n)序列的短时平均幅度差函数定义为:

其中,w(m)是窗函数,尺是信号的平均值,因为语音信号的浊音段具有周性,假设基音周期为p,则在浊音段,在k=p,2p,3p…将出现谷点,谷点间的距离即为基音周期。

与短时自相关函数一样,对周期性的浊音语音,也呈现与浊音语音周期相一致的周期特性,不过不同的是在周期的各个整数倍点上具有谷值特性而不是峰值特性,因而通过的计算同样可以确定基音周期。而对于清音信号,却没有这种周期特性。利用的这种特性,可以判定一段语音是浊音还是清音,并估计 出浊音语音的基音周期。由于计算函数只需要加、减和取绝对值运算, 运算量较之短时自相关函数大大下降。同时,函数在基音周期点的谷 值比自相关函数的峰值更加尖锐,因此错判率相对较小,稳健性更高。但是当语音信号的幅度快速变化时,函数的谷值深度会减小,从而影响基音估计的精度。

时频分析相关理论介绍:

短时傅立叶变换(窗口傅立叶变换)是用一个很窄的窗函数取出信号,对其求傅立叶变换,假定信号在这个时窗内是平稳的,得到该时窗内的频率,并过滤掉了窗函数以外的信号频谱,确定频率在特定的时间内是存在的,然后沿着信号移动窗函数,得到信号频率随时间的变化关系,这样就得到了时频分布。可知,短时傅立叶变换的定义为:这种变换是线性的,而且满足叠加原理。换言之,如果是几个信号分量的线性组合,那么各个信号分量的时频线性组合可以得到的时频表示:线性由于不会产生交叉项干扰,所以是区分多分量信号的希望的性质,而且小波变换也是线性时频变换。傅立叶变换可以分别从信号的时域和频域观察信号 ,但却不能把二者联合起来描述信号。因为信号的时域中不包含任何频域信息;而频域中不包含时域信息。同时短时傅立叶变换概念直接,算法简单,已经成为研究非平稳信号十分有力的工具,在信号瞬时频率的估计领域得到了广泛的应用,并且是其它时频分析的基础。但是它存在两个问题:对窗函数的长度选择与窗函数的选择问题。为了得到更好的频域效果,因为窗函数的长度与频谱图的频率分辨率密切相关,因此信号的观察时间必须比较长。当信号变化很快时,反应频率与时间变化的关系将会受到影响;然而,当窗函数很短时,对于特定的窗函数来说,将会得到更好的效果。对比其他方法来说,短时傅立叶变换(STFT)虽然有着分辨率不高等明显缺陷,但由于其算法简单,实现容易,所以在很长一段时间里成为非平稳信号分析标准和有力的工具,而且不会产生多信号交叉干扰项,同时我们采用短时傅里叶变换算法估计瞬时频率对于频率分集和频率编码脉冲信号来说会更加方便。

语谱图是一种在语音分析以及语音合成中具有重要实用价值的时频图,它可以反映语音信号动态频谱特性,被视为语音信号的可视语言。其中语音信号是由发音器官的物理运动过程而产生的一种典型的非平稳信号。研究语谱图的主要理论方法就是傅立叶分析和短时傅里叶分析以及快速傅里叶变换。语音信号可以假定在10~30ms这样的短时间段内是平稳的,那么就可以应用稳态分析的方法来处理该段非平稳的音频信号。语谱图可以用二维的图谱来表示,即横坐标表示时间,纵坐标表示频率,时间和频率所对应的像素点的值表示能量值的大小,这种能量的大小是通过颜色来表示的,颜色深,表示该点的语音能量越强。具体可以概括为:首先根据原始音频信号长度来进行适当分帧,接着使用窗函数进行加窗处理,对加窗以后达到的每一帧音频信号进行快速傅里叶变换,根据傅里叶变换的系数计算相应时间和相应频率点上的信号能量,再将该能量进行分贝表示并且归一化,最后再对以上得到的数据矩阵进行伪彩色映射得到语音信号的语谱图。根据需要,可以得到二维灰度显示的语谱图、二维彩色显示的语谱图或者三维显示的语谱图。该方法同样适用于声乐信号的分析和处理。

二、乐理知识介绍:

乐音的基本特征可以用基波频率、谐波频谱和包络波形3个方面来描述。 基波频率:每个指定音调的唱名都对应固定的基波信号频率。所谓唱名是指平日读乐谱唱出的1(do)、2(re)、3(mi)、… ,每个唱名并未固定基波频率。当指定乐曲的音调时才知道此时唱名对应的频率值。如C调“ 1”的基波频率为261.63HZ,F调“1”的基波频率为349.23HZ,F调“ 5”的基波频率为523.25HZ。 谐波频谱:在音乐领域中称谐波为“泛音”,由谐波产生的作用称为音色变化。当指定音调之后,仅指定了乐音信号的基波频率,谐波情况并未说明。各种乐器,如钢琴或单簧管,都可以发出某一音调下的唱名,而人的听觉会明显感觉两者不同,这是由于谐波成分有所区别,频谱结构各异。包络波形:不同类型的乐器,包络形状也不相同。在音乐合成实验中,为简化编程描述,通常把复杂的包络函数用少量直线近似。于是,乐音波形的包络呈拆线。有时为了保证在乐音的邻接处信号幅度为零,也可以用指数衰减的包络来表示,这也是最简单的办法。

三、本程序算法实现思路:

将wav文件导入后得到的是一个向量,它包含了这段音乐的所有信息,要自动分析这段音乐的音调就需要将每个音调对应的点进行傅里叶变换得到其幅值谱,在幅值谱上找到第一个幅值较大的极大值点,该点对应的就是该音调的基频,得到基频后就可以得到高次谐波的幅值。为了使对每个音调进行傅里叶变换后得到的幅值谱离散程度高,应该将每个音调的数据在时域上重复多次,由于这些点都是直接采集的为做处理的点,因此其重复次数应该足够大才能体现出较强周期性,本实验采用重复1000次,虽然重复次数越多越好,但是次数太大,程序运行的速度会大大降低。  这里边还有两个关键点:第一,在从幅值谱上找基频时,因为图上的极大值点很多,怎么能让程序自动确定出准确的基频。第二,在程序找到了基频之后,再由基频去获取高次谐波的幅值时需要有一定的容错能力,例如若基频为200Hz,幅值为1,那么对应的二次谐波的频率为400Hz,但是很可能恰好幅值谱上400Hz处的幅值为0.01,但是401Hz处的幅值为0.2,这时实际上的二次谐波应该为401Hz,但是若没有给基频一个容错范围,显然找到的二次谐波的幅值是不正确的。  针对以上提出的两个关键点,我找到了两条有针对性的解决办法。对于第一点,因为幅值谱上极大值点的幅值足够大才能将其定位基频,因此在分析了几个音调后发现基频处的幅值都在0.025以上,因此将基频处的限定条件改为幅值大于0.025的,但是在运行后发现,有几个音调没有分析出来,说明它们的基频幅值小于0.025,其实可以观察一下fmt.wav的波形就会发现,有几段的整体幅值很小,因此基频幅值小,于是又在加上限定条件,若所有点的幅值都小于0.02,那么再用0.015作为幅值的限定条件继续找,这样就将剩下的音调基频也确定出来了。对于上述的第二点,可以将确定出的基频的误差设为+-1Hz,例如程序确定的基频为200Hz,实际的基频应该在(200-1)到(200+1)之间,那么k次谐波对应的频率范围是k*(200-1)到k*(200+1),在这个区间中继续找幅值的极大值点就是k次谐波对应点。  根据以上思路,编写用于分析一个音调频率的函数,在取谐波幅值时,幅值小于基波幅值5%的谐波认为其幅值为0,最终谐波的幅值用归一化后的数据表示。

四、实验结果分析

以上上述介绍的原理和算法进行如下仿真:

图1所示为输入音乐信号的时域波形,图2所示为该音乐信号的频谱图,以及通过基音提取算法提取到的基频和谐波。

3、仿真分析

 

4、参考论文


http://chatgpt.dhexx.cn/article/06aMVZw8.shtml

相关文章

软件工程—需求分析阶段

第一步、需求获取 为了保证能全面地获取信息,以更好地服务于产品设计和迭代,产品经理必须利用内部外部等多种渠道来获取用户需求。并且因渠道差异,产品经理所采取的方式与方法也相应会有所差异,所以产品经理还必须根据不同的渠道…

作业1.1利用Audacity软件分析音频

文章目录 前言实验内容实验步骤实验结果结果分析总结 前言 Audacity软件分析其余格式的音频时需要安装FFmpeg库,所以我们下载一个格式转换软件将音频转为MP3格式进行处理。语音信号具有短时平稳性,即在一个短时间范围内(10-30ms)…

C++ OBS源码分析与屏幕录制软件开发视频教程

本课程主要讲解OBS源码的编译,OBS功能实现,初始化,显示器录制,窗口的实现录制,以及录制模块源码详细分析,最后基于OBS源码开发了一个录制软件,界面如下: 主要有如下功能 &#xff0…

酒店管理系统-需求分析报告

目录 1.引言 1.1编制的目的 1.2术语定义 1.3参考资料 1.4相关文档 2.概述 2.1项目的描述 2.2项目的功能 2.3用户特点 3.具体需求 3.1业务需求 3.1.1主要业务 3.1.2未来增长预测 3.2用户需求 3.3应用需求 3.3.1系统功能 3.3.2主要应用及使用方式 3.4网络基本结构…

基于matlab的声波分析研究,基于MATLAB的声音信号分析与处理(共13页)

设计了一套信号采集与处理系统,建立了傅立叶变换算法模型,可获得其频谱图进行频谱分析,建立滤波器的设计算法模型设计了一个声音滤波器,建立滤波算法模型可对声音信号进行滤波。本套系统的算法建立都是基于MATLAB软件,…

分析评估和定位声音质量

/** * author wangdaopo * email 3168270295qq.com */ 影响音频质量和稳定性的因素 音质好坏的评价,响度、音高、音色, 测试,你的语音引擎是基本可用的,客观评测软件是RMAA(RightMark Audio Analyzer;比…

声学计算机软件,常用声学仿真软件汇总

声学仿真软件根据计算原理不同大致分为以下几类: 一、电力声类比法 将振动系统和声学系统转化为等效电路,是一种0维的参数化建模方法; 优点:计算速度快; 缺点:无法预测高频响应以及复杂声波叠加&#xff1b…

荔枝软件如何测试声音,荔枝如何测自己的声音 荔枝测自己的声音方法

您可能感兴趣的话题: 荔枝 测自己的声音 核心提示:  荔枝APP有一个特色功能——声鉴卡,声鉴卡可以用来测试用户的音色,比如女神音、御姐音、少年音等等,很多人都想用声鉴卡测试一下自己的音色,却不知道荔枝…

电脑版频谱测试软件,电脑实时声音频谱PC Sound Spectrum

PC Sound Spectrum是完全免费提供给广大用户们使用的一个电脑声音实时频谱显示软件,可以将电脑声卡里所有的声音捕捉并转换为24段动态频谱显示,也可透明显示,拥有鼠标穿透效果,而且不用安装,没有插件,体积小…

软件产品案例分析

软件产品案例分析 第一部分: 评测: 上手体验: 说实话,在老师布置这个作业之前我确实不知道有K米这个APP,我想这是很少去KTV的原因吧。。。不过在接到这个作业后,我就去百度了普及了一下这个app的相关知识。…

基于AI的恶意软件分析技术(3)

一篇综述:用于检测和分类恶意软件的机器学习的兴起:研究的发展、趋势和挑战 阅读The rise of machine learning for detection and classification of malware: Research developments, trends and challenges翻译&笔记 原文:https://w…

吉林大学软件需求分析 Software Requirement Analysis

文章目录 吉林大学软件需求分析 Software Requirement Analysis缩写/术语Chapter 1 Introduction1 Software and Engineering1.1Software1.2软件工程1.3需求对软件项目的影响 2 Software Requirements2.1问题域2.2需求 3 Requirements Engineering3.1需求工程的历史3.2需求工程…

splunk 日志分析软件 简介

目录 Splunk总体介绍 简介 Splunk是什么 Splunk做什么 Splunk如何做 应用场景 日志管理 为机器数据建立索引 搜索、关联、调查 钻取分析 监控&告警 报表和仪表盘 IT运维监控 IT运维监控视图 丰富的App和插件 安全和欺诈 安全神经中心 安全挑战 高级…

需求分析-用户故事

需求分析 - 用户故事(User Story) 用户故事(一) 用户故事在软件开发过程中被作为描述需求的一种表达形式;为了规范用户故事的表达,便于沟通;包含角色、活动、价值三个要素。 用户故事的概念 概念这种东西我喜欢说文…

matlab实现声音信号的频谱分析,基于MATLAB的声音信号频谱分析的课程设计.doc

基于MATLAB的声音信号频谱分析的课程设计.doc 基于 MATLAB 的声音信号频谱分析组号11 组1 课程设计目的综合运用数学信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用 MATLAB 作为编程工具进行计算机实现,从而加…

数据压缩作业1之:使用音频分析软件(Audacity)分析浊音、清音爆破音的时域及频域特性。

录制的浊音为/d/,清音为/ʃ/,爆破音为/t/ 实验结果 浊音时域 浊音频域 清音时域 清音频域 爆破音时域 爆破音频域 分析 从实验结果可以看出: ①在时域上,相同的单位时间内,浊音的幅度变化范围最大,…

【声音可视化】语音学软件:praat

语音分析软件:praat praat是一款便捷好用,并且免费的语音分析软件。可以协助我们完成对声音的多维度可视化分析,这里总结一些经验给大家~ 官网 ohttps://www.fon.hum.uva.nl/praat/ 开发者 oPaul Boersma和David Weenink 功能 o语音分…

Linux安装JDK、Tomcat、部署Java项目

1.在windows安装远程工具 我们远程访问windows服务器可以使用windows自带的远程工具,但是远程访问Linux需要下载辅助工具,我使用的是XShell,网上下载即可。安装成功后,界面如下: 在主机栏输入对应服务器地址&#xf…

Linux安装jdk和maven

Linux安装jdk和maven 1. 安装jdk 从oracle官网下载Java1.8 将下载的tar包上传到Linux环境中,本人环境目录/usr/local/env解压tar -zxvf jdk-8u351-linux-x64.tar.gz配置jdk环境变量:sudo vim etc/profile export JAVA_HOME/usr/local/env/jdk1.8.0_351 export CLASSPATH$:…

linux安装jdk环境

linux安装jdk环境 一、jdk安装包下载 官网下载:https://www.oracle.com/java/technologies/downloads/ 二、解压文件并配置环境 1.解压 代码如下(示例): mv jdk-17.0.2/ /usr/local/jdk-172.配置环境变量 代码如下&#xff…