DSP课程设计语音信号

更新时间:2024-01-02 03:00:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

DSP 课 程 设 计

音 信 号 处 理

学院:

班级: 学号:

学生姓名:

摘要

语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。

数字信号处理(DigitalSignalProcessing,简称DSP)是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。[1]

Matlab语言是一种数据分析和处理功能十分强大的计算机应用软件,它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵运算能力处理数据,如数字滤波、傅里叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱为语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。信号处理是Matlab重要应用的领域之一。[2]

关键字:Matlab,语音信号,傅里叶变换,信号处理

目录

一、DSP相关知识介绍...................................................................................................................... 1 1.1数字信号处理(DSP)简介 .......................................................................................... 1 1.2 本文主要工作............................................................................................................... 1 二、语音信号的特点与采集............................................................................................................... 2

2.1 语音信号的特点 ........................................................................................................... 2 2.2语音信号的采集 ............................................................................................................ 2

三、 语音信号的分析......................................................................................................................... 6

3.1语音信号分析技术 ........................................................................................................ 6 3.2 语音信号的时域分析 ................................................................................................... 6

3.2.1 短时能量及短时平均幅度分析 ....................................................................... 7 3.2.2短时过零率分析 ................................................................................................ 7 3.3 语音信号的频域分析 ................................................................................................... 9 3.4 语音信号的语谱图 ....................................................................................................... 9

四、语音信号的综合仿真分析 ......................................................................................................... 12

4.1本文的仿真软件Matlab ............................................................................................. 12 4.2原始语音信号 .............................................................................................................. 12 4.3对语音信号进行调制 .................................................................................................. 13 4.4设计数字滤波器和画出频率响应 ................................................................................ 15 五、总 结 .......................................................................................................................................... 16 参 考 文 献 ...................................................................................................................................... 17

附录一: .................................................................................................................................... 18 附录二: .................................................................................................................................... 18 附录三: .................................................................................................................................... 18 附录四: .................................................................................................................................... 19

一、DSP相关知识介绍 1.1数字信号处理(DSP)简介

数字信号处理(DigitalSignalProcessing,简称

DSP)是一门涉及许多学科

而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。

数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。

数字信号处理是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。数字信号处理在理论上的发展推动了数字信号处理应用的发展。反过来,数字信号处理的应用又促进了数字信号处理理论的提高。而数字信号处理的实现则是理论和应用之间的桥梁。

数字信号处理是以众多学科为理论基础的,它所涉及的范围极其广泛。例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信理论、故障诊断等也密切相关。近来新兴的一些学科,如人工智能、模式识别、神经网络等,都与数字信号处理密不可分。可以说,数字信号处理是把许多经典的理论体系作为自己的理论基础,同时又使自己成为一系列新兴学科的理论基础。[3]

1.2 本文主要工作

本文简要介绍了语音信号采集与分析的发展史以及语音信号的特征、采集与分析方法,并通过PC机录制自己的一段声音,运用Matlab进行仿真分析,最后加入噪声进行滤波处理,比较滤波前后的变化。第2章主要介绍语音信号的特点与采集,仿真主要是验证奈奎斯特定理。第3章主要是对语音信号进行时域、频域上的分析,如短时功率谱,短时能量,短时平均过零率,语谱图分析等等。第4章是对语音信号的综合和分析,包括语音信号的调制、叠加和滤波。

1

二、语音信号的特点与采集

2.1 语音信号的特点

通过对大量语音信号的观察和分析发现,语音信号主要有下面两个特点: 1在频域内,语音信号的频谱分量主要集中在300~3400Hz的范围内。利用○

这个特点,可以用一个防混迭的带通滤波器将此范围内的语音信号频率分量取出,然后按8kHz的采样率对语音信号进行采样,就可以得到离散的语音信号。

2在时域内,语音信号具有“短时性”的特点,即在总体上,语音信号的特○

征是随着时间而变化的,但在一段较短的时间间隔内,语音信号保持平稳。在浊音段表现出周期信号的特征,在清音段表现出随机噪声的特征。

下面是一段语音信号的时域波形图(图2-1)和频域图(图2-2),由这两个图可以看出语音信号的两个特点。

0.60.450.40.350.40.20.300.250.20.15-0.2-0.40.1-0.60.050Frequency(Hz)

