电科综合性大实验之基于DSP的语音处理实验指导书

更新时间:2024-05-07 05:43:01 阅读量: 综合文库 文档下载

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

电 科 综 合 性 大 实 验

——基于DSP的语音处理

电子信息科学与技术教研室

汪石农 张明艳 目 录

实验一、PROTEL99 SE软件环境的熟悉 .............................. 3 实验二、DSP最小系统电路图的绘制 ............................... 13 实验三、基于AD50的语音采集播放系统电路图的绘制................ 15 实验四、基于MATLAB语音信号的采集和分析........................ 17 实验五、基于MATLAB的语音量化实验.............................. 19 实验六、基于AD50的语音采集播放实验............................ 26 实验七、基于MATLAB语音信号滤波和频谱分析...................... 33 实验八、有限冲击响应滤波器(FIR)算法实验...................... 40 实验九、无限冲击响应滤波器(IIR)算法实验...................... 47 实验十、语音编码/解码(G711编码/解码器) ...................... 56

实验一、PROTEL99 SE软件环境的熟悉

一、实验目的

掌握和复习使用Protel99 SE设计和绘制原理图以及印制电路板的全过程 二、实验设备

计算机 Protel99 SE软件 三、实验步骤

(一)原理图设计和绘制

所谓电原理图编辑就是使用电子元器件的电气图形符号以及绘制电原理图所需的导线、总线等绘图工具来描述电路系统中各元器件之间的连接关系,所使用的是一种符号化、图形化的语言。

电原理图编辑器(SCH)的操作步骤: 1、设置SCH编辑器的工作参数(不是必须,可以采用系统缺省的参数工作)。 启动SCH编辑器后,当然可采用缺省的SCH环境参数编辑原理图。不过,在编辑、绘制原理图前,了解有关SCH编辑器工作环境、参数(如光标形状、大小,可视栅格形状、颜色,光标移动方式,屏幕刷新方式等)的设置方法,然后根据不同操作任务和个人习惯重新设置,操作起来也许会更方便、自然,工作效率也许会更高。

2、选择图纸幅面、标题栏式样、图纸放置方向等(也可以先采用缺省设置)。 在编辑原理图前,可先根据原理图复杂程度以及打印机或绘图机的最大打印幅面,选择图纸类型、尺寸以及标题栏式样等,操作过程如下:

单击“Design”菜单下的“Options?”(选择)命令;在弹出的对话框内,单击“Sheet Options”(纸张选项)标签,在如图所示的“Document Options”的文档设置窗内选择图纸类型、尺寸、底色等有关选项。

3、放大绘图区,直到绘图区呈现大小适中的栅格线为止。

设置了Protel99原理图编辑器的工作环境、图纸尺寸等参数后,就可以在当前图纸的工作区内绘制、编辑原理图。具体的原理图根据个人所选的题目不同而定。

不断单击主工具栏内的“放大工具”按钮(或按Page Up键),直到工作区内显示出大小适中的可视栅格线为止,然后即可进行原理图的绘制操作。

4、在工作区内放置元器件:先放置核心元件的电气图形符号,再放置电路中剩余元件的电气图形符号。

编辑原理图的第一步就是从元件电气图形库中找出所需元件的电气图形符号,并把它们逐一放到原理图编辑区内。具体操作过程如下:

1) 选择待放置元件所在的电气图形库作为当前使用的元件库。

2) 在元件电气图形库列表窗口内,找出并单击相应库文件,使它成为当前元件电气图形库。

3) 在元件列表内找出并单击所需的元件。 在放置元件操作过程中,一般优先安排原理图中核心元件的位置。一般在单片机构成的电路中,核心元件是单片机。因此,通过滚动元件列表窗内的上下滚动按钮,在元件列表窗口内找到并单击“AT89S52”元件。

4) 放置元件:单击元件列表窗口下的“Place”(放置)按钮,将AT89S52的电气图形符号拖到原理图编辑区内。

从元件库中拖出的元件,在单击鼠标左键前,一直处于激活状态,元件位置会随鼠标的移动而移动。移动鼠标,将元件移到编辑区内指定位置后,单击鼠标左键固定,然后再单击鼠标右键或Esc键退出放置状态,这样就完成了元件放置操作。

5、调整元件位置。

如果感到图中元件的位置、方向不合理,可通过如下方式调整:

方法一:将鼠标移到待调整的元件上,单击鼠标左键,选定目标元件,被选

定的元件的四周将出现一个虚线框。

方法二:将鼠标移到目标元件上,按下鼠标左键不放,然后直接移动鼠标(或通过空格、X、Y键也能迅速移动或调整元件的方向),当元件调整到位后,松开左键即可。

6、修改、调整元件的标号、型号及其字体大小、位置等。

可以通过如下方法修改元件的序号、封装形式、型号(或大小)等元件选项属性:

1) 在放置元件操作过程中修改

在放置元件操作过程中,单击 “Place”按钮将元件从元件图形库中拖出后,没有单击鼠标左键前,元件一直处于激活状态,这时按下键盘上的Tab键,即可调出元件属性设置窗,如图:

2) 激活后修改 将鼠标移到元件上,直接双击也可以调出元件选项属性设置窗。重新设定元件序号、型号(或大小)以及封装形式等选项参数后就OK。

7、连线、放置电气节点、网络标号以及I/O端口。

完成元件放置及位置调整操作后,就可以开始连线,放置电气节点、电源及地线符号等操作。在Protel99原理图编辑器中,原理图绘制工具,如导线、总线、总线分支、电气节点、网络标号等均集中存放在“画线”工具(Wiring Tools)中。

单击画线工具中的导线工具(注意在连线时一定要使用“Wiring Tools”工具中的导线),SCH编辑器即处于连线状态,将光标移到元件引脚的端点、导线的端点以及电气节点附近时,光标下将出现一个黑圆圈(表示电气节点所在位置)。

单击画线工具中“放置电气节点”工具,将光标移到“导线与导线”或“导线与元件引脚”的“T”形或“十”字交叉点上,单击鼠标左键即可放置表示导

线与导线(包括元件引脚)相连的电气节点。

Protel中可以通过网络标号(Net Label)来描述两条线段或线段与元件引脚,即两电气节点之间的连接关系。在导线或引脚端点放置两个相同的网络标号后,导线与导线(或元件引脚)之间就建立了电气连接关系。原理图中具有相同网络标号的电气节点均认为电气上相连,这样可以使用网络标号代替实际的连线。

8、放置电源及地线符号。

单击画线工具中的电源/地线工具,然后按下Tab键,调出电源/地线选项属性设置窗口。进入对应元件选项属性设置窗,然后单击“Pin Hidden”复选框,显示芯片隐藏的引脚,再单击“OK”按钮退出,这样也可以迅速了解到相应芯片的电源、地线引脚名称。

9、运行电气设计规则检查(ERC),找出原理图中可能存在的缺陷。 在编辑原理图过程中,对于只有少量分立元件的简单电路,通过浏览就能看出电路中存在的问题,但对于一个较复杂的电路设计项目,靠人工查找电路编辑过程中的错误就没那么容易了。所以要进行电气法测试的操作过程和结果:

