基于matlab的元音共振峰的估算

一、元音频谱图

1、理论知识

不同元音的频谱不同。其峰值位置称为共振峰。 不同元音的识别取决于共振峰区域的存在。对于不同频率的相同元音,共振峰非常相似,无论音高如何都能识别它。

这里写图片描述

2、实验结果

声音采样频率为8000Hz,FFT长度为65536。FFT变换后取0—4000Hz进行频谱观察。

Y=fft(y,nfft);                    %用FFT计算频谱
Y_abs=abs(Y(1:nfft2));

五元音频谱图如下所示:

这里写图片描述

纵轴幅度化为dB后的频谱图:

这里写图片描述

二、前三共振峰测试结果

2.1 利用倒谱法计算出共振峰

流程如下:

这里写图片描述

具体步骤:

1、对语音信号进行预加重,再进行加窗和分帧。预加重的滤波器常设为:

H ( z ) = 1 a z 1

帧长wlen=256,帧移inc=256,这里将信号分帧后取其中的六帧进行平均后分析。窗函数为汉明窗,长度为帧长。

xx=enframe(x,256,256);                          %对x 256点分为一帧 
%a1多帧求平均
x1=xx(1,:);x2=xx(3,:);x3=xx(5,:);x4=xx(7,:);x5=xx(9,:);x6=xx(11,:);
x2=(x1+x2+x3+x4+x5+x6)/6;
u=filter([1 -.99],1,x2);                         % 预加重
u2=u'.*hamming(wlen);                            % 信号加窗函数

2、做傅里叶变换

U=fft(u2); 

3、取幅值后再取对数 l o g ( | | )

U_abs=log(abs(U(1:wlen2)));                      % 对数幅值谱(实数部分)

4、进行逆傅里叶变换,得到倒谱序列

Cepst=ifft(U_abs);                               % 求取倒谱

5、在倒频率轴上设置一个低通的窗函数,一般设置为矩形窗

这里写图片描述

式中 n 0 是窗函数的宽度。与倒频率的分辨率有关,即和采样频率及FFT的长度有关。

6、傅里叶变换后取实部部分得到频谱包络线。

7、在包络线上寻找出极大值,就可以获得相应的共振峰参数。

% 寻找峰值
j=1;
for i=2:wlen2-1
    if spect(i)>spect(i-1)&&spect(i)>spect(i+1)
        Loc(j)=i;Val(j)=spect(i);
        j=j+1;
    end
end
2.2 测试结果

低通窗函数 n 0 = 7 。测试a1画出波形如图所示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_39516859/article/details/81207960