怎样学好数字信号处理 c语言

数字语音信号处理 实验指导书(学生用)1 前言语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的 学科, 是目前发展最为迅速的信息科学研究领域的核心技术之一。 通过语音传递信息是人类 最重要、最有效、最常用和最方便的交换信息形式。同时,语言也是人与机器之间进行通信 的重要工具, 它是一种理想的人机
通信方式, 因而可为信息处理系统建立良好的人机交互环 境,进一步推动计算机和其他智能机器的应用,提高社会的信息化程度。 语音信号处理是一门新兴的学科, 同时又是综合性的多学科领域和涉及面很广的交叉学 科。 虽然从事这一领域研究的人员主要来自信号与信息处理及计算机应用等学科, 但是它与 语音学、语言学、声学、认知科学、生理学、心理学等许多学科也有非常密切的联系。 20 世纪 60 年代中期形成的一系列数字信号处理的理论和算法,如数字滤波器、快速傅 立叶变换 (FFT) 等是语音信号数字处理的理论和技术基础。 随着信息科学技术的飞速发展, 语音信号处理取得了重大的进展:进入 70 年代之后,提出了用于语音信号的信息压缩和特 征提取的线性预测技术(LPC) ,并已成为语音信号处理最强有力的工具,广泛应用于语音 信号的分析、 合成及各个应用领域, 以及用于输入语音与参考样本之间时间匹配的动态规划 方法;80 年代初一种新的基于聚类分析的高效数据压缩技术―矢量量化(VQ)应用于语音 信号处理中;而用隐马尔可夫模型(HMM)描述语音信号过程的产生是 80 年代语音信号处 理技术的重大发展, 目前 HMM 已构成了现代语音识别研究的重要基石。 近年来人工神经网 络(ANN)的研究取得了迅速发展,语音信号处理的各项课题是促进其发展的重要动力之一, 同时,它的许多成果也体现在有关语音信号处理的各项技术之中。 要求: 1、用自己的手机录音 “我是贵州大学科学院 XX 级 XX 专业的学生, 名叫 XXX,(女) 男 , 毕业于 XX 省 XX 市(县)XX 中学。 2、在实验报告中要注明手机品牌,录音的采样频率:单(双)声道 3、每个人实验报告只能处理自己的录音作为输入,实验报告采用电子文档提交,不接 收纸质报告,附录音记录――切记!!! !!。第一、二个实验第十周上课交。2 实验一 基于 MATLAB 的语音信号时域特征分析一、实验目的语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语 音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析 的目的就在与方便有效的提取并表示语音信号所携带的信息。语音信号分析可以分为时域 和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分 析,提取的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等。 本实验要求掌握时域特征分析原理, 并利用已学知识, 编写程序求解语音信号的短时过 零率、短时能量、短时自相关特征,分析实验结果,并能掌握借助时域分析方法所求得的参 数分析语音信号的基音周期及共振峰。二、实验原理及实验结果1.窗口的选择 通过对发声机理的认识,语音信号可以认为是短时平稳的。在 5~50ms 的范围内,语音 频谱特性和一些物理特性参数基本保持不变。 我们将每个短时的语音称为一个分析帧。 一般 帧长取 10~30ms。 我们采用一个长度有限的窗函数来截取语音信号形成分析帧。 通常会采用 矩形窗和汉明窗。图 1.1 给出了这两种窗函数在帧长 N=50 时的时域波形。矩 形 窗 2 1.8 1.6 1.4 1.2 1 0.9 0.8 0.7 0.6 hanming窗w( n)1 0.8 0.6 0.4 0.2 0w( n)0 20 sample 40 600.5 0.4 0.3 0.2 0.1 0020 sample4060图1.1矩形窗和Hamming窗的时域波形矩形窗的定义:一个N点的矩形窗函数定义为如下w( n ) ? ? 1,0 ? n ? N 0,其他hamming窗的定义:一个N点的hamming窗函数定义为如下3 ? 0.54?0.46cos(2? Nn?1),0? n? N w(n)= ? 0,其他 ?这两种窗函数都有低通特性,通过分析这两种窗的频率响应幅度特性可以发现(如图 1.2) :矩形窗的主瓣宽度小(4*pi/N) ,具有较高的频率分辨率,旁瓣峰值大(-13.3dB) ,会 导致泄漏现象;汉明窗的主瓣宽 8*pi/N,旁瓣峰值低(-42.7dB) ,可以有效的克服泄漏现象, 具有更平滑的低通特性。 因此在语音频谱分析时常使用汉明窗, 在计算短时能量和平均幅度 时通常用矩形窗。表 1.1 对比了这两种窗函数的主瓣宽度和旁瓣峰值。矩形窗频率响应 0 -20幅 度 /dB-40 -60 -8000.10.20.30.4 0.5 0.6 归 一 化 频 率 (f/fs) Hamming窗 频 率 响 应0.70.80.910幅 度 /dB-50-10000.10.20.30.4 0.5 0.6 归 一 化 频 率 (f/fs)0.70.80.91图1.2矩形窗和Hamming窗的频率响应表1.1 矩形窗和hamming窗的主瓣宽度和旁瓣峰值窗函数 矩形窗 hamming 2.短时能量主瓣宽度 4*pi/N 8*pi/N旁瓣峰值 13.3dB 42.7dB由于语音信号的能量随时间变化, 清音和浊音之间的能量差别相当显著。 因此对语 音的短时能量进行分析,可以描述语音的这种特征变化情况。定义短时能量为:En ?m ???? [ x(m)w(n ? m)]?2?m ? n ? N ?1?n[ x(m)w(n ? m)]2,其中 N 为窗长4 特殊地,当采用矩形窗时,可简化为:En ?m ???? x ( m)2?图 1.3 和图 1.4 给出了不同矩形窗和 hamming 窗长的短时能量函数,我们发现:在用短 时能量反映语音信号的幅度变化时,不同的窗函数以及相应窗的长短均有影响。hamming 窗的效果比矩形窗略好。但是,窗的长短影响起决定性作用。窗过大(N 很大) ,等效于很 窄的低通滤波器, 不能反映幅度 En 的变化;窗过小 N 很小) ( ,短时能量随时间急剧变化, 不能得到平滑的能量函数。在 11.025kHz 左右的采样频率下,N 选为 100~200 比较合适。 短时能量函数的应用:1)可用于区分清音段与浊音段。En 值大对应于浊音段,En 值小 对应于清音段。2)可用于区分浊音变为清音或清音变为浊音的时间(根据 En 值的变化趋 势) 。3) 对高信噪比的语音信号, 也可以用来区分有无语音 (语音信号的开始点或终止点)。 无信号(或仅有噪声能量)时,En 值很小,有语音信号时,能量显著增大。采样幅度0 -1 0 00 8000 sample
18000采样幅度11 0 -1 0 00 8000 sample
18000短时能量2 0 0 00 8000 sample
N=50 18000短时能量42 1 0 0 00 8000 sample
N=50 18000短时能量5 0 0 00 8000 sample
N=150 18000短时能量104 2 0 0 00 8000 sample
N=150 18000短时能量5 0 0 00 8000 sample
N=250 18000短时能量1010 5 0 0 00 8000 sample
N=250 18000短时能量10 0 0 00 8000 sample
N=350 18000短时能量2010 5 0 0 00 8000 sample
N=350 18000短时能量10 0 0 00 8000 sample
N=450 18000短时能量2010 5 0 0 00 8000 sample
N=450 18000图 1.3 不同矩形窗长的短时能量函数图 1.4不同 hamming 窗长的短时能量函数3.短时平均过零率 过零率可以反映信号的频谱特性。 当离散时间信号相邻两个样点的正负号相异时, 我们 称之为“过零”,即此时信号的时间波形穿过了零电平的横轴。统计单位时间内样点值改变符 号的次数具可以得到平均过零率。定义短时平均过零率:Zn ?m ?????sgn[ x[m] ? sgn[ x(m ? 1)] w(n ? m)5 其中 sgn[] 为符号函数, 条件下,可以简化为x sgn x ( n) ? ? 1,1,( n ) ? 0 0 ? x( n)?,在矩形窗Zn ?1 2Nm ? n ? N ?1?nsgn[ x(m) ? sgn[ x(m ? 1)]短时过零率可以粗略估计语音的频谱特性。由语音的产生模型可知,发浊音时,声带振 动,尽管声道有多个共振峰,但由于声门波引起了频谱的高频衰落,因此浊音能量集中于 3KZ 以下。而清音由于声带不振动,声道的某些部位阻塞气流产生类白噪声,多数能量集 中在较高频率上。高频率对应着高过零率,低频率对应着低过零率,那么过零率与语音的清 浊音就存在着对应关系。. 图 1.5 为某一语音在矩形窗条件下求得的短时能量和短时平均过零率。分析可知:清音 的短时能量较低,过零率高,浊音的短时能量较高,过零率低。清音的过零率为 0.5 左右, 浊音的过零率为 0.1 左右,两但者分布之间有相互交叠的区域,所以单纯依赖于平均过零率 来准确判断清浊音是不可能的,在实际应用中往往是采用语音的多个特征参数进行综合判 决。 短时平均过零率的应用:1)区别清音和浊音。例如,清音的过零率高,浊音的过零率 低。此外,清音和浊音的两种过零分布都与高斯分布曲线比较吻合。2)从背景噪声中找出 语音信号。 语音处理领域中的一个基本问题是, 如何将一串连续的语音信号进行适当的分割, 以确定每个单词语音的信号,亦即找出每个单词的开始和终止位置。3)在孤立词的语音识 别中,可利用能量和过零作为有话无话的鉴别。6 1采样幅度0.50-0.502000400060008000 sample10000120001400016000180008 6短时能量4 2 002000400060008000 sample10000120001400016000180000.5短时平均过零率0.4 0.3 0.2 0.1 0 0 00 8000 sample
18000图 1.5 矩形窗条件下的短时平均过零率4、短时自相关函数 自相关函数用于衡量信号自身时间波形的相似性。 清音和浊音的发声机理不同, 因而在 波形上也存在着较大的差异。浊音的时间波形呈现出一定的周期性,波形之间相似性较好; 清音的时间波形呈现出随机噪声的特性,样点间的相似性较差。因此,我们用短时自相关函 数来测定语音的相似特性。短时自相关函数定义为:Rn (k ) ?m ???'???x(m) w(n ? m) x(m ? k ) w(n ? m ? k )'令 m ? n ? m ,并且 w(?m) ? w (m) ,可以得到:Rn (k ) ?m ???? [ x(n ? m)w' (m)][ x(n ? m ? k )w' (m ? k )] ??N ?1? k m?0? [ x(n ? m)w (m)][ x(n ? m ? k )w (m ? k )]' '图 6 给出了清音的短时自相关函数波形, 7 给出了不同矩形窗长条件下 图 (窗长分别为 N=70,N=140,N=210,N=280)浊音的短时自相关函数波形。由图 1.6、图 1.7 短时自相关 函数波形分析可知:清音接近于随机噪声,清音的短时自相关函数不具有周期性,也没有明 显突起的峰值,且随着延时 k 的增大迅速减小;浊音是周期信号,浊音的短时自相关函数呈 现明显的周期性, 自相关函数的周期就是浊音信号的周期, 根据这个性质可以判断一个语音7 信号是清音还是浊音, 还可以判断浊音的基音周期。 浊音语音的周期可用自相关函数中第一 个峰值的位置来估算。 所以在语音信号处理中, 自相关函数常用来作以下两种语音信号特征 的估计: 1)区分语音是清音还是浊音; 2)估计浊音语音信号的基音周期。0.08 0.06 0.04 0.02 0 -0.02 -0.04 -0.06 -0.08 0 50 100 150 200 250 300清音 0.10.05R(k)0-0.05-0.1050100150 延时k200250300图 1.65清音的短时自相关函数N=70R(k)0-5020406080100 延时k1201401601802002205 N=140R(k)0-5020406080100 延时k12014016018020022010 N=210R(k)0-10020406080100 延时k12014016018020022010 N=280R(k)0-10020406080100 延时k120140160180200220图 1.7不同矩形窗长条件下的浊音的短时自相关函数5、时域分析方法的应用 1)基音频率的估计 首先可利用时域分析(短时能量、短时过零率、短时自相关)方法的某一个特征或某几 个特征的结合,判定某一语音有效的清音和浊音段;其次,针对浊音段,可直接利用短时自 相关函数估计基音频率,其方法是:估算浊音段第一最大峰的位置,再利用抽样率计算基音 频率,举例来说,若某一语音浊音段的第一最大峰值约为 35 个抽样点,设抽样频率为 11.025KHZ,则基音频率为
HZ。 但是,实际上第一最大峰值位置有时并不一定与基音周期吻合。一方面与窗长有关,另8 一方面还与声道特性有关。鉴于此,可采用三电平削波法先进行预处理。 2)语音端点的检测与估计 可利用时域分析(短时能量、短时过零率、短时自相关)方法的某一个特征或某几个特 征的结合, 判定某一语音信号的端点, 尤其在有噪声干扰时, 如何准确检测语音信号的端点, 这在语音处理中是富有挑战性的一个课题。三、附录(参考程序)1) 短时能量 (1)加矩形窗 a=wavread('beifeng.wav'); subplot(6,1,1),plot(a); N=32; for i=2:6 h=linspace(1,1,2.^(i-2)*N);%形成一个矩形窗,长度为 2.^(i-2)*N En=conv(h,a.*a);% 求短时能量函数En subplot(6,1,i),plot(En); if(i==2) legend('N=32'); elseif(i==3) legend('N=64'); elseif(i==4) legend('N=128'); elseif(i==5) legend('N=256'); elseif(i==6) legend('N=512'); end end (2)加汉明窗 a=wavread('beifeng.wav'); subplot(6,1,1),plot(a); N=32; for i=2:6 h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为 2.^(i-2)*N En=conv(h,a.*a);% 求短时能量函数En subplot(6,1,i),plot(En); if(i==2) legend('N=32'); elseif(i==3) legend('N=64'); elseif(i==4) legend('N=128'); elseif(i==5) legend('N=256'); elseif(i==6) legend('N=512'); end end9 2) 短时平均过零率 a=wavread('beifeng.wav'); n=length(a); N=320; subplot(3,1,1),plot(a); h=linspace(1,1,N); En=conv(h,a.*a); %求卷积得其短时能量函数 En subplot(3,1,2),plot(En);for i=1:n-1 if a(i)&=0b(i)= 1; else b(i) = -1; end if a(i+1)&=0 b(i+1)=1; else b(i+1)= -1; end w(i)=abs(b(i+1)-b(i)); %求出每相邻两点符号的差值的绝对值 end k=1; j=0; while (k+N-1)&n Zm(k)=0; for i=0:N-1; Zm(k)=Zm(k)+w(k+i); end j=j+1; k=k+N/2; %每次移动半个窗 end for w=1:j Q(w)=Zm(160*(w-1)+1)/(2*N); %短时平均过零率 end subplot(3,1,3),plot(Q),3) 自相关函数 N=240 Y=WAVREAD('beifeng.wav'); x=Y(); x=x.*rectwin(240); R=zeros(1,240); 10 for k=1:240 for n=1:240-k R(k)=R(k)+x(n)*x(n+k); end end j=1:240; plot(j,R);11 实验二一、实验目的基于 MATLAB 分析语音信号频域特征信号的傅立叶表示在信号的分析与处理中起着重要的作用。 因为对于线性系统来说, 可 以很方便地确定其对正弦或复指数和的响应, 所以傅立叶分析方法能完善地解决许多信号分 析和处理问题。另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更深入地说明 信号的各项红物理现象。 由于语音信号是随着时间变化的, 通常认为, 语音是一个受准周期脉冲或随机噪声源激 励的线性系统的输出。 输出频谱是声道系统频率响应与激励源频谱的乘积。 声道系统的频率 响应及激励源都是随时间变化的, 因此一般标准的傅立叶表示虽然适用于周期及平稳随机信 号的表示,但不能直接用于语音信号。由于语音信号可以认为在短时间内,近似不变,因而 可以采用短时分析法。 本实验要求掌握傅里叶分析原理,会利用已学的知识,编写程序估计短时谱、倒谱,画 出语谱图,并分析实验结果,在此基础上,借助频域分析方法所求得的参数分析语音信号的 基音周期或共振峰。二、实验原理1、短时傅立叶变换 由于语音信号是短时平稳的随机信号,某一语音信号帧的短时傅立叶变换的定义为:X n (e jw ) ?m???? x(m)w(n ? m)e?? jwm(2.1)其中 w(n-m)是实窗口函数序列,n 表示某一语音信号帧。令 n-m=k',则得到X n (e jw ) ?于是可以得到k '???? w(k ') x(n ? k ')e??? jw( n ?k ')(2.2)X n (e jw ) ? e? jwn假定k ???? w(k ) x(n ? k )ejwk(2.3)X n (e jw ) ?则可以得到k ???? w(k ) x(n ? k )e?jwk(4)X n (e jw ) ? e? jwn X n (e jw )(5)同样,不同的窗口函数,将得到不同的傅立叶变换式的结果。由上式可见,短时傅立叶12 变换有两个变量:n 和 ω,所以它既是时序 n 的离散函数,又是角频率 ω 的连续函数。与离 散傅立叶变换逼近傅立叶变换一样,如令 ω=2πk/N,则得离散的短时傅立叶吧如下:Xn(e j 2? k / N ) ? Xn(k ) ?m???? x(m)w(n ? m)e?? j 2? km / N,(0 ? k ? N ? 1)(6)2、语谱图 水平方向是时间轴,垂直方向是频率轴,图上的灰度条纹代表各个时刻的语音短时谱。 语谱图反映了语音信号的动态频率特性, 在语音分析中具有重要的实用价值。 被成为可视语 言。 语谱图的时间分辨率和频率分辨率是由窗函数的特性决定的。 时间分辨率高, 可以看出 时间波形的每个周期及共振峰随时间的变化, 但频率分辨率低, 不足以分辨由于激励所形成 的细微结构,称为宽带语谱图;而窄带语谱图正好与之相反。 宽带语谱图可以获得较高的时间分辨率, 反映频谱的快速时变过程; 窄带语谱图可以获 得较高的频率分辨率,反映频谱的精细结构。两者相结合,可以提供带两与语音特性相关的 信息。语谱图上因其不同的灰度,形成不同的纹路,称之为“声纹”。声纹因人而异,因此可 以在司法、安全等场合得到应用。3、复倒谱和倒谱 复倒谱 x(n) 是 x(n)的 Z 变换取对数后的逆 Z 变换,其表达式如下:^x?Z^?1[ln Z [ x(n)]](7)倒谱 c(n)定义为 x(n)取 Z 变换后的幅度对数的逆 Z 变换,即c(n) ? z ?1[ln | X ( z) |](8)在时域上,语音产生模型实际上是一个激励信号与声道冲激响应的卷积。对于浊音,激 励信号可以由周期脉冲序列表示;对于清音,激励信号可以由随机噪声序列表示。声道系统 相当于参数缓慢变化的零极点线性滤波器。这样经过同态处理后,语音信号的复倒谱,激励 信号的复倒谱,声道系统的复倒谱之间满足下面的关系:s ( n ) ? e( n ) ? v ( n )^^^(9)由于倒谱对应于复倒谱的偶部, 因此倒谱与复倒谱具有同样的特点, 很容易知道语音信 号的倒谱,激励信号的倒谱以及声道系统的倒谱之间满足下面关系:c (n) ? c (n) ? c (n)s e v(10)浊音信号的倒谱中存在着峰值, 它的出现位置等于该语音段的基音周期, 而清音的倒谱13 中则不存在峰值。 利用这个特点我们可以进行清浊音的判断, 并且可以估计浊音的基音周期。4、基因周期估计 浊音信号的倒谱中存在峰值, 它的出现位置等于该语音段的基音周期, 而清音的倒谱中 则不存在峰值。利用倒谱的这个特点,我们可以进行语音的清浊音判决,并且可以估计浊音 的基音周期。首先计算语音的倒谱,然后在可能出现的基因周期附近寻找峰值。如果倒谱峰 值超过了预先设置的门限,则输入语音判断为浊音,其峰值位置就是基因周期的估计值;反 之,如果没有超出门限的峰值的话,则输入语音为清音。5、共振峰估计 对倒谱进行滤波, 取出低时间部分进行进行逆特征系统处理, 可以得到一个平滑的对数 谱函数, 这个对数谱函数显示了输入语音段的共振峰结构, 同时谱的峰值对应于共振峰频率。 通过此对数谱进行峰值检测, 就可以估计出前几个共振峰的频率和强度。 对于浊音的声道特 性,可以采用前三个共振峰来描述;清音不具备共振峰特点。三、实验结果1 短时谱original signal 1 0.5 0 -0.5 -10246 短时谱81012 x 104500-50-100050100150200250300图 2.1 短时谱 2 语谱图14 图 2.2语谱图3 倒谱和复倒谱 图 3、4 是加矩形窗和汉明窗的倒谱图和复倒谱图,图中横轴的单位是 Hz,纵轴的单位 是 dB。加矩形窗时的倒谱 1 0.5 0 -0.5 -1050100150200250300加矩形窗时的复倒谱 50-5050100150200250300图 2.4 加矩形窗时的倒谱和复倒谱图15 加汉明窗时的倒谱 10-1-2050100150200250300加汉明窗时的复倒谱 20 10 0 -10 -20050100150200250300图 2.3 加汉明窗时倒谱和复倒谱图4 基因周期和共振峰估计1 0倒谱幅度-1 -2 -30100200300 点数N400500600100幅 度 /dB0-100-2000100200300 时 间 /ms400500600图 2.5 倒谱图 分析第 15 帧其中第一峰值出现在第 2 个样点, 窗长为 512 (64ms) 抽样频率为 11KHz, , 说明基因频率就在这个点上,其基因频率为 5.5KHz,基音周期为 0.182ms。 四、附录(参考程序)16 1)短时谱clear a=wavread('beifeng.wav'); subplot(2,1,1), plot(a);title('original signal'); grid N=256; h=hamming(N); for m=1:N b(m)=a(m)*h(m) end y=20*log(abs(fft(b))) subplot(2,1,2) plot(y);title('短时谱'); grid2)语谱图 [x,fs,nbits]=wavread('beifeng.wav')specgram(x,512,fs,100); xlabel('时间(s)'); ylabel('频率(Hz)'); title('语谱图');3)倒谱和复倒谱 (1)加矩形窗时的倒谱和复倒谱clear a=wavread('beifeng.wav',[]); N=300; h=linspace(1,1,N); for m=1:N b(m)=a(m)*h(m); end c=cceps(b); c=fftshift(c); d=rceps(b); d=fftshift(d); subplot(2,1,1) plot(d);title('加矩形窗时的倒谱') subplot(2,1,2) plot(c);title('加矩形窗时的复倒谱')(2)加汉明窗时的倒谱和复倒谱clear a=wavread('beifeng.wav',[]);17 N=300; h=hamming(N); for m=1:N b(m)=a(m)*h(m); end c=cceps(b); c=fftshift(c); d=rceps(b); d=fftshift(d); subplot(2,1,1) plot(d);title('加汉明窗时的倒谱') subplot(2,1,2) plot(c);title('加汉明窗时的复倒谱')18 实验三一、实验目的基于 MATLAB 的 LPC 分析线性预测分析是最有效的语音分析技术之一,在语音编码、语音合成、语音识别和说话 人识别等语音处理领域中得到了广泛的应用。 语音线性预测的基本思想是: 一个语音信号的 抽样值可以用过去若干个取样值的线性组合来逼近。 通过使实际语音抽样值与线性预测抽样 值的均方误差达到最小,可以确定唯一的一组线性预测系数。 采用线性预测分析不仅能够得到语音信号的预测波形, 而且能够提供一个非常好的声道 模型。如果将语音模型看作激励源通过一个线性时不变系统产生的输出,那么可以利用 LP 分析对声道参数进行估值,以少量低信息率的时变参数精确地描述语音波形及其频谱的性 质。此外,LP 分析还能够对共振峰、功率谱等语音参数进行精确估计,LP 分析得到的参数 可以作为语音识别的重要参数之一。 由于语音是一种短时平稳信号, 因此只能利用一段语音来估计模型参数。 此时有两种方 案:一种是将长的语音序列加窗,然后对加窗语音进行 LP 分析,只要限定窗的长度就可以 保证分析的短时性,这种方案称为自相关法;另一种方案不对语音加窗,而是在计算均方预 测误差时限制其取和区间,这样可以导出 LP 分析的自协方差法。 本实验要求掌握 LPC 原理,会利用已学的知识,编写程序估计线性预测系数以及 LPC 的推演参数, 并能利用所求的相关参数估计语音的端点、 清浊音判断、 基因周期、 共振峰等。二、实验原理1 LP 分析基本原理 LP 分析为线性时不变因果稳定系统 V (z) 建立一个全极点模型, 并利用均方误差准则, 对已知的语音信号 s(n)进行模型参数估计。 如果利用 P 个取样值来进行预测,则称为 P 阶线性预测。 假设用过去 P 个取样值?S ? n ?1? , S ? n ? 2? ,?S ? n ? p?? 的加权之和来预测信号当前取样值 S ? n ? ,则预测信号 S ? n ? 为:S ? n ? ? ? ak ? n ? k ?k ?1 ? p?(1)其中加权系数用 a k 表示,称为预测系数,则预测误差为:e ? n ? ? s ? n ? ? S ? n ? ? s ? n ? ? ? ak ? n ? k ?k ?1 ? p(2)要使预测最佳,则要使短时平均预测误差最小有:? ? E ?e2 ? n ?? ? min ? ?(3)19 ? ?e2 ? n ? ? ? ? ?ak? 0, (1 ? k ? p)(4)令? ?i, k ? ? E ?s ? n ? i ? , S ? n ? k ?? ? ?最小的 ? 可表示成:(5)? min ? ? ? 0,0? ? ? ak? ? 0, k ?k ?1p(6)显然,误差越接近于零,线性预测的准确度在均方误差最小的意义上为最佳,由此可以 计算出预测系数。 通过 LPC 分析,由若干帧语音可以得到若干组 LPC 参数,每组参数形成一个描绘该帧 语音特征的矢量, LPC 特征矢量。 LPC 特征矢量可以进一步得到很多种派生特征矢量, 即 由 例如线性预测倒谱系数、线谱对特征、部分相关系数、对数面积比等等。不同的特征矢量具 有不同的特点,它们在语音编码和识别领域有着不同的应用价值。 2 自相关法 在最佳线性预测中,若用下式定义的时间平均最小均方准则代替(3)式的集合平均最小 均方准则,即令??1 NN ? p ?1 n ?0?e2 ? n ? ? min(7)事实上就是短时自相关函数,因而R ? i ? k ? ? ? ? i, k ?(8) (9)R ? k ? ? E ? S ? n ? , S ? n ? k ?? ? ?根据平稳随机信号的自相关性质,可得? ?i, k ? ? R ? i ? k ? , i ? 1, 2? k ? 0,1? p由(6)式,可得:(10)? min ? R ? 0? ? ? ak ?R ? k ?k ?1p(11)综上所述,可以得到如下矩阵形式:R ?1? ? R ? P ? 1? ? ? R ? 0? ? ? R ?0? ? R ? P ? 2? ? ? R ?1? ? ? ? ? ? ? ? ? R ? P ? 1? R ? P ? 2 ? R ?0? ? ? ? ? ? ? ?? a1 ? ? R ?1? ? ? ? ? R ? 2? ? ? ? a2 ? ? ? a3 ? ? ? R ? 3? ? ? ? ? ? ? ?? ? ?? ? ?a ? ? ? n ? ? R ? p?? ? ?20(12) 值得注意的是,自相关法在计算预测误差时,数据段?S ?0? , S ?1? ,?S ? n ?1?? 的两端都需要加 P 个零取样值,因而可造成谱估计失真。特别是在短数据段的情况下,这一现实更为 严重。另外,当预测系数量化时,有可能造成实际系统的不稳定。 自相关解法主要有杜宾算法、格型算法和舒尔算法等几种高效递推算法。 3 协方差法 如果在最佳线性预测中,用下式定义的时间平均最小均方准则代替(3)式的集合平均最 小均方准则,则可得到类似的方程:??1 NN ?1 n? p? e2 ? n ? ? min(13)可以看出,这里的数据段两端不需要添加零取样值。在理论上,协方差法计算出来的预 测系数有可能造成预测误差滤波器的不稳定, 但在实际上当每帧信号取样足够多时, 其计算 结果将与自相关法的结果很接近, 因而稳定性一般是能够保证的 (当然这种方法也有量化效 应可能引起不稳定的缺点)。 协方差解法的最大优点在于不存在自相关法中两端出现很大预测误差的情况, N 和 P 在 相差不大时,其参数估值比自相关法要精确的多。但是在语音信号处理时,往往取 N 在 200 左右。此时,自相关法具有较大误差的段落在整个语音段中所占的比例很小,参数估值也是 比较准确的。在这种情况下,协方差法误差较小的优点就不再突出,其缺乏高效递推算法的 缺点成为了制约因素。所以,在语音信号处理中往往使用高效的自相关法。 4 全极点声道模型 将线性预测分析应用于语音信号处理, 不仅是为了利用其预测功能, 更因为它提供了一 个非常好的声道模型。 将式(2)所示的方程看成是滤波器在语音信号激励下的输入输出方程,则该滤波器称为 预测误差滤波器,其 e(n)是输出误差。变换到 z 域,P 阶预测误差滤波器的系统函数为i H ? z? ? 1 ? ? ia ?z i ?1 p(14)可以看出,如果将预测误差 e(n)作为激励信号,使其通过预测误差滤波器的逆滤波器 H(Z),即H ? z? ? 1 ? A? Z ? 1 1 ? ? ai z ?ii ?1 p(15)则 H(Z)的输出为语音信号 s(n), 也就是说, H(Z)在预测误差 e(n)的激励下可以合成语音。 因此,H(Z)被称为语音信号的全极点模型,也称为语音合成器。该模型的参数就是 P 阶线21 性预测的预测系数ai ? i ? 1, 2,?, p ?。因为预测误差含有语音信号的基音信息, 所以对于浊音, 模型的激励信号源是以基音周 期重复的单位脉冲;对于清音,激励信号源 e(n)是自噪声。语音信号的全极点模型是一种很 重要的声道模型,是许多应用和研究的基础。 5 LPCC 如果声道特性 H(Z)用式(14)所示的全极点模型表示,有H ? z? ? S ? z? I ? z? ? 1 1 ? ? an z ? nn ?1 p(16)式中,S(z)和 I(z)分别为语音信号 s n 和激励源 in 的 Z 变换。对人的听觉来说,浊音是最重要 的语音信号。对于浊音,模型的激励信号源 e(n)是以基音周期重复的单位脉冲,此时有I ? z? ? 1。可得 s n 的 Z 变换 S(z)为S ? z? ? 1 1 ? ? an z ? nn ?1 p(17)式中,ai ? i ? 1, 2,?, p ?为 P 阶线性预测系数。根据倒谱的定义,对具有最小相位特征的语音信号 s n ,有ln S ? z ? ? C ? z ? ? ? cn z ?nn ?1 ?(18)?1式中, c n 为语音信号的倒谱。将式(16)代入式(17),并对两边 z 求导,得?c1 ? a1 ? n ?1 ? ? k? ?cn ? an ? ? ?1 ? n ? ak cn ? k ,1 ? n ? p ? k ?1 ? ?(19)根据上式即可由线性预测系数通过递推得到倒谱系数, 将这样得到的倒谱称为线性预测 倒谱系数。 6 结合语音帧能量构成LPC组合参数 由于人能从声音的音色、频高等各种信息中感知说话人的个性,因此可以想象,利用特 征的有效组合可以得到比较稳定的识别性能。 一般来说, 如果组合的各参量之间相关性不大, 则会更有效一些,因为它们分别反映了语音信号中的不同特征。多年来,人们对组合参数在 说话人识别中的应用进行了大量研究 。实验证明,组合参数可以提高系统的识别性能。 组合参数虽然可以提高系统的性能,但很显然,无论是在特征参数提取环节,还是在模22 型训练和模型匹配环节都使运算量有所增加。 在特征参数提取环节, 要计算一种以上的特征 参数。在模型训练和模型匹配环节,由于组合参数特征矢量的维数较多,使运算复杂度有所 增加。运算量的增加会使系统的识别速度受到影响。 为使运算量问题得到较好的解决,所以可以由 LPC 参数与语音帧能量构成组合参数, 能够在运算量增加不明显的情况下改进系统的性能。 语音帧能量是指一帧语音信号的能量, 它等于该帧语音样值的平方和。 选取与语音帧能 量构成组合参数主要有以下考虑:1)语音帧能量是语音信号最基本的短时参数之一,它表 征一帧语音信号能量的大小,是语音信号一个重要的时域特征;2)由一帧语音求出的语音 帧能量是一个标量值, 与其它参量构成组合参数不会使原特征矢量的维数明显增加, 特征矢 量的维数越少,则需要的运算复杂度越小,另外,获取语音帧能量的运算并不复杂;3)语 音帧能量与 LPC 参数之间的相关性不大,它们反映的是语音信号的不同特征,应该有较好 的效果。 7 模型增益G 模型的激励信号pGe ? n ?表示为: (20)Ge ? n ? ? s ? n ? ? ? ai s ? n ? i ?i ?1预测误差 e(n)如式(2) ,这样当实际的预测系数与模型系数相等时,有? ? n ? ? Ge ? n ?(21)这说明激励信号正比于误差信号, 其比例常数等于模型增益 G。 通常假设误差信号的能 量等于输入激励信号的能量,因此可以得到:G2 ? e2 ? m? ? ? ? 2 ? m? ? Enm?0 m?0 N ?1 N ?1(22)对于式中的激励信号e ? n?,主要分为浊音和清音两种情况。其中为浊音时,考虑到此时实际的激励信号为声门脉冲,因此可以将激励信号表示为 n ? 0 时的单位抽样。为了保证这个 假设成立,要求分析的区间应该大致和语音基因周期的长度相等。当语音为清音时,我们假 定激励信号e ? n?为一个零均值、单位方差的平稳白噪声过程。采用自相关解法时,浊音的模型增益为En ? Rn ? 0? ? ? ai Rn ?i ? ? G2i ?1 p(23)清音计算模型增益的公式和浊音相同。三、实验结果(参考)23 我们使用的原始语音为“北风”,采样频率为 11000Hz,运行程序见附录。 在这里我们取第 30 帧进行观察,线性预测阶数为 12,看到图 3.1 所示的原始语音帧的 波形,预测语音帧波形和它们之间预测误差的波形。图 3.2 为原始语音帧和预测语音帧的短 时谱和 LPC 谱的波形原始语音波形 1 0 -1024681012 x 104原始语音和预测语音波形 0.5 0 -0.5050100150 预测误差2002503000.2 0 -0.2050100150200250300图3.1 原始语音帧、预测语音帧和预测误差的波形短时谱 1000幅度-100 -2000102030 40 频 率 /dB LPC谱506070200 150幅度100 50 00102030 40 频 率 /dB506070图3.2 原始语音帧和预测语音帧的短时谱和LPC谱的波形这里我们可以改变线性误差的阶数来观察语音帧的短时谱和LP谱的变化情况, 如图3.3。P1 =5 1000幅度-100 -2000102030 频 率 /dB P1 =10405060701000幅度-100 -2000102030 频 率 /dB P1 =20405060701000幅度-100 -2000102030 频 率 /dB4050607024 图3.3 预测阶数对语音帧短时谱和LPC谱的影响从图中可以看出,P 越大,LPC 谱越能反映出语音短时谱的细节部分,但 LPC 谱的光 滑度随之下降。由于我们的目的只是用 LPC 谱反映声道综合效应的谱的表示式,而具体的 谐波形状是通过激励谱来控制的,因此 LPC 谱只要能够体现出语音的共振峰的结构和谱包 络就可以,因此从计算复杂性的角度分析,预测阶数 P 应该适中。 图 3.4 是原始语音和预测误差的倒谱波形,我们可以从中计算出原始语音的基音周期。 从图中看出两峰值之间的间隔为 40 点左右,基音周期为 40/ms,频率为 278Hz 左 右。原始语音帧倒谱 10/dB-1 -2 050100150 语音帧 预测误差倒谱20025030010/dB-1 -2 050100150 语音帧200250300图3.4 原始语音和预测误差的倒谱波形图 3.5 给出了原始语音的语谱图和预测语音的语谱图,通过比较发现,预测语音的预测 效果还可以,基音频率相差无几。原始语音语谱图 60Frequency40 20 00100200300400 500 600 Time 预测语音语谱图70080090060Frequency40 20 00100200300400 500 Time600700800900图3.5 原始语音的语谱图和预测语音的语谱图三、附录(LPC 分析参考程序) MusicSource = wavread('bei');25 Music_source = MusicSource'; N = 256; % window length,N = 100 -- 1000; Hamm = hamming(N); % create Hamming window frame = input('请键入想要处理的帧位置 = '); % origin is current frame origin = Music_source(((frame - 1) * (N / 2) + 1):((frame - 1) * (N / 2) + N)); Frame = origin .* Hamm'; % %Short Time Fourier Transform % [s1,f1,t1] = specgram(MusicSource,N,N/2,N); [Xs1,Ys1] = size(s1); for i = 1:Xs1 FTframe1(i) = s1(i,frame); end N1 = input('请键入预测器阶数 = '); % N1 is predictor's order [coef,gain] = lpc(Frame,N1); % LPC analysis using Levinson-Durbin recursion est_Frame = filter([0 -coef(2:end)],1,Frame); % estimate frame(LP) FFT_est = fft(est_Frame); err = Frame - est_F % error % FFT_err = fft(err); subplot(2,1,1),plot(1:N,Frame,1:N,est_Frame,'-r');title('原始语音帧vs.预测后语音帧') subplot(2,1,2),plot(err);title('误差'); pause %subplot(2,1,2),plot(f',20*log(abs(FTframe2)));title('短时谱') % % Gain solution using G^2 = Rn(0) - sum(ai*Rn(i)),i = 1,2,...,P % fLength(1 : 2 * N) = [origin,zeros(1,N)]; Xm = fft(fLength,2 * N); X = Xm .* conj(Xm); Y = fft(X , 2 * N); Rk = Y(1 : N); PART = sum(coef(2 : N1 + 1) .* Rk(1 : N1)); G = sqrt(sum(Frame.^2) - PART); A = (FTframe1 - FFT_est(1 : length(f1'))) ./ FTframe1 ; % inverse filter A(Z) subplot(2,1,1),plot(f1',20*log(abs(FTframe1)),f1',(20*log(abs(1 ./ A))),'-r');title('短时谱'); subplot(2,1,2),plot(f1',(20*log(abs(G ./ A))));title('LPC谱'); pause26 %plot(abs(ifft(FTframe1 ./ (G ./ A))));title('excited') %plot(f1',20*log(abs(FFT_est(1 : length(f1')) .* A / G ))); %pause % % find_pitch % temp = FTframe1 - FFT_est(1 : length(f1')); % not move higher frequnce pitch1 = log(abs(temp)); pLength = length(pitch1); result1 = ifft(pitch1,N); % move higher frequnce pitch1((pLength - 32) : pLength) = 0; result2 = ifft(pitch1,N); % direct do real cepstrum with err pitch = fftshift(rceps(err)); origin_pitch = fftshift(rceps(Frame)); subplot(211),plot(origin_pitch);title('原始语音帧倒谱(直接调用函数)'); subplot(212),plot(pitch);title('预测误差倒谱(直接调用函数)'); pause subplot(211),plot(1:length(result1),fftshift(real(result1)));title('预测误差倒谱(根据定义编 写,没有去除高频分量)'); subplot(212),plot(1:length(result2),fftshift(real(result2)));title('预测误差倒谱(根据定义编 写,去除高频分量)');27 实验四一、实验目的基于 VQ 的特定人孤立词语音识别研究矢量量化(Vector Quantization)是一种极其重要的信号压缩方法,是自 70 年代末才发 展起来的。它广泛应用于语音编码、语音识别与合成、图象压缩等领域。VQ 在语音信号处 理中占有十分重要的地位。 许多重要的研究课题中, 特别是低速语音编码和语音识别的研究 中,VQ 都起着非常重要的作用。 量化可以分为两大类:一类是标量量化,另一类是矢量量化。标量量化是将取样后的信 号值逐个地进行量化,而矢量量化是将若干个取样信号分成一组,即构成一个矢量,然后对 此矢量一次进行量化。当然,矢量量化压缩数据的同时也有信息的损失,但这仅取决于量化 的精度。矢量量化是标量量化的发展,可以说,凡是要用量化的地方都可以应用矢量量化。 本实验要求掌握矢量量化的原理,会利用已学的相关语音特征,构建语音特征矢量,然 后利用 VQ 技术,编写训练 VQ 码表的程序,并在此基础上利用所学的语音识别技术,编程 实现基于矢量量化的特定人孤立词语音识别, 要注意的是识别过程中语音端点如何检测, 从 识别的实时性角度出发,建议能利用 VC 技术实现。二、实验原理1 矢量量化 1)基本原理 矢量量化的过程是:将语音信号波形的 K 个样点的每一帧,或者有 K 个参数的每一参 数帧,构成 K 维空间中的一个矢量,然后对这个矢量进行量化。通常所说的标量量化,也 可以说是 K=1 的一维矢量量化。矢量量化的过程与标量量化相似。在标量量化时,在一维 的零至无大值之间设置若干个量化阶梯, 当某输入信号的幅度值落在某相邻的两个量化阶梯 之间时,就被量化为两阶梯的中心值。而在矢量量化时,将 K 维无限空间划为 M 个区域边 界, 然后将输入矢量与这些边界进行比较, 并被量化为“距离”最小的区域边界的中心矢量值。 2) 、失真测度 设计矢量量化器的关键是编码器的设计, 而译码器的工作仅是一个简单的查表过程。 在 编码的过程中, 需要引入失真测度的概念。 失真是将输入信号矢量用码书的重构矢量来表征 时的误差或所付出的代价。而这种代价的统计平均值(平均失真)描述了矢量量化器的工作 特性。 在矢量量化器的设计中,失真测度的选择是很重要的。失真测度选用的合适与否,直接 影响系统的性能。要使所选择的失真测度有实际意义,必须具备以下几个条件:在主观评价 上有意义,即最小的失真应该对应与好的主观语言质量;易于处理,即在数学上易于实现,28 这样可以用于实际的矢量量化器的设计;平均失真存在并且可以计算。 2 LBG 算法 算法是由 Linde,Buzo 和 Gray 在 1980 年首次提出的,常称为 LBG 算法。它是标量量 化器中 Lioyd 算法的多维推广。整个算法实际上就是反复迭代的过程,既用初始码书寻找最 佳码书的迭代过程。 它由对初始码书进行迭代优化开始, 一直到系统性能满足要求或者不再 有明显的改进为止。 这种算法既可以用于已知信号源概率分布的场合, 也可以用于未知信号源概率分布的场 合,但此时要知道它的一系列输出值(称为训练序列) 。由于通常语音信号的概率分布随着 各种应用场合的不同,不可能事先统计过,因而无法知道它的概率分布。所以目前多用训练 序列来设计码书和矢量量化器。 3 语音识别 语音识别是研究使机器能够准确地听出人的语音内容的问题,即准确的识别所说的语 音。 语音识别是近二三十几年发展起来的新兴学科, 在计算机、 信息处理、 通信与电子系统、 自动控制等领域中有着广泛的应用。 运用语音识别技术,人们设计了各种语音识别系统。有的已经应用于实际,有的还处在 研究阶段。其中对孤立词的识别,研究的最早也最成熟,目前,对孤立词的识别无论是小词 汇量还是大词汇量, 无论是与讲话者有关还是与讲话者无关, 在实验室中的正识率已经达到 95%以上。 这种系统存在的问题最少,因为单词之间有停顿,可以使识别问题简单化;且单词之间 的端点检测比较容易; 单词之间的协同发音影响也可以减至最低; 对孤立词的发音都比较认 真。由于此系统本身用途广泛,且其许多技术对其他类型系统有通用性并易于推广,所以稍 加补充一些知识就可用于其他类型系统 (如在识别部分加用适当语义信息等, 则可用于连续 语音识别中) 。采用矢量量化技术主要用于减少计算量,应用于特征处理可减少特征的类型 从而减少计算量,也可以推广应用到摸板的归并压缩。其主要工作就是聚类,即在特征空间 中合理的拟定一组点(称为一组聚类中心或码本) ,每个中心称为码字。于是特征空间中任 一点均可按最小距离准则用码本之一来代表。 不管用何种语音识别方法,主要过程由两部分组成,一是训练,一是识别。在进行训练 时,用观察的序列训练得到参考模型集,每一个模型对应于摸板中的一个单词。在进行识别 时,为每一个参考模型计算出产生测试观察的概率,且测试信号(即输入信号)按最大概率 被识别为某个单词。 要实现上面的隐马尔可夫模型, 模型的输入信号必须取自有限字母集中的离散序列, 也 就是说,必须将连续的语音信号变为有限离散的序列。例如若模型的输入信号为 LPC 参数 这样的矢量信号,那么用矢量量化完成上述的识别过程是非常合适的。下面是 VQ/HMM 孤 立单词识别的方框图。图中矢量量化器作为整个识别系统的一个前处理器。三、实验结果就算法模型方面而言,需要有进一步的突破。目前能看出它的一些明显不足,尤其在中文 语音识别方面,语言模型还有待完善,因为语言模型和声学模型正是听写识别的基础,这方面29 没有突破,语音识别的进展就只能是一句空话。目前使用的语言模型只是一种概率模型,还没 有用到以语言学为基础的文法模型,而要使计算机确实理解人类的语言,就必须在这一点上取 得进展,这是一个相当艰苦的工作。此外,随着硬件资源的不断发展,一些核心算法如特征提 取、搜索算法或者自适应算法将有可能进一步改进。可以相信,半导体和软件技术的共同进 步将为语音识别技术的基础性工作带来福音。 就强健性方面而言,语音识别技术需要能排除各种环境因素的影响。目前,对语音识别效 果影响最大的就是环境杂音或嗓音,在公共场合,你几乎不可能指望计算机能听懂你的话,来 自四面八方的声音让它茫然而不知所措。很显然这极大地限制了语音技术的应用范围,目前, 要在嘈杂环境中使用语音识别技术必须有特殊的抗嗓(NoiseCancellation)麦克风才能进行,这 对多数用户来说是不现实的。在公共场合中,个人能有意识地摒弃环境嗓音并从中获取自己 所需要的特定声音,如何让语音识别技术也能达成这一点呢?这的确是一个艰巨的任务。 以下是实验部分的截图:程序附录using S using System.Collections.G ponentM using System.D using System.D using System.T using System.Windows.F using SpeechL namespace WindowsApplication130 {public partial class Form1 : Form {private SpV //语音合成对象 private SpSharedRecoContext objRecoC //共享型上下文对象 private ISpeechRecoG //上下文语法对象添加成员函数 public void RecoContext_Recongnition(int StreamNumber, object StreamPosition, SpeechRecognitionType RecongitionType, ISpeechRecoResult Result) { textBox1.Text += Result.PhraseInfo.GetText(0, -1, true) + &&; //输出语音识别结果 } private void InitializeSpeech() {//语音识别初始化 objRecoContext = new SpSharedRecoContext();//初始化共享型上下文对象 objRecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(RecoContext_Recongnition);//为上下文 添加事件处理函数 grammar = objRecoContext.CreateGrammar(0);//创建语法器 grammar.DictationLoad(&&, SpeechLoadOption.SLOStatic);//装载语法规则 grammar.DictationSetState(SpeechLib.SpeechRuleState.SGDSActive);// 激 活 语 法 器 objRecoContext.State = SpeechRecoContextState.SRCS_D } public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {objRecoContext.State = SpeechRecoContextState.SRCS_D voice.Speak(textBox1.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync); } private void Form1_Load(object sender, EventArgs e) { voice = new SpVoiceClass(); this.InitializeSpeech(); } private void button2_Click(object sender, EventArgs e) {objRecoContext.State = SpeechRecoContextState.SRCS_E } private void button3_Click(object sender, EventArgs e) { objRecoContext.State = SpeechRecoContextState.SRCS_D } } }31
数字语音信号处理实验指导书(学生用)―汇集和整理大量word文档,专业文献,应用文书,考试资料,教学教材,办公文档,教程攻略,文档搜索下载下载,拥有海量中文文档库,关注高价值的实用信息,我们一直在努力,争取提供更多下载资源。

我要回帖

更多关于 数字信号处理 c语言 的文章

 

随机推荐