图2-1语音信号时域波形图 图2-2语音信号频域波形图

-0.800.511.522.5Time(s)33.544.5500.511.522.5x 104

2.2语音信号的采集

在将语音信号进行数字化前,必须先进行防混叠预滤波,预滤波的目的有两个:○1抑制输入信导各领域分量中频率超出fs/2的所有分量(fs为采样频率),以防止混叠干扰。○2抑制50Hz的电源工频干扰。这样,预滤波器必须是一个带通滤波器,设其上、下截止频率分别是fH和fL,则对于绝大多数语音编译码器,fH=3400Hz、fL=60~100Hz、采样率为fs=8kHz;而对丁语音识别而言,当用于电话用户时,指标与语音编译码器相同。当使用要求较高或很高的场合时fH=4500Hz或8000Hz、fL=60Hz、fs=10kHz或20kHz。

为了将原始模拟语音信号变为数字信号,必须经过采样和量化两个步骤,从

2

而得到时间和幅度上均为离散的数字语音信号。采样也称抽样,是信号在时间上的离散化,即按照一定时间间隔△t在模拟信号x(t)上逐点采取其瞬时值。采样时必须要注意满足奈奎斯特定理,即采样频率fs必须以高于受测信号的最高频率两倍以上的速度进行取样,才能正确地重建波形,它是通过采样脉冲和模拟信号相乘来实现的。下图时一段语音信号在采样频率44.1KHz情况下的频谱图。

原始信号0.40.20-0.2-0.4012345x 102001501005006400.511.522.5x 104

图2-3原始信号时域波形图和频域波形图

由图可知,这段语音信号的频率主要集中在1KHz左右,当采样频率为44.1KHz时,由于采样频率比较大,所以采样点数就越密,所得离散信号就越逼近于原信号,频谱也没有发生混叠。

3

抽取后的信号0.60.40.20-0.2012345x 1032.521.5105000100001500064

图2-4抽取后的信号时域波形图和频域波形图

对上述信号进行1/80采样频率抽取,即采样频率变为将近500Hz时,由于采样频率比较小,所以采样点数就稀疏,所得离散信号就越偏离于原信号,频谱也发生了混叠。

在采样的过程中应注意采样间隔的选择和信号混淆:对模拟信号采样首先要确定采样间隔。如何合理选择△t涉及到许多需要考虑的技术因素。根据采样定理,当采样频率大于信号的两倍带宽时,采样过程不会丢失信息,利用理想滤波器可从采样信号中不失真地重构原始信号波形。量化是对幅值进行离散化,即将振动幅值用二进制量化电平来表示。量化电平按级数变化,实际的振动值是连续的物理量。具体振动值用舍入法归到靠近的量化电平上。 [4]

语音信号经过预滤波和采样后,由A/D变换器变换为二进制数字码。这种防混叠滤波通常与模数转换器做在一个集成块内,因此目前来说,语音信号的数字化的质量还是有保证的。

在实际工作中,我们可以利用windows自带的录音机录制语音文件,图2-5是基于PC机的语音信号采集过程,声卡可以完成语音波形的A/D转换,获得WAVE文件,为后续的处理储备原材料。调节录音机保存界面的“更改”选项,可以存

4

储各种格式的WAVE文件。

声音 麦克风 声卡 滤波 采样 A/D转换 Wav Windows自带的录音机

图2-5基于PC机的语音信号采集过程

采集到语音信号之后,需要对语音信号进行分析,如语音信号的时域分析、频谱分析、语谱图分析以及加噪滤波等处理。[5]

5

语音信号的分析

三、 语音信号的分析

3.1语音信号分析技术

语音信号分析是语音信号处理的前提和基础,只有分析出可表示语音信号本质特征的参数,才有可能利用这些参数进行高效的语音通信、语音合成和语音识别等处理。语音合成的音质好坏,语音识别率的高低,也都取决于对语音信号分析的准确性和精确性。