1) 执行“Tools”菜单下的“ERC?”命令。 2) 在如图所示的对话框内,单击“测试项目”列表框内各选项前的复选框,允许或禁止相应的检测项,选择要测试的项目。

其中各测试项目及选项含义已注明在如图所示的窗口内,而“Net Identifier Scope”用于定义网络标号的作用范围,可以选择如下选项:

(3) 设置了检测项目后,单击“OK”按钮,Protel99原理图编辑器还会启动文本编辑器,显示检测报告文件(.ERC)内容。

10、加注释信息。

Protel中可以利用画图工具添加说明性图形和文字。画图工具,如直线(Line)、多边形(Polygon)、椭圆弧(Elliptical Arcs)、椭圆(Ellipses)、毕兹曲线(Bezier)等均存放在“画图”工具(Drawing Tools)栏内。

11、生成网络表文件(或直接执行PCB更新命令,自动产生一个同名的PCB文件)。

编辑原理图的最终目的是制作印制电路板,在Protel98及更低版本的电子线路CAD软件中,网络表文件(.net)是原理图编辑器SCH与印制板编辑器PCB之间连接的纽带。

在完成了电原理图的编辑、检查后,就可以通过执行“Design”菜单下的“Create Netlist?”命令从原理图中抽取网络表文件(.net),这是获得网络表文件最基本的方法。

1) 执行“Design”菜单下的“Create Netlist?”命令。

2) 在如图所示的“Netlist Creation”设置框内,指定网络表文件的输出格式、网络标号作用范围等选项后,单击“OK”按钮即可。

12、打印。

(二)印制电路板设计和绘制

1、原理图到印制板

印制板编辑、设计是电子设计自动化(EDA)最后的也是最关键的环节,换句话说,原理图编辑是印制板编辑、设计的前提和基础。对于同一电路系统来说,原理图中元器件电气连接与印制板中元器件连接关系应完全相同,只是原理图中的元件用“电气图形符号”表示,而印制板中的元件用“封装图”描述。可通过如下方法之一将原理图中元件的电气连接关系转化为印制板中元件的连接关系:

1) 通过“更新”方式生成PCB文件。

在Protel99SE原理图编辑状态下,执行“Design”菜单下的“Update

PCB?”(更新PCB)命令,生成或更新PCB文件,并把原理图中的元件封装图及电气连接关系数据传送到PCB文件中,原因是Protel99原理图文件(.sch)与印制板文件(.pcb)具有动态同步更新功能。

2) 通过“网络表”文件生成印制板文件。

在原理图编辑状态下,执行“Design”菜单下的“Create Netlist?”命令,生成含有原理图元件电气连接关系信息的网络表文件(.net),然后将网络文件装入PCB文件中。这是Protel98及更低版本环境下,原理图文件与印制板文件之间连接的纽带,Protel99依然保留这一功能。

根据印制板形状及大小,在禁止布线层(Keep Out Layer)内,用“导线”、“圆弧”等工具画出一个封闭的图形,作为印制电路板布线区。在设置布线区时,尺寸可以适当大一些,以方便手工调整元件布局操作,待完成元件布局后,再根据印制板标准尺寸系列、印制板安装位置,确定布线区的最终形状和尺寸。

2、设置工作层

执行“Design”菜单下的“Update PCB?”命令(或执行“File” 菜单下的“New?”命令)生成的PCB文件,仅自动打开了Top(元件面)、Bottom(焊锡面)、Keep Out(禁止布线层)、Mech1(机械层1)及Multi(多层重叠)。

执行“Design”菜单下的“Options”命令,并在弹出的“Document Options”(文档选项)窗内,单击“Layers”标签,在如图所示的窗口选择工作层。若是双面板,则只需选择信号层中的“Top”(顶层,即元件面)、“Bottom” (底层,即焊锡面),关闭中间信号层。

3、元件布局操作

对于一个元件数目多、连线复杂的印制板来说,全依靠手工方式完成元件布局耗时多,效果还不一定好(主要是连线未必最短),而采用“自动布局”方式,连线可能最短,但又未必满足电磁兼容要求,因此一般先按印制板元件布局规则,用手工方式放置好核心元件、输入/输出信号处理芯片、对干扰敏感元件以及发热量大的功率元件,然后再使用“自动布局”命令,放置剩余元件,最后再用手工方式对印制板上个别元件位置做进一步调整。总之,印制板元件布局对电路性能影响很大,绝对不能马虎。

元件布局原则:

1) 元件位置安排的一般原则。在PCB设计中,如果电路系统同时存在数字电路、模拟电路以及大电流电路,则必须分开布局,使各系统之间耦合达到最小。

2) 元件离印制板边框的最小距离必须大于2 mm,如果印制板安装空间允许,最好保留5~10 mm。

3) 元件放置方向。在印制板上,元件只能沿水平和垂直两个方向排列,否则不利于插

件。

4) 元件间距。对于中等密度印制板、小元件,如小功率电阻、电容、二极管、三极管等分立元件彼此的间距与插件、焊接工艺有关:当采用自动插件和波峰焊接工艺时,元件之间的最小距离可以取50~100 mil(即1.27~2.54 mm);而当采用手工插件或手工焊接时,元件间距要大一些,如取100 mil或以上,否则会因元件排列过于紧密,给插件、焊接操作带来不便。大尺寸元件,如集成电路芯片,元件间距一般为100~150 mil。对于高密度印制板,可适当减小元件间距。

5) 热敏元件要尽量远离大功率元件。

6) 电路板上重量较大的元件应尽量靠近印制电路板支撑点,使印制板电路板翘曲度降至最小。

7) 对于需要调节的元件,如电位器、微调电阻、可调电感等的安装位置应充分考虑整机结构要求:对于需要机外调节的元件,其安装位置与调节旋钮在机箱面板上的位置要一致;对于机内调节的元件,其放置位置以打开机盖后即可方便调节为原则。

8) 在布局时IC去耦电容要尽量靠近IC芯片的电源和地线引脚,否则滤波效果会变差。在数字电路中,为保证数字电路系统可靠工作,在每一数字集成电路芯片(包括门电路和抗干扰能力较差的CPU、RAM、ROM芯片)的电源和地之间均设置了IC去耦电容。

9) 时钟电路元件应尽量靠近CPU时钟引脚。数字电路,尤其是单片机控制系统中的时钟电路,最容易产生电磁辐射,干扰系统其他元器件。

4、布线及布线规则

布线过程包括设置自动布线参数、自动布线前的预处理、自动布线、手工修改四个环节。其中自动布线前的预处理是指利用布线规律,用手工或自动布线功能,优先放置有特殊要求的连线,如易受干扰的印制导线、承受大电流的电源线和地线等;在时钟电路下方放置填充区,避免自动布线时,其他信号线经过时钟电路的下方。

1)、设置自动布线规则

