这是语音信号的数字处理课程的课程作业,这里采用了自相关法对基音周期进行估计。语料采样率:8kHz;量化精度为16bits/sample;
1、 算法描述
本次实验选择了自相关方法对基音周期进行估计。算法主要包括以下几个步骤
- 预处理:包括语料读取和分帧、滤波。
- 阈值设定:对每帧数据选择合适的阈值进行设定
- 削波处理:提高检测准确性
- 互相关求基音频率:通过求解互(自)相关得到基音周期的检测值。
本实验准备使用MATLAB软件完成基音检测任务,具体步骤实现如下
- 下载语音工具箱voicebox,并导入MATLAB中。
- 使用readwav读取预料,enframe完成分帧,fir1设计低通滤波器滤波。
- 采用MAX函数分别取前60点最大值和最后60点最大值,选择其中较小的乘以0.68作为阈值。
- 对信号进行中心削波和三电平量化得到f_c,f_3。
- 求这两个信号的互相关值(或者分别求自相关)。取20-160点中的最大值,如果大于0值处1/4,认为是基音周期,否则认为基音周期为0.
2. 实验代码
MATLAB代码如下所示
1 %% 基音检测-语音信号的数字处理作业 2 % 本代码实现了语音信号的基音检测功能,采用了自相关方法处理。 3 % 4 % * 作者: 5 % * 日期:2015-04-15 6 % 7 8 %% 预处理 9 %% 10 % 清空工作区 11 clc;clear all;close all; 12 %% 13 % 读取预料,同时对其进行低通滤波(900Hz)和分帧 14 [y,fs,wmode,fidx]=readwav('MaoYiSheng.wav','p',-1,-1); 15 f=enframe(y,160); %分析帧长:20ms(160样点)