贯穿于语音分析全过程的是“短时分析技术”。虽然语音信号具有时变特性,但是在一个短时间范围内(一般认为在10~30ms的短时间内),其特性基本保持不变即相对稳定,因而可以将其看作是一个准稳态过程,即语音信号具有短时平稳性。所以任何语音信号的分析和处理必须建立在“短时”的基础上.即进行“短时分析”,将语音信号分为一段一段来分析其特征参数,其中每一段称为一“帧”,帧长一般取为10~30ms。这样,对于整体的语音信号来讲,分析出的是由每一帧特征参数组成的特征参数时间序列。

根据所分析出的参数的性质的不同,可将语音信号分析分为时域分析、频域分析、倒频域分析等;时域分析方法具有简单、计算量小、物理意义明确等优点,但由于语音信号最重要的感知特性反映在功率谱中,而相位变化只起着很小的作用,所以相对于时域分析来说频域分析更为重要。本文将简要介绍时域分析、频域分析以及语谱图分析。

3.2 语音信号的时域分析

语音信号的时域分析就是分析和提取语音信号的时域参数。进行语音分析时,最先接触到并且也是最直观的是它的时域波形。语音信号本身就是时域信号,因而时域分析是最早使用,也是应用最广泛的一种分析方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析及应用,如语音的分割、预处理、大分类等。这种分析方法的特点是:○1表示语音信号比较直观、物理意义明确。○2实现起来比较简单、运算且少。○3可以得到语音的一些重要的参数。4只使用示波器等通用设备,使用较为简单等。 ○

语音信号的时域参数有短时能量、短时过零率、短时自相关函数和短时平均幅度差函数等,这是语音信号的一组最基本的短时参数,在各种语音信号数字处

6

语音信号的分析

理技术中都要应用。在计算这些参数时使用的一般是矩形窗或汉明窗。

3.2.1 短时能量及短时平均幅度分析

设语音波形时域信号为x(l)、加密分帧处理后得到的第n帧语音信号为 Xn(m),则Xn(m)满足下式:

xn(m)?w(m)x(n?m)(m) 0?m?N?1

