语音信号的短时时域分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7
2 短时平均能量
短时平均能量的定义为,n 时刻某语音信号的短时平均能量 En 为:
En
m
[x(m)w(n m)]2
m n (N 1)
n
[x(m)w(n m)]2
当窗函数为矩形窗时,有:
En
2
m n (N 1)
Fra Baidu bibliotek
n
x 2 (m)
若令: h( n) w ( n) ,则短时平均能量可以写成:
%在20~80的横坐标间取61个值作为横坐标 %取61个点的哈明窗值为纵坐标值 %画图 %第一个子图 %横坐标为x,纵坐标为h,k表示黑色 %图标题 %横坐标名称 %纵坐标名称 %取窗长内的61个点 %加哈明窗 %对时域信号进行1024点傅立叶变换 %幅度归一化 %对归一化幅度取对数 %频率归一化 %画第二个子图 %画幅度特性图 %限定横、纵坐标范围 %图标题 %横坐标名称 %纵坐标名称
En
m
x
2
(m)h(n m) x 2 (n) h(n)
En 反映语音信号的幅度或能量随时间缓慢变化的规律。窗的长短对于能否由短时能量 反映语音信号的幅度变化,起着决定性影响。如果窗选得很长,En 不能反映语音信号幅度 变化。窗选得太窄,En 将不够平滑。通常,当取样频率为 10kHz 时,选择窗宽度 N=100~200 是比较合适的。不同矩形窗长 N 时的短时能量函数如下:
Qn
例二:矩形窗
m
T [ x(m)]h(n m)
%在 0~100 的横坐标间取 10001 个值 %为矩阵 h 赋 0 值 %前 2000 个值取为 0 值 %窗长 ,窗内值取为 1 %后 2000 个值取为 0 值 %定义图号 %画第一个子图 %画波形,横坐标为 x,纵坐标为 h,k 表示
1 w(n) 0
0 n N 1 其它
图5 汉明(Hamming)窗表达式、时域图形及其频谱如下:
0.54 0.46 cos 0n N 2πn / N 1 , w(n) 其它 0
5
图6 加窗方法示意图:
图7 窗长一般选取 100~200。原因如下:当窗较宽时,平滑作用大,能量变化不大,故反 映不出能量的变化。当窗较窄时,没有平滑作用,反映了能量的快变细节,而看不出包络的 变化。 语音信号的分帧处理,实际上就是对各帧进行某种变换或运算。设这种变换或运算用 T[ ]表示,x(n)为输入语音信号,w(n)为窗序列,h(n)是与 w(n)有关的滤波器,则各帧经处理 后的输出可以表示为:
8
图9 短时平均能量的主要用途如下: 可以作为区分清音和浊音的特征参数。 在信噪比较高的情况下,短时能量还可以作为区分有声和无声的依据。 可以作为辅助的特征参数用于语音识别中。
例四:短时能量
fid=fopen('zqq.txt','rt'); x=fscanf(fid,'%f'); fclose(fid); %计算 N=50,帧移=50 时的语音能量 s=fra(50,50,x) s2=s.^2; energy=sum(s2,2) subplot(2,2,1) plot(energy) xlabel('帧数') ylabel('短时能量 E') legend('N=50') axis([0,1500,0,2*10^10]) %计算 N=100,帧移=100 时的语音能量 s=fra(100,100,x)
x=linspace(20,80,61); h=hamming(61); figure(1); subplot(1,2,1); plot(x,h,'k'); title('Hamming窗时域波形'); xlabel('样点数'); ylabel('幅度'); w1=linspace(0,61,61); w1(1:61)=hamming(61); w2=fft(w1,1024); w3=w2/w2(1); w4=20*log10(abs(w3)) w=2*[0:1023]/1024; subplot(1,2,2) plot(w,w4,'k') axis([0,1,-100,0]) title('Hamming窗幅度特性'); xlabel('归一化频率 f/fs'); ylabel('幅度/dB');
9
%读入语音文件
%一帧内各样点的能量 %求一帧能量 %定义画图数量和布局 %画 N=50 时的语音能量图 %横坐标 %纵坐标 %曲线标识 %定义横纵坐标范围
s2=s.^2; energy=sum(s2,2) subplot(2,2,2) plot(energy) xlabel('帧数') ylabel('短时能量 E') legend('N=100') axis([0,750,0,4*10^10]) %计算 N=400,帧移=400 时的语音能量 s=fra(400,400,x) s2=s.^2; energy=sum(s2,2) subplot(2,2,3) plot(energy) xlabel('帧数') ylabel('短时能量 E') legend('N=400') axis([0,190,0,1.5*10^11]) %计算 N=800,帧移=800 时的语音能量 s=fra(800,800,x) s2=s.^2; energy=sum(s2,2) subplot(2,2,4) plot(energy) xlabel('帧数') ylabel('短时能量 E') legend('N=800') axis([0,95,0,3*10^11]) %画 N=100 时的语音能量图
例三:Hanming 窗
%图标题 %横坐标名称 %纵坐标名称 %限定横、纵坐标范围 %画出 x 轴 %取窗长内的 61 个点 %赋值 1,相当于矩形窗 %对时域信号进行 1024 点的傅立叶变换 %幅度归一化 %对归一化幅度取对数 %频率归一化 %画第二个子图 %画幅度特性图 %限定横、纵坐标范围 %图标题 %横坐标名称 %纵坐标名称
6
x=linspace(0,100,10001); h=zeros(10001,1); h(1:2001)=0; h(2002:8003)=1; h(8004:10001)=0; figure(1); subplot(1,2,1) plot(x,h,'k');
黑色 title('矩形窗时域波形'); xlabel('样点数'); ylabel('幅度'); axis([0,100,-0.5,1.5]) line([0,100],[0,0]) w1=linspace(0,61,61); w1(1:61)=1; w2=fft(w1,1024); w3=w2/w2(1) w4=20*log10(abs(w3)); w=2*[0:1023]/1024; subplot(1,2,2); plot(w,w4,'k') axis([0,1,-100,0]) title('矩形窗幅度特性'); xlabel('归一化频率 f/fs'); ylabel('幅度/dB');
秒的帧数约为 33~100 帧。 分帧一般采用交叠分段的方法, 这是为了使帧与帧之间平滑过渡, 保持其连续性。前一帧和后一帧的交叠部分称为帧移,帧移与帧长的比值一般取为 0~1/2。 下图给出了帧移与帧长示意图:
图4 加窗常用的两种方法——矩形窗与汉明(Hamming)窗。矩形窗的时域表达式分别如下: 矩形窗表达式、时域图形及其频谱如下:
clear all; fid=fopen('voice2.txt','rt') e=fscanf(fid,'%f'); ee=e(200:455);
%打开文件 %读数据
%选取原始文件 e 的第 200 到 455 点的语音,也可选其他样点 r=fft(ee,1024); %对信号 ee 进行 1024 点傅立叶变换
1
率为 8kHz 即可。本实验的数字语音处理对象为语音数据文件,是已经数字化了的语音。有 了语音数据文件后,对语音的预处理包括:预加重、加窗分帧等。
1.1 语音信号的预加重处理
预加重目的:为了对语音的高频部分进行加重,去除口唇辐射的影响,增加语音的高频 分辨率。可通过一阶 FIR 高通数字滤波器来实现:
3
r1=abs(r); %对 r 取绝对值 r1 表示频谱的幅度值 pinlv=(0:1:255)*8000/512 %点和频率的对应关系 yuanlai=20*log10(r1) %对幅值取对数 signal(1:256)=yuanlai(1:256);%取 256 个点,目的是画图的时候,维数一致 [h1,f1]=freqz([1,-0.98],[1],256,4000);%高通滤波器 pha=angle(h1); %高通滤波器的相位 H1=abs(h1); %高通滤波器的幅值 r2(1:256)=r(1:256) u=r2.*h1' % 将信号频域与高通滤波器频域相乘 相当于在时域的卷积 u2=abs(u) %取幅度绝对值 u3=20*log10(u2) %对幅值取对数 un=filter([1,-0.98],[1],ee) %un 为经过高频提升后的时域信号 figure(1);subplot(211); plot(f1,H1);title('高通滤波器的幅频响应'); xlabel('频率/Hz'); ylabel('幅度'); subplot(212);plot(pha);title('高通滤波器的相位响应'); xlabel('频率/Hz'); ylabel('角度/radians'); figure(2);subplot(211);plot(ee);title('原始语音信号'); xlabel('样点数'); ylabel('幅度'); axis([0 256 -3*10^4 2*10^4]); subplot(212);plot(real(un)); title('经高通滤波后的语音信号'); xlabel('样点数'); ylabel('幅度'); axis([0 256 -1*10^4 1*10^4]); figure(3);subplot(211);plot(pinlv,signal);title('原始语音信号频谱 '); xlabel('频率/Hz'); ylabel('幅度/dB'); subplot(212);plot(pinlv,u3);title('经高通滤波后的语音信号频谱'); xlabel('频率/Hz'); ylabel('幅度/dB');
二、实验要求
本实验要求掌握语音信号的短时时域分析方法, 会利用已学的知识, 编写程序计算语音 的短时能量和平均幅度、短时平均过零率、短时自相关函数和短时平均幅度差函数等。
三、实验设备
PC 微机一台
四、实验原理 1 语音信号的预处理
在对语音信号进行数字处理之前,首先要将模拟语音信号 s(t) 离散化为 s(n). 实际中获 得数字语音的途径一般有两种, 正式的和非正式的。 正式的是指大公司或语音研究机构发布 的被大家认可的语音数据库, 非正式的则是研究者个人用录音软件或硬件电路加麦克风随时 随地录制的一些发音或语句。语音信号的频率范围通常是 300~3400Hz,一般情况下取采样
1.2 语音信号的加窗处理
由于发音器官的惯性运动,可以认为在一小段时间里(一般为 10ms~30ms)语音信号 近似不变, 即语音信号具有短时平稳性。 这样, 可以把语音信号分为一些短段 (称为分析帧) 来进行处理。 语音信号的分帧实现方法采用可移动的有限长度窗口进行加权的方法来实现的。 一般每
4
H ( z ) 1 z 1
设 n 时刻的语音采样值为 x(n) ,经过预加重处理后的结果为:
y (n) x(n) x(n 1)
高通滤波器的幅频特性和相频特性如下:
图1 预加重前和预加重后的一段语音信号时域波形:
2
图2 预加重前和预加重后的一段语音信号频谱:
图3 例一:语音信号预加重
实验 2 语音信号的短时时域分析
一、实验目的
语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音 识别和语音增强等语音处理中都需要提取语音中包含的各种信息。 语音处理的目的是对语音 信号进行分析,提取特征参数,用于后续处理;加工语音信号。总之,语音信号分析的目的 就在于方便有效的提取并表示语音信号所携带的信息。 根据所分析的参数类型,语音信号分析可以分成时域分析和变换域(频域、倒谱域)分 析。其中时域分析方法是最简单、最直观的方法,它直接对语音信号的时域波形进行分析, 提取的特征参数主要有语音的短时能量和平均幅度、 短时平均过零率、 短时自相关函数和短 时平均幅度差函数等。