自动布线操作前,必须执行“Design”菜单下的“Rules?”命令,检查并修改有关布线规则,如走线宽度、线与线之间以及连线与焊盘之间的最小距离、平行走线最大长度、走线方向、敷铜与焊盘连接方式等是否满足要求,否则将采用缺省参数布线,但缺省设置难以满足各式各样印制电路板的布线要求。

2)、自动布线前的预处理 完成布线规则设置后,自动布线前应根据布线密度及不同面上的走线方向重新确定元件引脚焊盘的形状及尺寸。执行“更新”或“装入网络表”操作后,制板编辑区内所有元件的引脚焊盘均采用元件封装库文件中定义的焊盘形状,但未必合理。

3)、自动布线

经过以上处理后,就可以使用“Auto Route”菜单下的有关命令进行自动布线。这些命令包括“All”(对整个电路板自动布线)、“Net”(对一网络进行布线)、“Connection”(对某一连线进行布线)、“Component”(对某一元件进行布线)、“Area”(对某一区域进行布线)。在自动布线过程中,若发现异常,可执行该菜单下的“Stop”命令,停止布线;通过“Pause”命令暂停布线;通过“Restart”命令重新开始。

4)、手工修改

不论自动布线软件功能多么完善,自动布线生成的连线依然存在这样或那样的缺陷,如局部区域走线太密、过孔太多、连线拐弯多等,使布线显得很零乱、抗干扰性能变差。

5)、布线后的进一步处理

包括:设置泪滴焊盘及泪滴过孔、设置大面积填充区、调整丝印层上的元件标号、在丝印层上放置说明性文字。

6)、设计规则检查

完成了电路板设计后,打印前最好执行“Tools”菜单下的“Design Rule Check?”(设计规则检查)命令,检验自动布线及手工调整后是否违反了通过“Design”菜单下的“Rules?”命令设定的布线规则。

执行“Tools”菜单下的“Design Rule Check?”命令,在如图所示的检查选项设置窗内选择检查项目及检查结果报告文件名后,单击“Run DRC”按钮启动检查进程。

在布线过程中,必须遵循如下规律:

1) 印制导线转折点内角不能小于90?,一般选择135?或圆角;导线与焊盘、过孔的连

接处要圆滑,避免出现小尖角。

2) 导线与焊盘、过孔必须以45?或90?相连。

3) 在双面、多面印制板中,上下两层信号线的走线方向要相互垂直或斜交叉,尽量避免平行走线;对于数字、模拟混合系统来说,模拟信号走线和数字信号走线应分别位于不同面内,且走线方向垂直,以减少相互间的信号耦合。

4) 在数据总线间,可以加信号地线,来实现彼此的隔离;为了提高抗干扰能力,小信号线和模拟信号线应尽量靠近地线,远离大电流和电源线;数字信号既容易干扰小信号,又容易受大电流信号的干扰,布线时必须认真处理好数据总线的走线,必要时可加电磁屏蔽罩或屏蔽板。

5) 连线应尽可能短,尤其是电子管与场效应管栅极、晶体管基极以及高频回路。 6) 高压或大功率元件尽量与低压小功率元件分开布线,即彼此电源线、地线分开走线,以避免高压大功率元件通过电源线、地线的寄生电阻(或电感)干扰小元件。

7) 数字电路、模拟电路以及大电流电路的电源线、地线必须分开走线,最后再接到系统电源线、地线上,形成单点接地形式。

8) 在高频电路中必须严格限制平行走线的最大长度。

9) 在双面电路板中,由于没有地线层屏蔽,应尽量避免在时钟电路下方走线。例如,时钟电路在元件面连线时,信号线最好不要通过焊锡面的对应位置。解决方法是在自动布线前,在焊锡面内放置一个矩形填充区,然后将填充区接地。

10) 选择合理的连线方式。为了便于比较,图6-47给出了合理及不合理的连线方式。

5、打印输出

完成了印制板编辑后,就可以将设计结果打印出来存档或作为照相制版的底图。但打印效果与打印机种类及档次有关,只有喷墨打印机或激光打印机的输出效果达到照相制版要求;而针式打印机分辨率低,墨迹扩散严重,打印效果很差,如线条尺寸误差大,边缘模糊,不能用于照相制版。

实验二、DSP最小系统电路图的绘制

一、实验目的

根据给定的内容,完成相应原理图及印制电路板的绘制,为后面综合性大实验作前期准备。 二、实验设备

计算机 Protel99 SE软件 三、实验要求

完成以DSP TMS320VC5402为主控CPU的最小系统原理图及电路板的绘制。要求根据给定的电路图,查阅资料,了解电路完成的具体功能,要能读懂和理解电路图中的各个模块;要求独立完成从电路图和PCB的整个设计过程。

附录:参考电路图

12345678VDDVDD+5V3VCC+5U31.8VGNDJ2E4100u1234C140.1U1E3470uR6510L40C60.1uFC70.1uFC80.1uFC90.1uFC100.1uFC110.1uFC120.1uFC130.1uF+52VinDPOWERC40.1UDVCCVDDVCC2U43.3VVinVout3VCCGND14252166285191754335162113034134405057707690361111128777879605449474442U1VC5402H/TOUTTOUT0CLKOUT518294E7100uC50.1U1CVDDCVDDCVDDCVDDCVDDCVDDDVDDDVDDDVDDDVDDDVDDDVDDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDGNDB1BFDSXXBCLKX11CLKMD1CLKMD2CLKMD3B1BFDSRRBCLKR1122PC320MCR222PC2CU2CIN/X2X19796IS61LV6416CBCLKR0BFSR0BDR0BCLKX0BFSX0BDX0414345485359A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15JTAGIDC14VCC44434227262524212019185432122TRSTTCKTMSTDITDOEMU0EMU1135791113TMSTDIVCCTDOTRETTCKEM0A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15NCD0D1D2D3D4D5D6D7D8D9D10D11D12D13D14D1578910131415162930313235363738D0D1D2D3D4D5D6D7D8D9D10D11D12D13D14D15D0D1D2D3D4D5D6D7D8D9D10D11D12D13D14D1599100101102103104113114115116117118119121122123D0D1D2D3D4D5D6D7D8D9D10D11D12D13D14D152328NCNC4039WECEOE17R/W6RAMCS41UBLBVCC3311VCCVCCGNDGND1234TRSTTCKTMSTDITDOEMU0EMU1/O87888986858384TRSTGNDNCGNDGNDGNDEM12468101214A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15READYPSDSISR/WIOSTRBMSTRB192021222325243028HOLDHOLDAMSCIAQ2629R/WRAMCSVCCR310kVCCR410kB12143144NCNCNCNC13113213313413613713813914014157891011105107108109A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15A16A17A18A19BXIFOBIACKNMINTI0INT1INT2INT3MSPT/MCRHD0HD1HD2HD3HD4HD5HD6HHCDN7TL0HCNTL1HBILHDCSS1HHDS2HRA/SWHHPIENAHRDY273161636465666798321318559258698190512124135639466217712129VCCLA0VCC10KR2R510k510J1CON2+5R121RSTAC10.1uS1SW-PBRSTVCC353637387172737490011126121580NCNCNCNCNCNCNCNCNCNCNCNCNCNCATitleSizeA3Date:File:3456NumberRevision2-Dec-2009 Sheet of C:\\Documents and Settings\\wang\\桌面\\dsDp.rDaDwBn By:7812 实验三、基于AD50的语音采集播放系统电路图的绘制