, m?0~(N?1)w(m)?{10, m?其他值

其中,n=0,1T,2T,…,并且N为帧长,T为帧移长度。

设第n帧语音信号Xn(m)的短时能量用En表示,则其计算公式如下:

2En??xn(m)

m?0N?1En是一个度量语音信号幅度值变化的函数,但它有一个缺陷,即它对高电平非常敏感(因为它计算时用的是信号的平方)。为此可采用另一个度量语音信号幅度值变化的函数.即短时平均幅度函数Mn,它定义为:

Mn??xn(m)

m?0N?1Mn也是一帧语音信号能量大小的表征,它与En的区别在于计算时小取样值和大取样值不会因取平方而造成较大差异,在某些应用领域也会带来一些好处。

短时能量和短时平均幅度函数的主要用途有:①可以区分浊音段与清音段,因为浊音时En值比清音时大的多。②可以用来区分声母与韵母的分界,无声与有声的分界,连字(指字之间无间隙)的分界等。③作为一种超音段信息,用于语音识别中。

3.2.2短时过零率分析

短时过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。过零分析是语音时域分析中最简单的一种。对于连续语音信号,过零即意味着时域波形通过时间轴;而对于离散信号,如果相邻的取样值改变符号则称为过零。过零率就是样本改变符号的次数。定义语音信号Xn(m)的短时过零率Zn为:

1N?1Zn??sgn?xn(m)??sgn?xn(m?1)?

2m?0

7

语音信号的分析

式中,sgn[ ]是符号函数,即:

sgn?x???1,(x?0)?1,(x?0)

在实际中求过零率参数时,需要十分注意的一个问题是如果输入信号中包含有50Hz的工频干扰或者A/D变换器的工作点有偏移(这等效于输入信号有直流偏移),往往会使计算的过零率参数很不准确。为了解决前一个问题,A/D变换器前的防混叠带通滤波器的低端截频应高于50Hz,以有效地抑制电源干扰。对于后一个问题除了可以采用低直流漂移器件外,也可以在软件上加以解决,这就是算出每一帧的直流分量并予以滤除。

对语音信号进行分析,发现发浊音时,尽管声道有若干个共振峰,但由于声门波引起功率谱的高频跌落,所以其话音能量约集中在3kHz以下。而发清音时,多数能量出现在较高频率上。高频就意味着高的平均过零率,低频意味着低的平均过零率,所以可以认为浊音时具有较低的过零率,而清音时具有较高的过零率。当然,这种高低仅是相对而言,并没有精确的数值关系。

利用短时平均过零率还可以从背景噪声中找出语音信号,可用于判断寂静无声段和有声段的起点和终点位置。在孤立词的语音识别中,必须要在一连串连续的语音信号中进行适当分割,用以确定一个一个单词的语音信号,即找出每一个单词的开始和终止位置,这在语音处理中是一个基本问题。此时,在背景噪声较小时用平均能量识别较为有效,而在背景噪声较大时用平均过零率识别较为有效。但是研究表明,在以某些音为开始或结尾时。如当弱摩擦音(如[f]、[h]等音素),弱爆破音(如[p]、[t]、[k]等音素)为语音的开头或结尾;以鼻音(如[n]、[m]等音素)为语音的结尾时。只用其中一个参量来判别语音的起点和终点是有困难的,必须同时使用这两个参数。图3-1是用Mtalab仿真一段语音信号时域波形的短时能量和短时平均过零率。

8

语音信号的分析

10.5speech0-0.5-1500100015002000250030003500400040energy3020100510152025303540453020100zcr51015202530354045

图3-1语音信号的短时能量和短时平均过零率

3.3 语音信号的频域分析

语音信号的频域分析就是分析语音信号的频域持征。从广义上讲,语音信号的频域分析包括语音信号的频谱、功率谱、倒频谱、频谱包络分析等,而常用的频域分析方法有带通滤波器组法、傅里叶变换法、线性预测法等几种。本文介绍的是语音信号的傅里叶分析法。因为语音波是一个非平稳过程,因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能用来直接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱”。

3.4 语音信号的语谱图

语音的时域分析和频域分析是语音分析的两种重要方法。显然这两种单独分析的方法均有局限性:时域分析对语音信号的频率特性没有直观的了解;而频域分析出的特征中又没有语音信号随时间的变化关系;语音信号是时变信号,所以其频谱也是随时间变化的。但是由于语音信号随时间变化是很缓慢的,因而在一段短时间内(如10~30ms之间,即所谓的一帧之内)可以认为其频谱是固定不变的,这种频谱又称为短时谱。短时谱只能反映语音信号的静态频率特性,不能反映语音信号的动态频率特性。因此,人们致力于研究语音的时频分析特性。

把和时序相关的傅里叶分析的显示图形称为语谱图(Sonogram,或者Spectrogram)。语谱图是一种三维频谱,它是表示语音频谱随时间变化的图形,其纵轴为频率,横轴为时间,任一给定频率成分在给定时刻的强弱用相应点的灰

9

语音信号的分析

度或色调的浓淡来表示。用语谱图分析语音又称为语谱分析。语谱图中显示了大量的与语音的语句特性有关的信息,它综合了频谱图和时域波形的特点,明显地显示出语音频谱随时间的变化情况,或者说是一种动态的频谱;记录这种频谱的仪器就是语谱仪。

语谱仪实际上是一个带通滤波器组的输出随时间发生连续变化,连续重复进行语音信号频率分析的仪器。带通滤波器有两种带宽可供选择:窄带为45Hz,宽带为300Hz。窄带语谱图有良好的频率分辨率,有利于显示基音频率及其各次谐波,但它的时间分辨率较差,不利于观察共振峰(声道谐振)的变化;而宽带语谱图正相反,具有良好的时间分辨率及较差的频率分辨率。宽带语谱图能给出语音的共振峰频率及清辅音的能量汇集区,在语谱图里共振峰呈现为黑色的条纹。

可以利用语谱仪测量语谱图的方法来确定语音参数,例如共振峰频率及基音频率。语语图的实际应用是用于确定出讲话人的本性。语谱图上因其不同的黑白程度,形成了个同的纹路,称之为“声纹”,它因人而异,即不同讲话者语谱图的声纹是不同的。因而可以利用声纹鉴别不同的讲话人。这与不同的人有不同的指纹,根据指纹可以区别不同的人是一个道理。虽然对采用语谱图的讲活人识别技术的可靠性存在相当的怀疑,但目前这一技术已在司法法庭得到某些认可及采用。

10

语音信号的分析

0.05 0 -0.05 2.2

2.4

2.6

2.8

3

3.2

3.4

3.6

4 x 10

50 100 150 200 250 0

50

100

150

200

250

300

350

400

图3-3语谱图

图3-3是用Mtalab绘制的一个宽带语谱图,其中横抽坐标为时间,纵轴坐标为频率,语句内容为“语音信号处理”,它的发音在图下方以音标表示。同时给出了相应的语音的时域波形。语谱图中的花纹有横扛(Bar)、乱纹和竖直条等。横杠是与时间轴平行的几条深黑色带纹,它们相应于短时谱中的几个凸出点,也就是共振峰。从横扛对应的频率和宽度可以确定相应的共振峰频率和带宽。在一个语音段的语谱图中,有没有横扛出现是判断它是否是浊音的重要标志。竖直条(又叫冲直条)是语谱图中出现与时间轴垂直的一条窄黑条。每个竖直条相当于一个基音,条纹的起点相当于声门脉冲的起点,条纹之间的距离表示基音周期。条纹越密表示越音频率越高。[6]

11

语音信号的综合仿真分析

四、语音信号的综合仿真分析

4.1本文的仿真软件Matlab

MATLAB将矩阵运算、数值分析、图形处理、编程技术结合在一起,为用户提供了一个强有力的科学及工程问题的分析计算和程序设计工具,它还提供了专业水平的符号计算、文字处理、可视化建模仿真和实时控制等功能,是具有全部语言功能和特征的新一代软件开发平台。

MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连matlab开发工作界面接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。

4.2原始语音信号

录制一段自己的语音信号,并对录制的信号进行采样;画出采样后语音信号的时域波形和频谱图;

12

语音信号的综合仿真分析

%语音信号时域频域分析

[y,Fs,bits]=wavread('2.wav');%读出信号,采样率和采样位数 y=y(:,1);%我这里假设你的声音是双声道,我只取单声道作分析 sigLength=length(y);%算出y的长度

Y = fft(y,sigLength);%在sigLength这个有限区间内做快速傅立叶变换 Pyy = Y.* conj(Y) / sigLength; %Y乘Y的共轭,得到功率谱 halflength=floor(sigLength/2); %半宽度

f=Fs*(0:halflength)/sigLength; %采样频率的横坐标

figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)'); %在第一个窗口画率谱

