MatlabCode

本站所有资源均为高质量资源,各种姿势下载。

您现在的位置是:MatlabCode > 资源下载 > 一般算法 > 基于自相关法的语音性别识别与基频算法对比系统

基于自相关法的语音性别识别与基频算法对比系统

资 源 简 介

本项目致力于构建一个基于MATLAB的语音信号分析系统,专门用于通过基频特征来识别说话人的性别。核心流程包括对原始语音信号进行预处理(如分帧、加窗),随后采用自相关函数法(Autocorrelation Method)精准提取语音信号的基音周期(Pitch Period),进而计算出基频。根据男女声基频的典型分布区间(男性通常较低,女性通常较高)设定判决门限,实现性别的自动分类。为了验证算法的优越性,项目还同步实现了另外两种基频提取与判别技术:带通滤波器幅度筛选法以及幅度作差提取基频判别法。系统将这三种方法在相同的测试集上进行运行,并输出各自的判别结果与准确率统计。经过实验验证,基于自相关法的判别模块表现稳定,最终的识别正确率接近90%,优于其他两种对比方法,适合用于语音特征分析与简单的生物特征识别教学与研究。

详 情 说 明

基于自相关法的男女声自动判别与算法对比系统

项目介绍

本项目是一个基于 MATLAB 开发的语音信号分析系统,旨在通过基频特征提取技术实现说话人性别(男/女)的自动识别。系统核心采用自相关函数法 (ACF) 提取基音周期,同时集成了带通滤波器能量筛选法幅度作差法 (AMDF) 作为对比参照。

该代码 (main.m) 设计为全功能独立脚本,内置了语音数据模拟生成模块,无需外部音频文件即可直接运行。程序能够自动生成男女声模拟信号,遍历三种算法进行处理,最终输出判别准确率并绘制详细的对比分析图表。

功能特性

  • 内置测试数据生成:程序自动生成由基波与高次谐波叠加而成的模拟语音信号,包含5个男声样本(基频约100Hz)和5个女声样本(基频约220Hz),并添加随机噪声以模拟真实环境。
  • 多算法对比:在同一测试集上并行运行三种不同的判别算法,直观对比不同方法的性能差异。
  • 信号预处理:包含预加重处理,用于提升高频分量,使信号特征更明显。
  • 基频提取与平滑:实现了基于帧处理的基频提取,并引入中值滤波(Median Filtering)对基频轨迹进行平滑处理,去除野点。
  • 可视化分析:提供四合一的综合图表,展示时域波形、频谱图、基频提取轨迹以及算法准确率对比。

系统要求

  • MATLAB R2016a 或更高版本
  • Signal Processing Toolbox(信号处理工具箱,用于 butter 滤波器设计等函数)

使用方法

  1. main.m 文件保存至 MATLAB 的工作路径中。
  2. 直接运行 main 函数。
  3. 系统将自动在命令行窗口输出处理进度、单样本判别结果表以及最终的准确率统计。
  4. 运行结束后,会弹出一个图形窗口展示第6个样本(女声示例)的详细分析图表。

详细功能与算法实现分析

本项目的核心逻辑完全包含在 main.m 文件中,以下是代码的详细实现流程:

1. 系统参数与数据生成

程序首先设定采样率为 8000Hz,帧长为 256 点(约32ms),重叠长度为 128 点。 为了保证代码的可移植性,程序通过循环生成了10个模拟样本:
  • 男声模拟:设定基频 $f_0$ 在 100Hz 附近波动。
  • 女声模拟:设定基频 $f_0$ 在 220Hz 附近波动。
信号构造采用正弦波叠加(基波 + 5次谐波)的方式模拟声带振动,并加入了少量随机噪声,最后进行归一化处理。

2. 核心处理流程(主循环)

程序对每一个生成的样本依次执行以下操作:
  • 预加重:通过系数为 [1, -0.9375] 的滤波器对原始信号进行预处理,以此来补偿语音信号高频部分的衰减。
  • 算法调用:分别调用 ACF、BP、AMDF 三种核心算法函数进行处理。
  • 结果记录与输出:实时打印每个样本的真实标签、三种算法的预测标签以及计算出的平均基频值。

3. 实现的算法细节

#### A. 自相关函数法 (ACF) - method_autocorrelation 这是本系统的核心算法。

  • 分帧与加窗:使用 Hamming 窗对信号进行分帧。
  • 中心削波 (Center Clipping):为了抑制共振峰对基音检测的干扰,代码实现了中心削波技术,将幅度低于最大值 30% 的部分置零,其余部分做相应平移。
  • 自相关计算:使用 xcorr 计算互相关,并在对应 60Hz-400Hz 的滞后(Lag)范围内寻找峰值。
  • 基频计算:根据最大峰值的位置计算基音周期,若峰值相关性过低(<0.3)则标记为静音/清音帧。
#### B. 带通滤波器能量筛选法 - method_bandpass_energy 这是一种基于频带能量分布的快速判别法,不依赖具体的基频数值。
  • 滤波器设计:运用 butter 函数设计了两个2阶带通滤波器。
* 男声频段:60Hz - 160Hz * 女声频段:180Hz - 350Hz
  • 能量比对:计算信号分别通过两个滤波器后的均方根(RMS)能量,能量较大的一方即判定为对应的性别。
#### C. 幅度差函数法 (AMDF) - method_amdf 作为 ACF 的一种计算量较小的替代方案。
  • 差分计算:在感兴趣的滞后范围内,计算原信号与延迟信号的幅度差的绝对值之和。
  • 谷值搜索:寻找 AMDF 函数在特定范围内的极小值点(谷值),该点对应的滞后即为基音周期。
  • 阈值判断:如果最小差异值过大(接近平均幅度),则认为是非周期信号。

4. 判决逻辑 - judge_gender_by_pitch

对于 ACF 和 AMDF 提取出的平均基频,系统采用基于阈值的硬判决:
  • 基频 > 165Hz:判定为 "女"
  • 0 < 基频 <= 165Hz:判定为 "男"
  • 基频 = 0:判定为 "未知"

5. 结果统计与可视化

代码的最后部分负责数据的汇总与展示:
  • 准确率计算:分别计算三种算法正确分类的样本比例并以百分比形式输出。
  • 图形绘制:创建一个包含四个子图的 Figure:
1. 时域波形:展示原始语音信号的振幅变化。 2. 频谱图:利用 FFT 计算并展示信号的单边频谱(0-1000Hz范围)。 3. 基频轨迹:对比展示 ACF 和 AMDF 两种方法提取的基频随帧变化的曲线(F0 Contour),可以清晰看到基频的连续性。 4. 准确率柱状图:直观展示三种算法在当前测试集上的性能对比。