一、实验目的

根据给定的内容,完成相应原理图及印制电路板的绘制,为后面综合性大实验作前期准备。 二、实验设备

计算机 Protel99 SE软件 三、实验要求

完成以AD、DA芯片TLC320AD50为核心的语音采集播放系统原理图及电路板的绘制。要求根据给定的电路图,查阅资料,了解电路完成的具体功能,要能读懂和理解电路图中的各个模块;要求独立完成从电路图和PCB的整个设计过程。

附录:参考电路图

1J1CON1J2CON1J3CON1J4CON1J5CON12341111DOUTDINFCSCLKC2R9100KR11100KC3100pF100pF+5R12KCT3+124+VMID1uFMICROPHONEVMIDLM358R5VMID51.1KLM358R1210K53100K71R106R62U1B10KU1AC40.1uFFSD1DINPR25.11K+5C10.1uFR45.11K8+CT12uFC2K+CT22uF-12R3C5C130.001uF0.1uFINMC+5VC70.1uFU3CT4C110.1uF+5100R16R710K3.3VC120.1uFOUTC150.01uFFSSCLKMCLKFCC90.1uFBU2OUTR13C620KC140.047uF330uFSPEAKERC80.1uF1234GAINBYPASSVSVOUT0.1uFGAININPUT-INPUT+GND8765BLM386R141KR1510+C1010.1uF234INP5INM678910DOUT11DIN121314REFPREFMAUXPAUXMINPINMAVDD(PLL)AVSS(PLL)DVDDDVSSDOUTDINFLAGALTDATATLC320AD50CFILTMONOUTAVSSAVDDOUTMOUTPM/SFSDFSSCLKMCLKFCPWRDWNRESET2827262524232221201918171615R810K3.3VATitleASizeA4Date:File:2-Dec-2009 Sheet of C:\\Documents and Settings\\wang\\桌面\\dsDp.rDaDwBn By:NumberRevision1234实验四、基于MATLAB语音信号的采集和分析

一、实验目的

1、掌握语音信号的时域、频域基本特性 2、掌握MATLAB语音信号处理的基本方法 二、实验设备

计算机(附话筒和耳机) MATLAB6.5版本以上软件 三、实验要求

利用MATLAB对语音信号进行采集和分析。要求学生采集语音信号后,在MATLAB软件平台上画出信号的时域波形图,然后进行频谱分析;按照给定的信噪比对所采集的语音信号加入各种干扰噪声,再对加入噪声的信号画出时域波形图,然后再进行频谱分析。 四、实验步骤

1、理论依据

根据实验要求分析系统功能,掌握实验中所需理论(采样频率、采样位数的概念,采样定理; 时域信号的FFT分析;语音信号的短时分析),阐明设计原理。

MATLAB本身提供了一定的音频处理能力,主要包括表中的6个函数。

函数名 功能描述 wavread 读wav文件 wavwrite 写wav文件 sound 放音 soundsc 归一化放音 wavplay 放音 wavrecord 录音 2、信号采集 wavrecord()可以通过Windows的音频设备实现录音功能,它的语法是:wavrecord(n, fs, ch, dtye)。这里n为采样的点数,它决定了录音的长度。fs为采样频率,默认值为11025,即以11025Hz进行采样。ch为通道数,默认为1,如果指定为2,则采样为双声道立体声数据,该参数可以省略。Dtype为采样数据的存储格式,用字符串指定,可以是:‘double’、‘single’、‘intl6’、‘int8’。 以下程序实现以8000Hz的采样频率录制5秒的音频数据,然后通过soundview()函数回放。

Fs=8000;

y=wavrecord(5*Fs,Fs,'int16'); wavplay(y,Fs); soundview(y,Fs);

3、显示语音信号时域波形并进行频谱分析

对所采集的语音信号,运用matlab软件显示其时域波形,并对其进行FFT频谱分析,将分析的结果与上课的内容结合理解,加深印象。

4、给定的信噪比对所采集的语音信号加入各种干扰噪声

按照一定的信噪比,对所采集的语音信号加入各种干扰噪声,对语音信号进行回放,感觉加噪前后声音的变化,分析原因,得出结论。

5、显示加噪语音信号波形并进行频谱分析

对加噪语音信号进行FFT频谱分析,比较加噪前后语音信号的波形及频谱,对所得结果进行分析,阐明原因,得出结论。

附录:

(1)时域波形绘制

function []=speechplot()

[x1,fs]=wavread('3.wav'); %读取\语音信号的数据,赋给变量x1 sound(x1,fs); %播放语音信号

plot(x1) %做原始语音信号的时域图形 title('原始语音信号'); xlabel('时间'); ylabel('幅值'); (2)简单的频谱分析

function []=speechspec() [x fs]=wavread('2.wav'); plot(x);

x=x(18001:19024); sound(x); N=1024; y=fft(x,N); magy=abs(y);

f=(0:length(y))*fs/length(y); figure(2);

plot(f(1:N/2),magy(1:N/2));

xlabel('频率(Hz)');ylabel('幅值'); title('N=1024');

(3)按给定的信噪比加噪声 function []=addnoise()

[y,Fs,bits] = wavread('3.WAV'); %读取语音 sound(y,Fs);

SNR=0; %设定信噪比

[noise,Fs,bits] = wavread('F:\\我的文档\\我的文档\\大实验\\09~10\\声音文件\\噪声\\f16.wav'); %读取噪声 Ns = length(y);

noise=noise(2000:Ns+1999); energyX=sum(y.^2);

energyNoise=sum(noise.^2);

noiseAmp=sqrt(energyX/energyNoise*10^(-SNR/10)); x=y+noiseAmp*noise; sound(x,Fs);

实验五、基于MATLAB的语音量化实验

一、实验目的

1、掌握语音信号均匀量化的理论及相关实验验证 2、理解量化误差的特性及其对声音质量的影响 3、掌握μ律压扩原理及相关实验验证 二、实验设备

计算机(附话筒和耳机) MATLAB6.5版本以上软件 三、实验原理

语音波形的抽样和量化(或A/D转换)在数字语音处理中很重要,因为它是任何数字语音处理系统的第一步,并且语音处理的基本问题之一是为数字传输或存储对语音信号所进行的数字编码问题。信号的抽样和量化通常用图1形式的系统实现。在用硬件实现时,抽样保持电路对连续时间信号输入进行抽样并在抽样周期T之内保持其数字不变。这样在A/D转换器的输入端给定一个常数信号,A/D的目的是要确定信号的哪个量化电平最接近输入样本值。每隔T秒,A/D转换器发出与那个量化电平对应的一个数字码。正常地,此数字码按照一个诸如补码的方便的二进制数字系统进行分配,这样二进制数字可以作为这些样本值的数字表示。