t=(0:sigLength-1)/Fs; %计算时间轴

figure;plot(t,y);xlabel('Time(s)'); %在第二个窗口画波形

原始信号波形10.50-0.500.511.522.5x 105原始信号频谱500400300200100000.511.522.533.5x 1044

图4-1原始语音信号

由图可知这段语音信号频率主要集中在1000Hz左右。

4.3对语音信号进行调制

为了减少在传输时的耗损,人们一般是先对传输信号进行特殊处理,然后再传递。把原始的待传信号托附到高频振荡的过程称为调制。我们知道音频信号的频率在我们的听觉范围内,音频信号在无线传输的过程中会受到各种声音的干扰

13

语音信号的综合仿真分析

而产生能量消耗,因此限制了传输的距离,所以在现实的传送过程中要现对语音信号进行调制再发送出去。

若欲传送信号为xm(t)其振幅限制不可大于一

xm(t)?1 载波为 xc(t)?Acos(2?fct)

fc为载波中心频率,单位为赫兹。A是任意振幅。传送信号将会是

xc(t)?Acos2??f(?)d??Acos2???fc?f?xm(?)?d?

00?t??t?在此, f(t)?fc?f?xm(t)

公式中,f(t)是振荡器的瞬时频率,fΔ是频偏(频率偏移),代表在一个方向上相对fc的最大频率偏离,在此我们假定xm(t)是有限的幅值限于±1之间。

下面是对一段语音信号的调制仿真图,载波频率为fc=20000。

调制后信号波形10.50-0.5-100.511.522.5x 10调制后信号频谱4000300020001000000.511.522.533.5x 10445

图4-2调制后的语音信号

由图可知,经过调制后的语音信号频谱都搬移到fc=20000的频段。[7]

14

语音信号的综合仿真分析

4.4设计数字滤波器和画出频率响应

根据语音信号的特点给出有关滤波器的性能指标:

