这是语音信号的数字处理课程的课程作业,这里采用了自相关法对基音周期进行估计。语料采样率:8kHz;量化精度为16bits/sample;
本次实验选择了自相关方法对基音周期进行估计。算法主要包括以下几个步骤
本实验准备使用MATLAB软件完成基音检测任务,具体步骤实现如下
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样点)
16 lpf_900 = fir1(39,900/fs);
17 f_l = conv2(f,lpf_900,'same');
18 figure;plot(f_l(5,:));xlabel('n');ylabel('幅值');title('语音信号波形(低通滤波)');
19 %% 阈值设定
20 %%
21 % 对每帧预料进行阈值选择
22 f_l_max = [max(abs(f_l(:,1:60)),[],2) max(abs(f_l(:,101:160)),[],2)];
23 CL = 0.68*min(f_l_max,[],2);
24 figure; stem(CL);xlabel('帧序号');ylabel('阈值大小');title('阈值分布');
25 CL = repmat(CL,1,160);
26 %% 削波处理
27 %%
28 % 三电平量化
29 f_3 = zeros(size(f));
30 f_3(f>CL) = 1;
31 f_3(f<-CL) = -1;
32 figure;plot(f_3(5,:));xlabel('n');ylabel('幅值');title('语音信号波形(三电平量化)');
33 %%
34 % 中心削波
35 f_c = zeros(size(f));
36 f_c(f>CL) = f(f>CL) - CL(f>CL);
37 f_c(f<-CL) = f(f<-CL) + CL(f<-CL);
38 figure;plot(f_c(5,:));xlabel('n');ylabel('幅值');title('语音信号波形(中心削波)');
39 %% 互相关求基音频率
40 % 互相关 (采用卷积计算)
41 f_3_inv = f_3(:,end:-1:1);
42 f_c_inv = f_c(:,end:-1:1);
43 for n = 1:45
44 f_xcorr(n,:) = conv(f_c(n,:),f_c_inv(n,:));
45 end
46 f_xcorr = f_xcorr(:,160:319);
47 %%
48 % 找出最大值位置
49 [f_xcorr_max,f_postition] = max(f_xcorr(:,21:160),[],2);
50 f_postition = f_postition+20;
51 noPitch = f_xcorr_max<f_xcorr(:,1)/4; % 清音检测
52 pitchFrequence = fs./f_postition; % 基音频率
53 pitchFrequence(noPitch==1) = 0;
54 figure;stem(pitchFrequence);xlabel('帧序号');ylabel('基音频率(Hz)');
55 title('基音频率检测');grid on;
以下将通过几个问题,具体对基音检测进行分析。
(1). 为何要通过低通滤波?
通过对比滤波器和波形,可以发现滤波之前有很多高频分量,而这些高频分量会对基音检测带来不利影响,选择合适的低通滤波器能消除这一影响,更好体现低频特性。
(2). 为何要分帧?
语音只有短期的平稳特性,譬如对整个语料做谱估计结果如下图所示,这样的信号是完全无法辨别基音频率的
(3). 为何要分前后段求最大幅度?
如下图所示,如果我们只求一次最大幅度,那么前面的波形就完全消失了。基音估计每帧要有两个周期,而幅度是会改变的,如果我们求最大值,那么阈值选择很有可能是不合适的。
(4). 互(自)相关求解的是什么?
互(自)相关求解的是波形之间的相似程度,也就是说对于周期信号在相邻周期时间下的互(自)相关值会很大。
(5). 削波带来了什么影响?不同的削波方式之间的差异是什么。
削波可以使得在基音周期位置呈现大的峰值,获得更良好的性能。三电平削波可以简化自相关运算,然而其性能却没有中心削波好。