Xc(t)抽样与保持Xo(t)A/D转换器?[n]?Q[X(nT)]Xc图1 语音信号抽样和量化的硬件描述表示

四、实验步骤

1、语音特性

语音文件s1.mat~s5.mat是以每秒8000个样本的抽样速率进行抽样的,并且最初量化到12bit。接着,把这些样本乘上16从而提高振幅电平使其刚好在32767之下(即一个16bit的整数的最大值)。因此,这些文件被当做是16bit抽样的12bit抽样,在这里这样做,一般不会产生问题。

(1)入文件s5.mat并产生一个自样本1200开始、长为8000个样本的向量。把这些样本数字除以32768以使所有样本的数值小于1。

>>load s5.mat

>>x=s5(1200:9199)/32768; >>plot(x) (2)统计分析

根据文件s5.mat计算8000个样本的最小值、最大值、平均值和均方值。使用matlab的hist()函数绘出8000个样本的直方图。对直方图的数目和位置进行实验以获得有用的图。直方图应显示:在语音波形中,小样本比大样本更有可能出现。这是否与在波形图中所看到的相一致?可以查找相关文献中有关语音振幅分布的连续概率密度函数模型的讨论。

>> hist(x); (3)谱分析

使用提供的welch()函数,用来自文件s5.mat的8000个样本,计算语音的长时间平均功率谱的估计。以dB为单位绘出谱图,恰当地标记频率坐标轴。

>> welch(x, 1024, 1024, 'r', 1)

2、均匀量化

在量化器中,输入样本被舍入到最接近的量化电平,并且对分布于区间

?Xm??/2?x?Xm??/2以外的样本,输出饱和。在讨论量化效应时,对量化误差做如下定义是有用的

?[n]?x[n] e[n]?x对均匀量化来说,量化误差样本满足??/2?e[n]??/2。此外,语音是一个复杂的信号,它在不同的量化电平之间快速的波动变化,而且如果Δ足够小,信

号的振幅可能在一个抽样时间内跨越许多量化步长。在这些条件之下,会发现该量化误差序列可以用下面的模型很好地描述:

①误差序列e[n]与非量化的序列x[n]不相关。

②误差序列有白噪声的特性,即它有一个平直的功率谱,并且误差样本彼此不相关。

③误差样本的概率分布在量化误差振幅的范围上是均匀的。 (1)使用提供的fxquant()函数量化来自文件s5.mat的8000个输入语音样本。利用舍入和饱和,量化bit数分别取10bit、8bit、4bit,绘出量化后的波形,并用wavwrite()函数写到WAV文件,并倾听量化后的声音。

>> x1=fxquant(x,4,'round','sat');

(2)计算10bit、8bit、4bit量化的量化误差序列。使用plot()绘出这些误差序列,并用wavwrite()函数写到WAV文件,并倾听这些量化噪声。在它们之间有什么重要的不同?看上去它们是否适合白噪声模型?绘出量化噪声样本的直方图。它们是否适合振幅均匀分布模型?

>> En=x1-x;

>> plot(En); >> hist(En);

(3)使用welch()函数计算10bit、8bit、4bit量化的量化噪声序列功率谱。这些噪声频谱是否支持白噪声假设?10bit量化的噪声与8bit量化的噪声谱之间以dB为单位的差大约是多少?

>> welch(En, 1024, 1024, 'r', 1); 3、μ律压扩

均匀量化的问题之一是:无论样本是大是小,它们量化误差的最大数值都相同。对于一个粗糙的滤波器,低电平的摩擦音与其他声音可能完全消失,因为它们的幅值小于最小步长。μ律压扩是获得与样本的大小实际成比例的量化误差的一种方法。

μ律量化器x[n]μ律压缩y[n]均匀量化器?[n]yμ律扩展?[n]x

该μ律压扩器由下面的方程式定义

log[1??y[n]?Xmaxx[n]Xmax?sign(x[n])

log(1??)]给出的mulaw1()函数是最大数值假设为Xmax=1的信号向量上实现该μ律压扩器。

(1)为实现上图的系统,必须为逆μ律压扩器编写一个M文件。这个M文件应有下面的调用顺序和参数

Function x=mulawinv(y,mu)

(2)实现一个6bit的μ律量化器,即压缩的样本用6个bit表示,考察相应的量化误差,并用wavwrite()函数写到WAV文件,倾听量化后的声音。

>> y=mulaw1(x,255);

>> yh=fxquant(y,6,'round','sat'); 4、信噪比

比较量化器的一个方便方法是计算信号功率与量化噪声功率的比值。对于matlab的实验,SNR的一个方便定义是

SNR?10log(L?1n?0)