低通滤波器性能指标,fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB; 用双线性变换法设计的低通滤波器的程序如下: fp=1000;fc=1200;As=100;Ap=1;fs=22050; wc=2*fc/fs;wp=2*fp/fs; [n,wn]=ellipord(wp,wc,Ap,As); [b,a]=ellip(n,Ap,As,wn); freqz(b,a,512,fs); 滤波器的频率响应

50Magnitude (dB)0-50-100-1500200040006000Frequency (Hz)8000100000Phase (degrees)-200-400-600-800-10000200040006000Frequency (Hz)800010000 图4-3滤波器的频率响应

15

总结

五、总 结

通过这次课程设计,使我对语音信号有了全面的认识,对数字信号处理的知识又有了深刻的理解,在之前数字信号与处理的学习以及完成课后的作业的过程中,已经使用过MATLAB,对其有了一些基础的了解和认识。通过这次练习是我进一步了解了信号的产生、采样及频谱分析的方法。以及其中产生信号和绘制信号的基本命令和一些基础编程语言。让我感受到只有在了解课本知识的前提下,才能更好的应用这个工具;并且熟练的应用MATLAB也可以很好的加深我对课程的理解,方便我的思维。这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手实践能力。同时我相信,进一步加强对MATLAB的学习与研究对我今后的学习将会起到很大的帮助。

16

参 考 文 献

[1]胡航.语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2002. [2]丁玉美.高西全.数字信号处理[M].西安电子科技大学出版社,2006. [3]张威.MATLAB基础与编程入门[M].西安电子科技大学出版社,2006. [4]林福宗.多媒体技术基础[M].北京:清华大学出版社,2000.

[5]周渊,王炳和,刘斌胜.基于MATLAB的噪声信号采集和分析系统的设计[M].噪声控制.2004(7):52-54.

[6]hnson D E, Johnson J R, Moore H P.A Handbook of active filters[M].New Jersry,1980:1-72.

[7]Q.Zhang,A.BenvenisteWaveletNetworks [M].NeuralNetworks,2000. [8]韦晓东,等.应用倒谱特征的带噪语音端点检测方法[J].上海交通大学学报,2000,34(2):185—188.

[9]胡光锐,韦晓东.基于倒谱特征的带噪语音端点检测[J].电子学报.200028(10):95—97.

17

附录一:

%语音信号时域频域分析 [y,Fs,bits]=wavread('2.wav');%读出信号,采样率和采样位数。

y=y(:,1);%我这里假设你的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,请改成y=y(:,2)

sigLength=length(y); Y = fft(y,sigLength);

Pyy = Y.* conj(Y) / sigLength; halflength=floor(sigLength/2);

f=Fs*(0:halflength)/sigLength;

figure;plot(f,Pyy(1:halflength+1));xlabel('Frequency(Hz)');

t=(0:sigLength-1)/Fs; figure;plot(t,y);xlabel('Time(s)');

附录二: %抽取的源程序

[y,fs,bs]=wavread('d:\\01.wav',[25000,75000]);

y=y(:,1); lg=length(y); yx=(0:(lg-1))*fs/lg; yx=yx(1:lg/2); % sound(y,fs);

figure(1); subplot(211); plot(y);

title('原始信号'); subplot(212); yf=abs(fft(y)); yf=yf(1:lg/2); plot(yx,yf);

ycq=zeros(1,lg); %先将抽取后的值全设为零

for i=1:80:lg; %通过循环,每隔80个点将抽取后的值赋值为原函数的

ycq(i)=y(i); %采样值 end

sound(ycq,fs); figure(2); subplot(211); plot(ycq);

title('抽取后的信号'); subplot(212); ycqf=abs(fft(ycq)); ycqf=ycqf(1:lg/2); plot(yx,ycqf); 附录三:

语音信号的综合仿真分析程序: [y,fs,bits]=wavread('e:\\235.wav');

% sound(y,fs,bits);

Y=fft(y,40000);%采样点数40000

18

figure(1);

subplot(211);plot(y);title('原始信号波形');

subplot(212);plot(abs(Y));title('原始信号频谱');

fc=20000;%载波频率

y1=modulate(y,fc,fs,'fm');%对原语音信号调制

Y1=fft(y1,40000);%采样点数40000

