资源描述
DSP语音信号处理课程设计论文
目录
第一章 绪论 1
1.1语音信号处理技术简介 1
1.2 语音识别系统 1
1.3 语音识别的关键技术 2
第二章 MATLAB的GUI设计原理 4
2.1 MATLAB的GUI设计概述 4
2.2 语音信号处理工具箱GUI设计步骤 5
第三章 基于MATLAB的语音信号处理GUI设计 8
2.1 语音信号的短时分析 9
2.2 分析语音信号的短时谱特性 9
2.3 语音信号倒谱与复倒谱的分析 10
2.4 运用自相关方法估计语音信号的声道参数 11
2.5 基音周期检测 12
2.6 语音信号增强 14
2.7 语音信号端点检测 16
2.8基于MATLAB的语音信号工具箱GUI设计 17
第四章 总结与展望 18
附录 19
参考文献 25
24
第一章 绪论
1.1语音信号处理技术简介
语音信号处理是研究用数字信号处理技术和语音学知识对语音信号进行处理的新兴的学科,是目前发展最为迅速的信息科学研究领域的核心技术之一。通过语音传递信息是人类最重要、最有效、最常用和最方便的交换信息形式。同时,语言也是人与机器之间进行通信的重要工具,它是一种理想的人机通信方式,因而可为计算机、自动化系统等建立良好的人机交互环境,进一步推动计算机和其他智能机器的应用,提高社会的信息化和自动化程度。
语音信号处理是一门新兴的学科,同时又是综合性的多学科领域和涉及面很广的交叉学科。虽然从事这一领域研究的人员主要来自信号与信息处理及计算机应用等学科,但是它与语音学、语言学、声学、认知科学、生理学、心理学等许多学科也有非常密切的联系。
20世纪60年代中期形成的一系列数字信号处理的理论和算法,如数字滤波器、快速傅立叶变换(FFT)等是语音信号数字处理的理论和技术基础。随着信息科学技术的飞速发展,语音信号处理取得了重大的进展:进入70年代之后,提出了用于语音信号的信息压缩和特征提取的线性预测技术(LPC),并已成为语音信号处理最强有力的工具,广泛应用于语音信号的分析、合成及各个应用领域,以及用于输入语音与参考样本之间时间匹配的动态规划方法;80年代初一种新的基于聚类分析的高效数据压缩技术—矢量量化(VQ)应用于语音信号处理中;而用隐马尔可夫模型(HMM)描述语音信号过程的产生是80年代语音信号处理技术的重大发展,目前HMM已构成了现代语音识别研究的重要基石。近年来人工神经网络(ANN)的研究取得了迅速发展,语音信号处理的各项课题是促进其发展的重要动力之一,同时,它的许多成果也体现在有关语音信号处理的各项技术之中。
语音信号处理技术的应用极其广泛,涉及工业、军事、交通、医学、民用等各个领域,其中最重要的包括语音编码、语音合成、语音识别以及语音增强等。
1.2 语音识别系统
根据对说话人说话方式的要求,可分为孤立词语音识别系统,连接词语音识别系统和连续语音识别系统。
根据对说话人的依赖程度,可分为特定人语音识别系统和非特定人语音识别系统。根据词汇量大小,可分为小词汇量、中等词汇量、大词汇量及无限词汇量语音识别系统。
孤立单词识别系统,孤立单词指单词之间有停顿,这可使识别问题大为简化。因为单词的端点检测(即检测单词的起点和终点)比较容易,而且单词之间 协同发音影响可减至最低。此外,一般对孤立单词发音比较认真,由于单词之间必须有停顿,读起来就不能太流利。鉴于以上原因,孤立单词识别系统存在的问题最少,其许多技术可以用于单词挑选和连续语音识别系统。
连续语音识别系统有两个重要问题是孤立单词识别系统所没有的:
切分,即对单词之间边界位置的确定。因为语言中短语的数量太大,对整个短语进行识别显然是不可能的,必须把输入的语流切分为更小的组成部分。这就要求系统必须能够识别单词之间的边界。这一点比较困难,因为确定单词之间的边界位置没有现成的方法。
发音变化,即关联语言的发音比孤立单词发音更随便,受协同发音的影响更为严重。解决上述问题通常采用扩展动态时间规整技术。
语音理解一词出自美国远景研究计划局资助的一个庞大的连续语音识别研究项目,其目标称为语音理解系统。众所周知,只有人才能很好地识别语音,因为人对语音有广泛的知识,人对要说的话有预见性和感知分析能力,因此,指望机器对语言的识别能力超过人是不现实的,最好的办法是使机器也能“理解”语言,并且能象人一样运用这种理解力。由于在人工智能领域对知识的应用和知识的表示问题更加感性趣,这对语音识别来说无疑是有力地鼓舞。
运用这种理解力可以指望系统:
能排除噪声和嘈杂声(即含糊不清或无关的语言);
能理解上下文的意思并能用它来纠正错误,澄清不确定的语义;
能够处理不合语法或不完整的语句。由此看来,语音理解系统的主要问题是知识的表示和系统的组织问题。
与其它语音处理问题相比,该系统更加依赖于人工智能研究。
1.3 语音识别的关键技术
语音识别的关键技术包括特征参数提取技术、模式匹配准则及模型训练技术、语音识别单元选取。
特征参数提取技术:所谓特征参数提取,就是从语言信号中提取用于语音识别的有用信息。研究人员已对许多可以表征说话人个人特征的语音特征进行了探讨,大多数特征选取方案不是试图集中在声道构造的个体差异方面,就是试图集中在说话习惯的个人特征方面。
特征参数提取所考虑的参数为:
(1)单词中选定位置上的基音;
(2)鼻辅音的频谱特性;
(3)选定元音的频谱特性;
(4)激励频谱的估计斜率;
(5)擦音的频谱特性;
(6)选定元音的时长;
(7)选定语言环境中提前发声的存在。
采用试验句进行录音时所考虑的特征参数为:元音的共振峰频率和共振峰带宽以及声门源的极点(由12阶线性预测分析来计算);鼻辅音中极点频率的位置;选定实验句的基音轮廓;时变特性,尤其是在复合?音的整个发音期间和音位的收尾阶段第二共振峰的变化率。
线性预测分析是应用较广的特征参数提取技术,其核心是由信号的过去值预测其将来值。线性预测的概念早在本世纪40年代就已被提出,然而将其应用于语音识别,不仅希望利用其预测功能,而且要求它为我们提供一个非常好的声道模型,而这样的声道模型对于理论研究和实际应用都是相当有用的。此外,声道模型的优良性能不仅意味着线性预测是语音编码的特别合适的编码方法,而且意味着预测参数是语音识别的非常重要的信息来源。
模式匹配及模型训练技术:模式匹配是指根据一定准则,使未知模式与模型库中某一模型获得最佳匹配。模型训练是指按照一定准则,从大量已知模式中提取表示该模式特征的模型参数。语音识别所应用的模式匹配和模型训练技术有:动态时间规整技术、隐马尔克夫模型、人工神经网络。
ANN在语音识别中的应用是目前研究的热点。该网络本质上是一个自适应非线性动力学系统,模拟了人类大脑神经元活动的基本原理,具有学习、记忆判断、联想、对比、推理、概括等能力。与HMM和ANN相比,DTW是较早的一种模式匹配和模型训练技术,它应用动态规划法成功地解决了在语音信号特征参数序列比较时时长不等的难题,在孤立词语音识别中获得了良好的性能。但由于它不适合连续语音大词汇量语音识别系统,目前已被HMM和ANN所代替。
语音识别单元的选取是语音识别研究工作很重要的第一步,语音识别单元有单词、音节、音素三种,具体选哪种,由研究任务决定。单词单元适用于中小词汇语音识别系统,不适合于大词汇系统。因为庞大的模型库意味着繁重的模型训练任务和复杂的模型匹配算法,这难以满足实时性要求。音节单元多见于汉语识别,主要因为汉语是单音节结构的语言,而英语等语言是多音节。如果不考虑声调的话,汉语大约有400个音节,这个数量相对较少。所以,对于大词汇量汉语语音识别系统而言,以音节为识别单元是较为合适的。音素单元多用于英语语音识别研究,因为英语是多音节语言。
第二章 MATLAB的GUI设计原理
2.1 MATLAB的GUI设计概述
图形用户界面(Graphical User Interfaces ,GUI)则是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。
MATLAB 为表现其基本功能而设计的演示程序demo 是使用图形界面的最好范例。MATLAB的用户,在指令窗中运行demo 打开那图形界面后,只要用鼠标进行选择和点击,就可浏览那丰富多彩的内容。
用户图形界面(GUI)是程序的图形化界面。一个好的GUI 能够使程序更加容易的使用。
<br>提供用户一个常见的界面,还提供一些控件,例如,按钮,列表框,滑块,菜单等。用户图形
<br>界面应当是易理解且操作是可以预告的,所以当用户进行某一项操作,它知道如何去做。例如,
<br>当鼠标在一个按钮上发生了单击事件,用户图形界面初始化它的操作,并在按钮的标签上对这
<br>个操作进行描述。
<br>创建MATLAB 用户图形界面必须由三个基本元素:
<br>1. 组件. 在matlab GUI 中的每一个项目(按钮,标签,编辑框等)都是一个图形化组件.组件可
<br>分为三类:图形化控件(按钮,编辑框,列表,滚动条等),静态元素(窗口和文本字符串),菜单
<br>和坐标系. 图形化控件和静态元素由函数uicontrol 创建,菜单由函数uimenu 和
<br>uicontextmenu 创建,坐标系经常用于显示图形化数据,由函数axes 创建.
<br>2. 图象窗口(Figure)。GUI 的每一个组件都必须安排图象窗口中。以前,我们在画数据图
<br>象时,图象窗口会被自动创建。但我们还可以用函数figure 来创建空图象窗口,空图
<br>象窗口经常用于放置各种类型的组件。
<br>3. 回应。最后,如果用户用鼠标单击或用键盘键入一些信息,那么程序就要有相应的动
<br>作。鼠标单击或键入信息是一个事件,如果matlab 程序运行相应的函数,那么matlab
<br>函数肯定会有所反应。例如,如果用户单击一按钮,这个事件必然导致相应的matlab
<br>语句执行。这些相应的语句被称为回应。只要执行GUI 的单个图形组件,必须有一个回应。
2.2 语音信号处理工具箱GUI设计步骤
步骤一:创建AXES
图2-2创建AXES
步骤二创建PUSH BUTTON
图2-3创建PUSH BUTTON
步骤三:修改PUSH BUTTON属性
图2-4修改PUSH BUTTON属性(一)
图2-5修改PUSH BUTTON属性(二)
步骤四:保存GUI
图2-6保存GUI
步骤五:CALLBACK
图2-7 CALLBACK
步骤六:加载功能模块函数
图2-8加载功能模块函数
第三章 基于MATLAB的语音信号处理GUI设计
2.1 语音信号的短时分析
一定时宽的语音信号,其能量的大小随时间有明显的变化。其中清音段(以清音为主要成份的语音段),其能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上,可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。
所用语音信号文件名为3.wav
Matlab编程实验步骤:
1.新建M文件,扩展名为“.m”,编写程序;
2.选择File/Save命令,将文件保存在F盘中;
3.在Command Window窗中输入文件名,运行程序;
Matlab部分函数语法格式:
读wav文件: x=wavread(`filename`)
数组a及b中元素相乘: a.*b
创建图形窗口命令: figure
绘图函数: plot(x)
坐标轴: axis([xmin xmax ymin ymax])
坐标轴注解: xlabel(`…`) ylabel(`…`)
图例注解: legend( `…`)
一阶高通滤波器: y=filter([1-0.09375],1,x)
分帧函数: f=enframe(x,len,inc)
x为输入语音信号,len指定了帧长,inc指定帧移,函数返回为n×len的一个矩阵,每一行都是一帧数据。
基于MATLAB的语音信号的短时分析GUI设计如图3-1
图3-1 基于MATLAB的语音信号的短时分析GUI设计
2.2 分析语音信号的短时谱特性
周期性声门波可表示为:
u[n]= g[n]* p[n]
其中, g[n]是声门波的单周期的波形,p[n]是间隔为 P 的周期采样序列。当 u[n]通过线性非时变声道,且该声道的单位冲击响应为 h[n]时,声道输出为:
x[n]=h[n]*(g[n]*p[n])
为了观察一段语音,需要将声道输出乘以一个以时刻τ为中心的窗函数 w[n,τ],即得到:
x [n , τ] = w [n , τ]{ h [ n]*( g [n]* p [n ])}
这段语音信号的频域表达式为 :
即语音信号的谱包络为
语谱图就是显示时变频谱幅度特征的图形表达式为
语谱图分析语音又称语谱分析,与谱图中显示了大量的语音的语句特性有关的信息,它综合了频谱图和时域波形的优点,明显地显示出语音频谱随时间的变化情况。预铺土实际上是一种三维频谱,即同时在实践和频率上显示出语音的特性,或者说是一种动态的频谱。 窄带语谱图可以得到较好的频域分辨率(即以较窄的频域间隔观察频域上的正弦波成分),窗长通常为至少两个基音周期的“长窗” ;而宽带语谱图可以给出较好的时域分辨率(即以较窄的时域间隔观察时域波动),窗长为小于一个基音周期的“短窗” 。
程序应具有加窗(分帧)、计算、以及绘制曲线等功能。录入语音数据并进行处理。使用函数specgram_ex3p19.显示语谱图和语音波形。对比调用参数窗长20ms(200 点)、帧间隔1ms(10点)和参数窗长5ms(50 点)、帧间隔1ms (10点);再对比窗长>20ms 或小于 5ms, 以及帧间隔>1ms时的语谱图说明宽带语谱图、窄带语谱图与时频分辨率的关系及如何得到时频折中。
基于MATLAB的分析语音信号的短时谱特性GUI设计如图3-2
图3-2 基于MATLAB的分析语音信号的短时谱特性GUI设计
2.3 语音信号倒谱与复倒谱的分析
同态信号处理的基本原理:
设输入信号,将卷积性信号转化为加性信号。包括三部分,首先,
然后,
最后,
特征系统的逆变换。
首先对系统输出的加性信号进行Z变换,
得:
然后进行指数运算,得到的是乘积性信号
最后进行逆Z变换,得到卷积性的语音恢复信号
基于MATLAB的语音信号倒谱与复倒谱的分析GUI设计如图3-3
图3-3 基于MATLAB的语音信号倒谱与复倒谱的分析GUI设计
2.4 运用自相关方法估计语音信号的声道参数
由均方预测误差最小的得到正则方程
(4-1)
其中,
(4-2)
在最佳解时的误差为
(4-3)
在自相关法中式4-1,式4-3变为
(4-4)
(4-5)
由 式4-4 可列出方程组式4-6
(4-6)
解方程组 式4-6 求出线性预测系数,通过误差式4-5可求出增益G
(4-7)
基于MATLAB的运用自相关方法估计语音信号的声道参数GUI设计如图3-4
图3-4 基于MATLAB的运用自相关方法估计语音信号的声道参数GUI设计
2.5 基音周期检测
自相关检测原理
中心消波法检测原理
三电平中心消波法原理
基于MATLAB的基音周期检测GUI设计如图3-5
图3-5 基于MATLAB的基音周期检测GUI设计
2.6 语音信号增强
噪声来源于实际的应用环境,因而其特性变化很大。噪声可以是加性的,也可以是非加性的。对于非加性噪声,有些可以通过变换转变为加性噪声。例如,乘积性噪声或卷积性噪声可以通道同态变换而成为加性噪声。
(1)通过直接变换频谱可以消除噪声的周期性成分,这可以用数字信号处理的方法来实现。变换滤波器如图15-2(a)所示。信号要经过离散傅里叶变换(DFT),变换到频域,在领域进行处理,然后用反变换IDFT来重建语音信号。
图15-2(b)所示为频谱整形器,它可以是简单的一系列选通门。它可将噪声成分变换到零值,则反变换后的信号周期性干扰将被滤除。
(2)同态滤波法的关键部分具有非线性处理性质,它应用于语音识别中,着眼于将语音信息(基音、频谱)中的乘性噪声或干扰分离,或者将已减少了噪声、干扰的信息重新合成得到降噪时域信号再进行识别。
同态滤波法的原理框图如图15-5所示,在傅里叶变换所得到的复倒谱中基音信息明显地出现,故可将其经适当时窗再作平滑、滤波及博里叶变换得到降噪处理后的共振峰等。它们可作为识别用的特征。也可以令其与得到的音调信号合成以还原成降噪的语音信号,然后进入识别系统作其他的特址提取相识别。
基于MATLAB的语音信号增强GUI设计如图3-6
图3-6 基于MATLAB的语音信号增强GUI设计
2.7 语音信号端点检测
在独立词(字)语音识别系统中需正确判定每一个输入语音的起点和终点,利用短时平均幅度和短时过零率可以做到这一点。在背景噪声比较小的时候用平均能量来识别比较有效,在背景噪声比较大的时候用平均过零率来识别比较有效,但是通常情况是两个参数联合进行识别。
判别规则:
1、浊音的短时平均幅度最大,无声的短时平均幅度最小。
2、清音的短时过零率最大,无声居中,浊音的短时过零率最小
首先,可根据浊语音情况下短时平均幅度M的概率密度函数P(M/V)确定一个阈值参数MH, MH的值定得比较高。当一帧输入信号的M值超过MH时,就可以十分肯定该帧语音信号不是无声,而有相当大的可能性是浊音。
根据MH可判定输入语音中的前后两个点N1和N2, N1和N2之间肯定是语音段,但是语音的精确起点、终点还要在N1之前和N2之后仔细查找。为此在设置一个低阈值参数ML ,由N1向前找,当短时平均幅度M由大到小减至ML时可以确定点N1’ 。类似由N2向后找,可以确定N2’ 。在N1’和N2’之间仍能肯定是语音段。
由N1’向前和N2’向后继续用短时过零率Z进行搜索。根据无声情况下短时过零率Z的均值,设置一个参数Z0,如果由N1’向前搜索时Z始终大于Z0的3倍,则认为这些信号仍属于语音段,直至Z突然下降到低于3Z0值时,这时可以确定语音的精确起点(为了保证可靠,由N1’ 向前搜索时间不超过25ms)。对终点做同样的处理。采取这一算法的原因在于, N1’以前可能是一段清辅音段(如f,s),它的能量相当弱,依靠能量不可能把他们与无声段区别开,而他们的过零率明显高于无声,因而能用这个参数来精确的判断二者的分割点,也就是语音真正的起点。
基于MATLAB的语音信号端点检测GUI设计如图3-7
图3-7 基于MATLAB的语音信号端点检测GUI设计
3.8 基于MATLAB的语音信号处理工具箱GUI设计
基于MATLAB的语音信号处理工具箱GUI设计
图3-8 基于MATLAB的语音信号处理工具箱GUI设计
第四章 总结与展望
课程设计对于我们可不是一件简单的事情啊!可是当设计做出来了之后,那点累那点苦又算得了什么呢!看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。
通过这几周的实践锻炼了我们运用C语言编辑程序的能力,学到了比以前跟多的知识,虽然在实践中遇到一些棘手的问题,但是在老师细心的指导下,我们都顺利地完成了。这些天我们所取的成绩与老师的细心指导是密不可分的,在此我向老师表示真诚的感谢。
实践锻炼了我们独立思考的能力与独立解决问题的能力,积累了很多的实践经验。这对我们今后学习与工作都给与莫大的帮助。
这几周的学习,使我能独立完成系统的简单程序设计,并解决在程序调试中发现的问题,培养了我们的自学能力和分析解决问题的能力,也培养了我们的编程技巧,达到了理论和实践相结合的目的。实践使我对MATLAB软件产成了浓厚的兴趣,它加强了我的动手能力和实际编程能力,具有很强的应用性。
光书本的知识的确不行,还是要理论联系实践才行,只有大脑中有了经验,在碰到问题的时候才有许多解决的方案,然后才能去尝试,因此不断的练习是必要的.完成这个课程设计,我的自信一下子提高了,这次体验为以后的学习语音信号处理的相关知识打下基础,最后设计出自己想要的结果,这过程艰辛,但只要你持之以恒,就会有成功的可能!
附录
function varargout = untitled(varargin)
% UNTITLED M-file for untitled.fig
% UNTITLED, by itself, creates a new UNTITLED or raises the existing
% singleton*.
%
% H = UNTITLED returns the handle to a new UNTITLED or the handle to
% the existing singleton*.
%
% UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in UNTITLED.M with the given input arguments.
%
% UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before untitled_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to untitled_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help untitled
% Last Modified by GUIDE v2.5 02-Jul-2005 09:59:16
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled_OpeningFcn, ...
'gui_OutputFcn', @untitled_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to untitled (see VARARGIN)
% Choose default command line output for untitled
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
[x]=wavread('3.wav');
sound(x);
subplot(4,1,1);
plot(x);
axis([1 length(x) -1 1]);
ylabel('Speech');enhance=filter([1-0.9375],1,x);
FrameLen=240; FrameInc=80;yframe=enframe(x,FrameLen,FrameInc);
amp1=sum(abs(yframe),2);subplot(4,1,2);plot(amp1);
axis([1 length(amp1) 0 max(amp1)]);ylabel('Amp');legend('amp1=¡Æ©¦x©¦');
amp2=sum(abs(yframe.*yframe),2);subplot(4,1,3);plot(amp2);
axis([1 length(amp2) 0 max(amp2)]);ylabel('Energy');
tmp2=enframe(x(2:end),FrameLen,FrameInc);
signs=(tmp1.*tmp2)<0;diffs=(tmp1-tmp2)>0.02;
zcr=sum(signs.*diffs,2);subplot(4,1,4);plot(zcr);
axis([1 length(zcr) 0 max(zcr)]);ylabel('ZCR');legend('zcr');
function f=enframe(x,win,inc)
nx=length(x(:));nwin=length(win);
if (nwin == 1)len = win;
else
len = nwin;
end
if (nargin < 3)
inc = len;
end
nf = fix((nx-len+inc)/inc);f=zeros(nf,len);
indf= inc*(0:(nf-1)).';inds = (1:len);
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));if (nwin > 1)
w = win(:)';f = f .* w(ones(nf,1),:);
end
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
[our]=wavread('3.wav');
specgram_hw3p20(our,128,64,10000);
specgram_hw3p20(our,256,512,10000);
function [spec] = specgram_hw3p20(x, winlgh, frmlgh, sampling_rate);
% specgram_hw3p20(x, winlgh, frmlgh, sampling_rate)
%
% function to compute a spectrogram
%
% x = input waveform
% winlgh = window length in samples
% frmlgh = frame length in samples
% sampling_rate = samples/sec
% PARAMETERS
%sampling_rate = 10000; % sampling rate
lfft = 1024; % FFT length
lfft2 = lfft/2;
%winlgh = 200; % (128) window length (in samples)
%frmlgh = 10; % frame interval (in samples)
noverlap = winlgh - frmlgh;
% x = x(1:4500);
x = 2.0*x/max(abs(x));
etime = length(x)/sampling_rate;
%--------------------------------------------------------------------%
spec = abs(specgram(x, lfft, sampling_rate, winlgh, noverlap));
subplot(211);
plot((1:length(x))/sampling_rate,x)
xlabel('Time (s)');title('SPEECH');axis([0 etime -2.5 2.5]);grid;
subplot(212)imagesc(0:.010:etime, 0:1000:(sampling_rate/2),log10(abs(spec)));axis('xy')
xlabel('Time (ms)'),ylabel('Frequency (Hz)');
title('SPECTROGRAM');
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
clc; clear;tic,
[y,fs]=wavread('3.wav');L=length(y);
fw=y.*hamming(L);r=real(log(fft(fw,L)))
pfw=cceps(fw);rpfw=rceps(fw);z=rpfw(1:30);
p=pfw(31:L)logz=r
展开阅读全文