?[n]?x[n])2?(xn?0?(x[n])L?12 (1)使用提供的snr()函数各个bit下均匀量化的SNR,计算出的结果是否

与预计的数量不同?

>> [snratio E]=snr(x1,x);

(2)均匀量化和μ律量化的比较

给出的qplot()函数对一个固定量化器的均匀量化与μ律量化进行比较,而该固定量化器以减小的振幅(以因子2减小)作为输入。

绘出的图应表明,μ律量化器在约64 :1的输入幅度范围上保持一个常数信噪比。均匀量化器需要多少个比特数以在相同的区间上至少维持与6bit的μ律量化器相同的信噪比?

>> qplot(x,6,255,7);

附录: (1)

function [P, c] = welch(x, N, M, wintype, nplot) %WELCH Power Spectrum Estimation by Welch's method %-----

% Usage: [P,c] = welch(x,N,M,wintype,nplot) %

% P : power spectrum by Welch's method

% c : correlation function = inverse of Welch power spectrum % x : input signal vector % N : FFT length % M : window length

% wintype = 'r' for rectangular

% otherwise, Hamming window is used

% nplot = omitting this argument suppresses plotting

%--------------------------------------------------------------- % copyright 1994, by C.S. Burrus, J.H. McClellan, A.V. Oppenheim, % T.W. Parks, R.W. Schafer, & H.W. Schussler. For use with the book % \% (Prentice-Hall, 1994).

%---------------------------------------------------------------

x = x(:);

if(wintype=='r') w = ones(M,1); else

w = hamming(M); end

K = fix((length(x)-M/2)/(M/2)); KLU = K*sum(w.^2); P = zeros(N,1); for i=1:K

ibeg = (M/2)*(i-1) + 1;

X = fft(x(ibeg:ibeg+M-1).*w, N); P = P + abs(X).^2; end

P = P/KLU; c = ifft(P);

c = real(c(1:M/2)); P = P(1:N/2+1); if( nargin==5 )

plot((0:N/2)/(N/2),P)

axis([0 1 0 max(P)]) %<-- version 4.0

title(['Welch Power Spectrum: Window length=',... num2str(M), ' Number sections=', num2str(K)]) xlabel('FREQUENCY (omega/pi)') pause %---

plot((0:N/2)/(N/2),10*log10(P))

title(['Welch Log Power Spectrum: Window length=',... num2str(M), ' Number sections=', num2str(K)]) xlabel('FREQUENCY (omega/pi)') pause %---

stem(0:M/2-1, c) %<-- version 4.0

title(['Welch Correlation Function: Window length=',... num2str(M), ' Number sections=', num2str(K)]) xlabel('LAG INDEX') end (2)

function X = fxquant( s, bit, rmode, lmode ) %FXQUANT simulated fixed-point arithmetic %-------

% Usage: X = fxquant( S, BIT, RMODE, LMODE ) %

% returns the input signal S reduced to a word-length

% of BIT bits and limited to the range [-1,1). The type of % word-length reduction and limitation may be chosen with % RMODE: 'round' rounding to nearest level % 'trunc' 2's complement truncation % 'magn' magnitude truncation % LMODE: 'sat' saturation limiter

% 'overfl' 2's complement overflow % 'triang' triangle limiter % 'none' no limiter

%--------------------------------------------------------------- % copyright 1994, by C.S. Burrus, J.H. McClellan, A.V. Oppenheim, % T.W. Parks, R.W. Schafer, & H.W. Schussler. For use with the book % \% (Prentice-Hall, 1994).

%---------------------------------------------------------------

if nargin ~= 4;

error('usage: fxquant( S, BIT, RMODE, LMODE ).'); end;

if bit <= 0 | abs(rem(bit,1)) > eps;

error('wordlength must be positive integer.'); end;

Plus1 = 2^(bit-1);

X = s * Plus1;

if strcmp(rmode, 'round'); X = round(X); elseif strcmp(rmode, 'trunc'); X = floor(X); elseif strcmp(rmode, 'ceil'); X = ceil(X); elseif strcmp(rmode, 'magn'); X = fix(X);

else error('unknown wordlength reduction spec.'); end;

if strcmp(lmode, 'sat'); X = min(Plus1 - 1,X); X = max(-Plus1,X);

elseif strcmp(lmode, 'overfl');

X = X + Plus1 * ( 1 - 2*floor((min(min(X),0))/2/Plus1) ); X = rem(X,2*Plus1) - Plus1; elseif strcmp(lmode, 'triang');

X = X + Plus1 * ( 1 - 2*floor((min(min(X),0))/2/Plus1) ); X = rem(X,4*Plus1) - Plus1; f = find(X > Plus1); X(f) = 2*Plus1 - X(f); f = find(X == Plus1); X(f) = X(f) - 1;

elseif strcmp(lmode, 'none'); % limiter switched off else error('unknown limiter spec.'); end;

X = X / Plus1; (3)

function y = mulaw1(x, mu)

%MULAW mu-law compression for signals with %----- assumed maximum value of 32767 %

% Usage: y = mulaw(x, mu); %

% x : input signal, column vector with max value 32767 % mu : compression parameter (mu=255 used for telephony) %

% see also MULAWINV

%--------------------------------------------------------------- % copyright 1994, by C.S. Burrus, J.H. McClellan, A.V. Oppenheim, % T.W. Parks, R.W. Schafer, & H.W. Schussler. For use with the book % \% (Prentice-Hall, 1994).

%---------------------------------------------------------------

Xmax = 1;%wang:32767;

y = (Xmax/log(1+mu))*log(1+mu*abs(x)/Xmax).*sign(x); (4)

function [s_n_r,e] = snr(xh, x) e=xh-x;

sumX=sum(x.*x);

sumE=sum(e.*e);

s_n_r=10*log10(sumX/sumE); (5)

function qplot(s, nbits, mu, ncases)

%QPLOT for plotting dependence of signal-to-noise ratio %----- on decreasing signal level %

% Usage: qplot(s, nbits, mu, ncases) %

% s : input test signal

% nbits : number of bits in quantizer % mu : mu-law compression parameter % ncases : number of cases to plot %

% NOTE: assumes ROUNDING for quantizer

% and requires user-written MULINV and SNR %

% see also MULAW and FXQUANT

%--------------------------------------------------------------- % copyright 1994, by C.S. Burrus, J.H. McClellan, A.V. Oppenheim, % T.W. Parks, R.W. Schafer, & H.W. Schussler. For use with the book % \% (Prentice-Hall, 1994).

%---------------------------------------------------------------

P = zeros(ncases,2); x = s;

for i=1:ncases

sh = fxquant(x, nbits, 'round', 'sat'); P(i) = snr(sh,x); y = mulaw1(x, mu);

yh = fxquant(y, nbits, 'round', 'sat'); xh =mulawinv(yh, mu); Q(i) = snr(xh,x); x = x/2; end

plot(P); hold on; plot(Q,'r'); hold off;

title(['SNR for ', num2str(nbits), '-bit Uniform and ',... num2str(mu), '-Law Quantizers'])

xlabel('power of 2 divisor'); ylabel('SNR in dB')

实验六、基于AD50的语音采集播放实验

一、实验目的

1、熟悉ADC/DAC的性能及TLC320AD50C的接口和使用。 2、熟悉MCBSP多通道缓冲串口通信的应用。 3、了解掌握语音的编解码和压缩码算法。

4、了解掌握一个完整的语音输入、输出系统的设计。

二、实验设备

计算机、ZY13DSP12BC2实验箱。

三、实验原理

1、TLC320AD50C介绍

TLC320AD50C是TI生产的一种模拟接口电路(AIC),它是一个音频段的处理器,使用过采样的Sigma-Delta技术提供从数字至模拟(D/A)和模拟至数字(A/D)的高分辨率低速信号转换。该芯片包括两个串行同步转换通道(用于各自的数据方向),在DAC之前有一个插入滤波器和ADC之前有一个抽取滤波器。内部电路的配置以及性能参数的设置都是通过设置4个控制寄存器,控制寄存器的设置可通过串行接口的编程。

芯片的引脚图如下图所示:

AD50芯片是带同步缓冲串口的16位A/D&D/A处理器,各引脚功能如下所示: (1)REFP、REFM:分别为电压基准滤波器的正输入端和负输入端,一般连接0.1uF的陶瓷电容;

(2)AUXP、AUXM:分别为辅助模拟输入放大器的同向输入端和反向输入端; (3)INP、INM:分别为模拟调制器的同向和反向输入端,该引脚需要一个外部的RC抗混叠滤波器;

(4)AVDD(PLL)、AVSS(PLL):分别用于内部PLL电路的模拟通道电源和地;

(5)DVDD、DVSS:分别为数字电源和数字地;

(6)DOUT、DIN:分别为数据输出端和数据输入端,和SCLK的同步信号配合使用。其中DOUT引脚从信号源接收模拟信号,从而转换成数字信号输出。DIN引脚从处理器接收数字信号,从而转换成模拟信号输出;

(7)FLAG:输出标志。在电话方式中,FLAG的内容是Control2寄存器所设置的值;

(8)ALTDATA:交换数据。当AD50二次通信时,如果该引脚处于使能状态,则可以使用Control2寄存器将此引脚的信号发送到DOUT引脚;

(9)FILT:带隙滤波器,一般接01uF的陶瓷电容; (10)AVDD、AVSS:分别为模拟AD通道的电源和地;

(11)OUTM、OUTP:分别为DA的同向和反向输入端,可以接成差分或单端600欧姆电阻;

(12)M/#S:主从方式选择输入端。当该引脚为高电平时,器件是主器件,为低电平时,器件是从器件;

(13)#FSD:帧同步信号延迟输出。该引脚用于从设备与主设备的帧同步时序同步。#FSD连接到从器件的#FS引脚,它与主器件#FS信号具有相同的宽度,但在时间上延迟#FSD寄存器中所编程的移位时钟个数;该引脚用于多个AD50设备;

(14)#FS:帧同步信号。主机方式时,该引脚为输出引脚;从机方式时,该引脚为输入引脚。当#FS变低,DIN开始接收数据且DOUT开始发送数据。在主机方式中,数据传输过程中,#FS保持低电平状态。在从机方式,#FS由外部产生,该引脚至少保持一个SCLK时间的低电平状态以便启动数据传送;

(15)SCLK、MCLK:分别为移位时钟和主机时钟。在帧同步时间间隔内,SCLK使数据在其同步下从DIN或者DOUT引脚读写数据。当配置为输出状态时(M/#S为高电平),SCLK在内部将帧同步信号频率乘上256倍产生采样时钟,当配置为输入状态时(M/#S为低电平),SCLK信号由外部设备产生,但必须与主时钟和帧同步信号同步;MCLK输出模拟接口电路的内部时钟;

(16)FC:二次通信请求信号。如果该引脚为高,第一次通信之后,立即进行第二次通信,从而可实现处理器和AD50之间的通信。此时,也可以从FC写入一些控制字。AD50在第一次通信后的#FS上升沿读取FC的状态,以便确认是否进行第二次通信;

(17)#PWRDWN:省电控制位。

ADC和DAC数据的发送和接收使用首次串行通信,读出和写入器件的选项和电路的配置这两者的控制字使用二次通信。 2、语音处理原理

语音信号经MIC(麦克风)进入系统,进行放大和滤波后,经过DSP与TLC320AD50C之间的串行通信实现数据的处理和数据的交换,经过转换输出,最后通过功率放大从SPEAKER输出。

参考原理图见附录。该电路一共包括三个部分:

(1)前置放大器。麦克风进来的模拟信号经过前置放大器放大。由于单纯的积分电路很容易饱和,因此要在电容两端并联上大电阻,这样可以防止小误差

电流的影响。前置放大器输送给下一级的信号是差分信号INP和INM,采用差分输入可以达到更好的信号处理效果。

(2)A/D、D/A转换器。该电路采用一块芯片TLC320AD50C,可同时完成A/D、D/A转换。

(3)后处理部分。将DA转换得到的结果放大后驱动扬声器。 3、McBSP多通道缓冲串口介绍

对McBSP的操作主要是设置它的寄存器。设置McBSP寄存器采用子地址寻址的方式。其使用原理和操作方法见教材的6.4节

四、实验步骤 1、先关闭软件,再关闭电源按钮S1、S2 ,硬件连接如下表:

计算机并口 DSP控制板P1 CH25 S12 CH26 S11 CH29 S10,S16 CH28 S15,S17 CH27 GND 语音模块-12 电源模块-12 语音模块+12 电源模块+12 硬件连接图: 2、打开CCS,并运行GEL-C54x-C5402_Init将DSP的内部存储器复位,把程序指针指向FF80,如果一次复位没有成功就重复运行该5402gel程序,直到程序指针复位到FF80,紧接着FF80后面****指令代码必须为0000。

3、新建一个文件夹,取名为TEST20,把REG5402.h拷贝到该文件夹下面。新建一个项目,取名为test20,加入源文件test20.c和vector20.c,再加入test20.cmd文件,编译连接,然后下载可执行文件test20.out。从MIC中输入语音信号,听SPEAKER中的输出信号,听输入输出是否一致。

五、实验报告要求

1、简述语音处理的实验原理。 2、尝试修改语音处理部分的程序,听是否语音信号输入和输出与你的程序一

致。 附录:

(1)源程序(voice.c) #include %unsigned int rrdy,xrdy; unsigned int data_buffer;

void cpu_init() /*初始化DSP*/ {

asm(\ PMST=0x3fa0; SWWSR=0x7fff; SWCR=0x0000; IMR=0;

IFR=0xff; }

void delay() /*WAIT*/ {

asm(\ asm(\ asm(\}

void mcbsp_init() /*多通道同步缓冲串口1的初始化*/ {

SPSA1=SPCR11;

SPSD1=0x0000; /*SPCR11=0000H*/ SPSA1=SPCR21;

SPSD1=0x0200; /*SPCR21=0200H*/ SPSA1=PCR1;

SPSD1=0x000c; /*PCR1=000CH*/ SPSA1=SPCR11;

SPSD1=0x0000; /*SPCR11=0000H*/ SPSA1=SPCR21;

SPSD1=0x0000; /*SPCR21=0000H*/ SPSA1=RCR11;

SPSD1=0x0040; /*RCR1=0040H*/ SPSA1=RCR21;

SPSD1=0x0004; /*RCR2=0004H*/ SPSA1=XCR11;

SPSD1=0x0040; /*XCR1=0040H*/ SPSA1=XCR21;

SPSD1=0x0004; /*XCR2=0004H*/ delay();

DMPREC=DMPREC&0xff3f; /*BRINT,BXINT*/

DXR11=0;

/*启动MCBSp串口*/ SPSA1=SPCR11;

SPSD1=0x0001; /*SPCR11=0001H*/ SPSA1=SPCR21;

SPSD1=0x0201; /*SPCR21=0201H*/ delay(); }

void aic_init() /*AD50初始化*/ {

IMR=IMR|0x0c00;

DXR11=0x0001; /*DIN的LSB为1,与AD50二次通讯*/ xrdy=0;

while(!xrdy) {

SPSA1=SPCR21;

xrdy=(SPSD1&0x0002)>>1; }

DXR11=0x0100; /*设置Control3寄存器*/ xrdy=0;

while(!xrdy) {

SPSA1=SPCR21;

xrdy=(SPSD1&0x0002)>>1;

}

DXR11=0x0001; /*DIN的LSB为1,与AD50二次通讯*/ xrdy=0;

while(!xrdy) {

SPSA1=SPCR21;

xrdy=(SPSD1&0x0002)>>1; }

DXR11=0x0405; /*设置Control4寄存器*/ xrdy=0;

while(!xrdy) {

SPSA1=SPCR21;

xrdy=(SPSD1&0x0002)>>1; }

asm(\

width=2*pi*1200/fs-2*pi*1000/fs; n=ceil(12.8*pi/width)+1; wn=(ws+wp)/2; beta=10.056;

win=kaiser(n,beta); b=fir1(n-1,wn/pi,win); [H,m]=freqz(b,[1],200); figure(1)

plot(m,abs(H));

title('FIR数字带通滤波器幅度响应') figure(2)

subplot(2,1,1) plot(t,y);

title('声音信号时域波形') c=fftfilt(b,y); subplot(2,1,2) plot(t,c);

title('过滤后声音信号时域波形') y1=fft(y); c1=fft(c); figure(3)

subplot(2,1,1);

plot(f,abs(y1(1:N/2))); title('声音信号幅度响应') subplot(2,1,2);

plot(f,abs(c1(1:N/2)));

title('过滤后声音信号幅度响应') sound(c,fs)

(4)IIR低通

function[]=iirlowpass();

[x,fs,bits]=wavread('2.wav');%播放原始信号 N=length(x);%返回采样点数 t=(1:N)/fs;

df=fs/N;%采样间隔 n1=1:N/2;

f=(n1-1)*df;%频带宽度

wp=2000/(fs/2);ws=2400/(fs/2); [n,wn]=buttord(wp,ws,1,10); [b,a]=butter(n,wn); [H,m]=freqz(b,a); figure(1);

plot(m*fs/(2*pi),abs(H));

title('IIR低通滤波器的频率响应'); xlabel('频率W(rad)');

ylabel('幅值'); grid; figure(2);

y3=fft(x);%原信号进行快速傅立叶变换

ys=filter(b,a,x);%信号送入滤波器滤波,ys为输出 yz=fft(ys); subplot(2,1,1);

plot(f,abs(y3(1:N/2))); title('原信号的频谱图'); xlabel('频率'); ylabel('幅值'); subplot(2,1,2);

plot(f,abs(yz(1:N/2)));

title('IIR低通滤波器滤波后的信号频谱图'); xlabel('频率');

ylabel('幅值');%声音信号时域波形 figure(3);

subplot(2,1,1); plot(t,x);

title('声音信号时域波形'); subplot(2,1,2); plot(t,ys);

title('滤波后声音信号时域波形'); sound(ys,fs); (5)IIR高通

function[]=iirhighpass(); [x,fs,bits]=wavread('2.wav'); N=length(x);%返回采样点数 t=(1:N)/fs;

df=fs/N;%采样间隔 n1=1:N/2;

f=(n1-1)*df;%频带宽度

wp=5000/(fs/2);ws=4700/(fs/2); [n,wn]=buttord(wp,ws,1,10); [b,a]=butter(n,wn,'high'); [H,m]=freqz(b,a); figure(1);

plot(m*fs/(2*pi),abs(H));

title('巴特沃斯滤波器的频率响应'); xlabel('频率W(rad)'); ylabel('幅值'); grid; figure(3);

ys=filter(b,a,x);%信号送入滤波器滤波,ys为输出

ya=fft(ys);%将滤波后的语音信号进行快速傅立叶变换 y3=fft(x);%原信号进行快速傅立叶变换 subplot(2,1,1);

plot(f,abs(y3(1:N/2))); title('原信号的频谱图'); xlabel('频率'); ylabel('幅值'); subplot(2,1,2);

plot(f,abs(ya(1:N/2)));

title('IIR高通滤波器滤波后的信号频谱图'); xlabel('频率'); ylabel('幅值'); figure(2)

subplot(2,1,1); plot(t,x);

title('原信号时域图'); subplot(2,1,2); plot(t,ys);

title('滤波后信号时域图'); sound(ys,fs); (6)IIR带通

function[]=iirbandpass(); [x,fs,bits]=wavread('2.wav'); N=length(x);%返回采样点数 t=(1:N)/fs;

df=fs/N;%采样间隔 n1=1:N/2;

f=(n1-1)*df;%频带宽度

wp1=2400/(fs/2);ws1=2000/(fs/2); wp2=6000/(fs/2);ws2=6400/(fs/2);

[n,wn]=buttord([wp1 wp2],[ws1 ws2],2,10); [b,a]=butter(n,wn); [H,m]=freqz(b,a); figure(1);

plot(m*fs/(2*pi),abs(H));

title('巴特沃斯滤波器的频率响应'); xlabel('频率W(rad)'); ylabel('幅值'); grid; figure(2);

ys=filter(b,a,x);%信号送入滤波器滤波,ys为输出 ya=fft(ys);%将滤波后的语音信号进行快速傅立叶变换 y3=fft(x);%原信号进行快速傅立叶变换 subplot(2,1,1);

plot(f,abs(y3(1:N/2))); title('原信号的频谱图'); xlabel('频率'); ylabel('幅值'); subplot(2,1,2);

plot(f,abs(ya(1:N/2)));

title('IIR带通滤波器滤波后的信号频谱图'); xlabel('频率'); ylabel('幅值'); figure(3);

subplot(2,1,1); plot(t,x);

title('原信号时域'); subplot(2,1,2); plot(t,ys);

title('滤波后信号时域'); sound(ys,fs);

实验八、有限冲击响应滤波器(FIR)算法实验

一、实验目的

1、掌握用窗函数法设计FIR数字滤波器的原理和方法。 2、熟悉线性相位FIR数字滤波器特性。 3、了解各种窗函数对滤波特性的影响。

二、实验设备

计算机、ZY13DSP12BC2实验箱。

三、实验原理

1、有限冲击响应数字滤波器的基础理论。

FIR数字滤波器是一种非递归系统,其冲激响应h(n)是有限长序列,其差分方程表达式为:

y(n)??h(i)x(n?i)

i?0N?1N为FIR滤波器的阶数。

在数字信号处理应用中往往需要设计线性相位的滤波器,FIR滤波器在保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。为了使滤波器满足线性相位条件,要求其单位脉冲响应h(n)为实序列,且满足偶对称或奇对称条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n)。这样,当N为偶数时,偶对称线性相位FIR滤波器的差分方程表达式为

N/2?1 y(n)??h(i)(x(n?i)?x(N?1?n?i))

i?0由上可见,FIR滤波器不断地对输入样本x(n)延时后,再做乘法累加算法,将滤波器结果y(n)输出,因此,FIR实际上是一种乘法累加运算。而对于线性相位FIR而言,利用线性相位FIR滤波器系数的对称特性,可以采用结构精简的FIR结构将乘法器数目减少一半。

2、 模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器)

为了用物理可实现的系统逼近理想滤波器的特性,通常对理想特性作如下修改:

(1)允许滤波器的幅频特性在通带和阻带有一定的衰减范围,幅频特性在这一范围内允许有起伏。

(2)在通带与阻带之间允许有一定的过渡带。

工程中常用的逼近方式有巴特沃思(Butterworth)逼近、切比雪夫(Chebyshev)逼近和椭圆函数逼近。相应设计的滤波器分别为巴特沃思滤波器、切比雪夫滤波器和椭圆函数滤波器。

巴特沃思滤波器的模平方函数由下式描述: |HB(?)|2?1 n为阶数;?c为滤波器截止频率 ?2n1?()?c

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

Top