figure(2);

subplot(211);plot(y1);title('调制后信号波形');

subplot(212);plot(abs(Y1));title('调制后信号频谱');

% sound(y1); y2=y+y1;

Y2=fft(y2,40000);%采样点数40000

figure(3);

subplot(211);plot(y2);title('调制信号+原始信号波形');

subplot(212);plot(abs(Y2));title('调制信号+原始信号频谱');

% sound(y2); figure(4);

fp=1000;fc=1200;As=100;Ap=1;fs1=22050;

wc=2*fc/fs1;wp=2*fp/fs1;

[n,wn]=ellipord(wp,wc,Ap,As); [b,a]=ellip(n,Ap,As,wn); freqz(b,a,512,fs1); x=filter(b,a,y2); X=fft(x,40000); figure(5);

subplot(211);plot(x);title('低通滤波后信号波形');

subplot(212);plot(abs(X));tit

le('低通滤波后信号频谱');

sound(x,40000); 附录四:

%短时能量,短时过零率 % function [x1,x2]=vad(x) [x,Fs,bits] = wavread('e:\\235.wav')

specgram(x,240,8000,80); x=double(x);

x=x/max(abs(x));%将幅度归一化到[-1,1]

framelen=240;

frameinc=80;%设定帧长为240帧移为80

amp1=10; amp2=2; zcr1=10; zcr2=5; maxsilence=3; minlen=15;

19

status=0; count=0; silence=0;

temp1=enframe(x(1:length(x)-1),framelen,frameinc);

temp2=enframe(x(2:length(x)),framelen,frameinc);

signs=(temp1.*temp2)<0; diffs=(temp1-temp2)>0.02; zcr=sum(signs.*diffs,2);%计算过零率

amp=sum(abs(enframe(x(1:length(x)-1),framelen,frameinc)),2); %计算短时能量

%调整能量门限

amp1=min(amp1,max(amp)/4); amp2=min(amp2,max(amp)/8); %开始零点检测

x1=0;x2=0;

for n=1:length(zcr); goto=0; switch status

case{0,1} %静音=0,1开始

if amp(n)>amp1 %确信进入语音阶段x1=max(n-count-1,1);

status=2; silence=0; count=count+1;

elseif

amp(n)>amp2|... %可能处在语音段 zcr(n)>zcr2

status=1; count=count+1;

else %静音状态 status=0; count=0; end

case 2, %2=语音段 if

amp(n)>amp2|...%保持在语音段 zcr(n)>zcr2; count=count+1;

else %语音将结束silence=silence+1;

if silence

elseif count

status=0;

silence=0; count=0; else status=3; end end

20

case 3,break; end end j=0;

for i=1:length(amp)-1; if(zcr(i)>0.02)&(zcr(i+1)<0.02)

j=j+1 jiesu1(j)=i; end end j=1

for i=1:length(jiesu1)-1 if((jiesu1(i+1)-jiesu1(i))>100)&jiesu1(i)~=1

jiesu(j)=jiesu1(i); j=j+1 end

end %找出每段语音结束点

j=1

for i=1:length(amp)-1; if ((zcr(i)<0.85)&zcr(i+1)>0.85)

kaishi1(j)=i+1 j=j+1; end end j=1 for i=1:length(kaishi1)-1 if((kaishi1(i+1)-kaishi1(i))>80)

kaishi(j)=kaishi1(i); j=j+1 end

end

count=count-silence/2; x2=x1+count-1; subplot(311) plot(x)

axis([1 length(x) -1 1]) ylabel('speech');

line([x1*frameincx1*frameinc],[-1,1],'color','red');

line([x2*frameincx2*frameinc],[-1,1],'color','red');

subplot(312) plot(amp);

axis([1 length(amp) 0 max(amp)])

ylabel('energy');

line([x1,x1],[min(amp),max(amp)],'color','red');

line ([x2

x2],[min(amp),max(amp)],'color','red');

subplot(313) plot(zcr); axis([1 length(zcr) 0 max(zcr)])

ylabel('zcr');

line([x1x1],[min(zcr),max(zcr)],'color','red');

line([x2

x2],[min(zcr),max(zcr)],'color','red');

21

本文来源:https://www.bwwdw.com/article/budx.html

Top