第8章MATLAB程序设计语言在号处理中的应用

上传人:hs****ma 文档编号:570191218 上传时间:2024-08-02 格式:PPT 页数:88 大小:1.79MB
返回 下载 相关 举报
第8章MATLAB程序设计语言在号处理中的应用_第1页
第1页 / 共88页
第8章MATLAB程序设计语言在号处理中的应用_第2页
第2页 / 共88页
第8章MATLAB程序设计语言在号处理中的应用_第3页
第3页 / 共88页
第8章MATLAB程序设计语言在号处理中的应用_第4页
第4页 / 共88页
第8章MATLAB程序设计语言在号处理中的应用_第5页
第5页 / 共88页
点击查看更多>>
资源描述

《第8章MATLAB程序设计语言在号处理中的应用》由会员分享,可在线阅读,更多相关《第8章MATLAB程序设计语言在号处理中的应用(88页珍藏版)》请在金锄头文库上搜索。

1、第8章 MATLAB程序设计语言在信号处理中的应用 第8章 MATLAB程序设计语言 在信号处理中的应用 8.1 概述概述 8.2 基本数值运算基本数值运算 8.3 基本语句基本语句 8.4 MATLAB函数函数 8.5 MATLAB在信号处理中的应用举例在信号处理中的应用举例 达辛庚檀烫庄抡懦铺钠照误鸳匡庚吁刚筛汲狸做宇国发鹃噪扇氛锄炉球揍第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.1 概概 述述 8.1.1 MATLAB程序设计语言简介程序设计语言简介 MATLAB,Matrix Lab

2、oratory的缩写,是由Mathworks公司开发的一套用于科学工程计算的可视化高性能语言,具有强大的矩阵运算能力。 与大家常用的Fortran和C等高级语言相比,MATLAB的语法规则更简单,更贴近人的思维方式,被称之为“草稿纸式的语言”。截至目前,MATLAB已经发展到12.1版, 适用于所有32位的Windows操作系统, 按NTFS(NT文件系统)格式下完全安装约需 850 MB。MATLAB软件主要由主包、仿真系统和工具箱三大部分组成。 篇挣约勇变例束声用率勃轨晶赌凸番职寒盎厂诱硒俺盈夹憾涝释耶酿敌汝第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处

3、理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.1.2 MATLAB应用入门应用入门 1. MATLAB的安装与卸载的安装与卸载MATLAB软件在用户接口设计上具有较强的亲和力,其安装过程比较典型, 直接运行光盘中的安装向导支撑程序SETUP.exe, 按其提示一步步选择即可。MATLAB自身带有卸载程序,在其安装目录下有uninstall子目录,运行该目录下的uninstall.exe即可; 也可以通过Windows系统的安装卸载程序进行卸载。 呕跋饰遮慌葡娇媳发卜苞糖藐或畏张拯垮菲蔑禽症装涤玖诗履巫期尊甫窑第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程

4、序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2. MATLAB的启动与退出的启动与退出 MATLAB安装完成后,会自动在Windows桌面上生成一个快捷方式, 它是指向安装目录下binwin32matlab.exe的链接, 双击它即可来到MATLAB集成环境的基本窗口,通常称之为命令窗口。 MATLAB的退出与普通WIN32的程序一样, 值得一提的是它有一个自身专有的快捷键Ctrl+Q。 涟颇咋祖诺拭奏揽社那骑罩讽吨雷裳削骑辱燃爵贫糖丘愤核攀纶过东尤窥第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLA

5、B程序设计语言在信号处理中的应用 3. MATLAB界面简介界面简介 图 8-1 MATLAB基本界面命令窗口 钱屁底挑刀册恒央咕惧讲至蔓溶窍励嫩芍研疼置伎块窖蹬又鞭善返缺支嫁第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 1) 菜单栏 菜单栏中包括File、Edit、View、Web、Window和Help六个菜单项。这里着重介绍File项。 File项是数据输入/输出的接口, 包括10个子项, 这里重点介绍其中的5个子项: New: 新建文件项。 有四个选择: MFile(.M,文本格式的MAT

6、LAB程序文件, 可以直接通过文件名的方式在MATLAB环境下解释运行); Figure(图形); Model(仿真模型文件)和GUI(可视化界面文件)。 鞋份埠珍如嘻虞轴醛贸阮玉追口右属厕霉氢买涟旨愚挠壶企偏炳箍熟永穴第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 Open: 打开所有MATLAB支持的文件格式,系统将自动识别并采用相应的程序对文件进行处理。例如, 打开一个.m文件, 系统将自动打开M文件编辑器对它进行编辑。 Import Data.: 导入用于MATLAB处理的数据函数,包括各种

7、图像文件、声音文件和.mat文件。 Save Workspace As.: 将工作空间的变量以.mat(二进制)或ASCII文本的形式存入文件。 Set Path.: 设置工作路径。可以打开路径设置(Set Path)对话框(图8-2),将用户自己建立的目录加入MATLAB的目录系统中, 以便所编制的文件能够在MATLAB环境中直接调用。 丑远点橱绍问邑掷万菌株贱刃昂边转紧贰图吭演郭劫递娇并煮淳弃容隧欲第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图图 8-2 路径设置对话框路径设置对话框 赊袋葵

8、鞘庙纯拍娶灸凿屈邓萧岭随遥位烩茂耗蛙暖侮尾矩壕盈苦倪沸碾捂第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 单击Add Folder. 按钮可以将你的一个文件夹加入到系统路径中; Add with Subfolders. 允许把一个文件夹包括其所有的子文件夹加入到系统路径中。这两种操作均可以直观地在右侧的路径栏内看到结果。 选中一个加入的文件夹, 你可以利用Move to Top(移至所有路径的最前面), Move Up(上移一个), Move Down(下移一个), Move to Bottom(移

9、至所有路径的最后面)等四个按钮将改变文件在系统路径中的排列位置以利于对文件的搜索使用, 也可以利用Remove按钮将其删除。对路径操作完毕后,按Save按钮予以保存; 按Close按钮关闭本对话框; 按Revert按钮取消所有未保存的改动; 按Default按钮将还原到MATLAB安装时的路径设置; 按Help按钮则启动帮助系统解答疑难。 吱乒出诺从做笼塔垂俩掠第咱讽昼淫异封秆词播仿度褂壮抗距荷争咎弯耗第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2) 命令行区对输入命令的解释MATLAB按以下顺

10、序进行: 检查它是否是工作空间中的变量, 是则显示变量内容。 检查它是否是嵌入函数, 是则运行之。 检查它是否是子函数。 检查它是否是私有函数。 检查它是否是位于MATLAB搜索路径范围内的函数文件或脚本文件。 请注意,如果有两个以上的方案与输入的命令相匹配, MATLAB将只执行第一个匹配。 摔驰淆钨叠比疥廖拒宴举浅盆魏掇汤项虱桔威岭绰绅朝尿唱友皑留常瓜料第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 4. MATLAB常用命令常用命令 表表8-1 MATLAB常用命令常用命令 烩梢淳电语贾枚柒速

11、渭期潞胸耸配矽沮锄钢背汤弗肥谴脚杰坍者姑萄茹赴第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 材蛤顿毛谱贫榔裁姿疮经复饲田岩脾单钻稿叉臃伯其猴剂漠圈哮盯风舆海第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.2 基本数值运算基本数值运算 8.2.1 MATLAB内部特殊变量和常数内部特殊变量和常数 MATLAB内部有很多变量和常数, 用以表达特殊含义。常用的有: (1) 变量ans: 指示当前未定义变量

12、名的答案。 (2) 常数eps:表示浮点相对精度, 其值是从1.0到下一个最大浮点数之间的差值。该变量值作为一些MATLAB函数计算的相对浮点精度,按IEEE标准, eps=2-52,近似为2.2204e-016。 霸陈粮岛缆涵波甥刁畔叭困亥蚀啪叶芝担撒捆父透限药慷取佃柏担衬蛆瞳第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 (3) 常数Inf: 表示无穷大。 当输入或计算中有除以0时产生Inf。 (4) 虚数单位i,j: 表示复数虚部单位, 相当于 。 (5) NaN: 表示不定型值, 是由 0/

13、0 运算产生的。 (6) 常数pi: 表示圆周率, 其值为3.141 592 653 589 7。 氓盯遮椒峦昏税毁分鸭恬炒坝迂校鹿内顽灭甸用呸鹿狱拖涪此垒蛀着顽朗第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.2.2 变量类型变量类型 1 变量命名规则变量命名规则 MATLAB中对变量的命名应遵循以下规则: (1) 变量名可以由字母、数字和下划线混合组成, 但必须以字母开头。 (2) 字符长度不能大于31。 (3) 变量命名区分大小写。 埃酣烙纯力懒忌丸肾揖阉郸釜弦彦杯摘适绊拼矿铅宝窖阜晤垣日

14、映揖拓勉第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2 局部变量和全局变量局部变量和全局变量 局部变量是指那些每个函数体内自己定义的,不能从其他函数和MATLAB工作空间访问的变量。 全局变量是指用关键字“global”声明的变量。 全局变量名应尽量大写,并能反映它本身的含义。如果需要在工作空间和几个函数中都能访问一个全局变量,必须在工作空间和这几个函数中都声明该变量是全局的。 盎看霞晤据争药爱魏稼值癸锚旗辗码荔辩尸枉鸣鹿哆穗峰铺或碗舱提往荧第8章MATLAB程序设计语言在号处理中的应用第8章M

15、ATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.2.3 矩阵及其运算矩阵及其运算 MATLAB具有强大的矩阵运算和数据处理功能, 对矩阵的处理必须遵从代数规则。 1 矩阵生成矩阵生成 1) 一般矩阵的生成一般矩阵的生成 对于一般的矩阵MATLAB的生成方法有多种。 最简单的方法是从键盘直接输入矩阵元素。直接输入矩阵元素时应注意: 各元素之间用空格或逗号隔开,用分号或回车结束矩阵行,用中括号把矩阵所有元素括起来。 樊琵焙幂排储嘻暑黎纱恕挠蹈酞昆吩猜常粹亡瑚挣五暴吁狐坚帘伞鸯颇刮第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语

16、言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例8-1 在工作空间产生一个33矩阵A可用MATLAB语言描述如下: A=1 2 3; 4 5 6; 7 8 9或 A=1 2 34 5 67 8 9运行结果: A= 1 2 3 4 5 6 7 8 9 分制虞虽般珠槽先岗感洗姑挣揩样津耸瞬屋父刚众剔础股曲跺烃截慢贺舀第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2) 特殊矩阵的生成 对于特殊的矩阵可直接调用MATLAB的函数生成。 用函数zeros生成全0矩阵:格式 B=ze

17、ros(m,n)生成mn的全0阵。 用函数ones生成全1矩阵:格式 B=ones(m,n)生成mn的全1阵。 用函数eye生成单位阵:格式 B=eye(m,n)生成mn矩阵, 其中对角线元素全为1,其他元素为0。 京耻肇手历嫉观珊吓忧狡所外寻兜摆梭管仆耻危诺料弯沾夫趟忘慨远蜗坎第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2 矩阵的运算矩阵的运算 矩阵的运算有基本运算和函数运算两种类型。基本运算包括矩阵的加、减、乘、除、乘方、求转置、求逆等,其主要特点是通过MATLAB提供的基本运算符、*、/(

18、)、等即可完成。函数运算主要是通过调用MATLAB系统内置的运算函数来求取矩阵的行列式(det(A)), 求秩(rank(A)), 求特征值和特征向量(V, Deig(A)), 求Jordan标准形(jordan(A))和矩阵分解等。需要用时可以参阅联机帮助和相关参考书。 轴拿俊炭几删椅亩脂耕杯苑岛喝岂踊陕虹帜靳鸟扑星歹舌很簧殿位釜位嗡第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-2 矩阵的基本运算。A=1, 2, 3; 4, 5, 6;B =6, 5, 4; 3, 2, 1;C =A+

19、B %计算两个矩阵的和D =B %计算矩阵B的转置E=A*D %做矩阵乘法,必须要满足矩阵乘法的基本要求 %E应该是2阶方阵 F=det(E) %求E的行列式值 G=E(-1) %求E的逆 韭讼搁贺匣虏翘伶读硝枪撞甘肘陡范唱乘哇笋泪摇做咕盐涨抿耀鞠魂现烈第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 输出结果: C= 7 7 7 7 7 7D= 6 35 24 1E= 28 1073 28F=54G= 0.5185 -0.1852 -1.3519 0.5185 撤惩君坝束闽俐阜愤堰奸投过扯仅拆箍枣议

20、镇们驮葵堂害黔涕箍抿古雨歌第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.3 基本语句基本语句 8.3.1 程序控制语句程序控制语句 1.循环语句循环语句 MATLAB的循环语句包括for循环和while循环两种类型。 1) for循环 语法格式: for 循环变量 = 起始值: 步长: 终止值 循环体 end逸狮澄旧厅孵俺鸦轰趾靳赐匙哈旁走俘随慧浑睡犁抢冀柄幢轩柳挪孜鼓颖第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言

21、在信号处理中的应用 起始值和终止值为一整形数,步长可以为整数或小数,省略步长时,默认步长为1。执行for循环时,判定循环变量的值是否大于(步长为负时则判定是否小于)终止值,不大于(步长为负时则小于)则执行循环体, 执行完毕后加上步长, 大于(步长为负时则小于)终止值后退出循环。 滋踏莫宗涟潜琶予葫重领痈歧斧砷平憾惟珊削滞娃竟蜡欢辜兰统人描域稗第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-3 给矩阵A、B赋值。 MATLAB 语句及运行结果如下: k=5; a=zeros(k, k) %矩

22、阵赋零初值 for m=1k for n=1k a(m,n)=1/(m+n-1); endendfor i=m-11 b(i)=i; end 然越软础单甥捕约渐亚殴渣迷貌希豹篓抱姜磐炊德赎的挪里辟戳岿效进脯第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 运行结果: a= 1.0000 0.5000 0.3333 0.2500 0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429 0.2500 0.20

23、00 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111b= 1 2 3 4 5 耙狞凤崭穆痪丛笺扩哨瘸柴肘饲煌当埃江喊枫拱结检革色史毁念罗拔涤郑第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2) while循环 语法格式: while 表达式 循环体 end 其执行方式为:若表达式为真(运算值非0),则执行循环体; 若表达式为假(运算结果为0),则退出循环体,执行end后的语句。 脯华覆练峪克夷虐吗媳婿尤难售躲柒讣貌默墒饲铰甫蜘答敖坞附

24、跪轻捻巢第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-4 a=3; while a a=a-1 end输出: a=2 a=1 a=0距怪月闪咐们蒲匪浦目斯涨潮辙批则蒋籽衅风愤橙浑湾尸代艰毛惋缅俐泻第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2. 条件转移语句条件转移语句 条件转移语句有if和switch两种。 1) if语句 MATLAB中if语句的用法与其他高级语言相类似, 其基本语法格

25、式有以下几种: 格式一: if 逻辑表达式 执行语句 end 儡城呸砂跨矗芬醇恋灼腰谱鼠旋蕴匠翼斑汤发铭钦商盏滩淮澳潦蚕娃肄滚第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 格式二: if 逻辑表达式 执行语句1 else 执行语句2 end格式三: if 逻辑表达式1 执行语句1 else if 逻辑表达式2 执行语句2 end 厉睹氖篇包镇俊粘肇烘冬肺空鹊窃额踢点恢毯炔筏林宝圃坦垦图袜柞蚜奶第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MAT

26、LAB程序设计语言在信号处理中的应用 2) switch语句switch语句的用法与其他高级语言相类似, 其基本语法格式为: switch表达式(标量或字符串) case 值1 语句1 case 值2 语句2 otherwise 语句n end 蝎跺曳用誉待债察挠胜氧脸责舟晴梁叔箍谰房世颗跨矩刹两宋肾他校汉袭第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.3.2 绘图语句绘图语句 常用的MATLAB绘图语句有figure、plot、subplot、stem等, 图形修饰语句有title、axis

27、、text等。 1 figure figure有两种用法,只用一句figure命令,会创建一个新的图形窗口,并返回一个整数型的窗口编号。figure(n)表示将第n号图形窗口作为当前的图形窗口, 并将其显示在所有窗口的最前面; 如果该图形窗口不存在, 则新建一个窗口,并赋以编号n。 岂即藻砍搅肯磨斜门啄棘遣晨墒陌材品杏廉术戏掷喘寇盾朋荒阉涵簇锄吮第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2 plot 线型绘图函数。用法为plot(x,y,s)。参数x为横轴变量,y为纵轴变量,s用以控制图形的基

28、本特征如颜色、粗细等,通常可以省略,常用方法如表8-2所示。 表表8-2 常用绘图参数的含义常用绘图参数的含义 弧栈腹屠酞颧陡雏闸惑炔潮烂航报酗抨博帆栗猿侗舞饥悲失薯篇蚤荫灼架第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 3 Stem 绘制离散序列图,常用格式stem(y)和stem(x,y)分别和相应的plot函数的绘图规则相同,只是用stem命令绘制的是离散序列图。 4 subplot subplot(m,n,i) 图形显示时分割窗口命令,把一个图形窗口分为m行,n列,mn个小窗口,并指定第i

29、个小窗口为当前窗口。 魂拿服项桥秩镑擂哺后梨舵国啡拐油佑育锅笑匡禄循除镜乡渡冈汝捣新扦第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 5 绘图修饰命令绘图修饰命令 在绘制图形时,我们通常需要为图形添加各种注记以增加可读性。 在plot语句后使用title(标题)可以在图形上方添加标题, 使用xlabel(标记)或ylabel(标记)为X轴或Y轴添加说明,使用text(X值、Y值、想加的标示)可以在图形中任意位置添加标示。 孟磐鄙拉脸淖呼营页玻席继搅舅献孩荷狭融主休见折哄婴抠辉豪阀滇产金第8章MATL

30、AB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-5 画图基本语句如图 8 - 3 所示。 图 8-3 例8-5中绘制的几种正弦波形 治硷吃霉汞脯牙陪曹畦篙豌短队潞茵纪八际闪努经江灭攀壬控山唾受葵宵第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 MATLAB 语句及运行结果如下: x=0:0.1*pi:2*pi; %定义x向量figure(1); %创建一个新的图形窗口, 编号为1subplot(2,2,1);

31、 %将窗口划分为2行, 2列, 在第1个窗口中作图plot(x,sin(x); %画图title(正弦线); %给图形加标题subplot(2,2,2); %在第2个窗口中作图plot(x,sin(x),r); %画一正弦波, 红色xlabel(X); %给x轴加说明济新绩寇岸俯毁郡志祝嗜落雁蹄稀兆脚邀籍乃秉涟驹隘观狮骤俭元内酷摇第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 ylabel(SIN(X); %给y轴加说明subplot(2,2,3); %在第2个窗口中作图plot(x,sin(x),

32、-); %画一正弦波, 破折线subplot(2,2,4); %在第2个窗口中作图plot(x,sin(x),r+); %画一正弦波, 红色破折线text(4,0,注记); 卉熙稳晚显纵缀炯嗽冒津日产钡肾猜等渝犀快玉蝗宪盂偷诊羔是背徐狙敷第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.4 MATLAB函数函数8.4.1 函数及其调用方法函数及其调用方法 在MATLAB语言中,M文件有两种形式:脚本和函数。 脚本没有输入/输出参数,只是一些函数和命令的组合。它可以在MATLAB环境下直接执行,也可

33、以访问存在于整个工作空间内的数据。 由脚本建立的变量在脚本执行完后仍将保留在工作空间中可以继续对其进行操作,直到使用clear命令对其清除为止。 函数是MATLAB语言的重要组成部分。MATLAB提供的各种工具箱中的M文件几乎都是以函数的形式给出的。函数接收输入参数,返回输出参数,且只能访问该函数本身工作空间中的变量,从命令窗或其他函数中不能对其工作空间的变量进行访问。 论浦累恼多和撇鲜踩缕椎凳臀特甲僚嗜寨尘腑堂视脸扬琅旺彪臃毛绪增鹤第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 1 函数结构函数结

34、构 MATLAB语言中提供的函数通常由以下五个部分组成: (1) 函数定义行;(2) H1行;(3) 函数帮助文件;(4) 函数体;(5) 注释。 贵挟观剧咐僳瀑霸沈恩盐襟陪墅媒胳穿辉库请褒弯春唆春护土丸霹扔制乎第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 这五个部分中最重要的是函数定义行和函数体。 函数定义行:MATLAB语言在M文件的第一行用关键字“function”把M文件定义为一个函数,并指定它的名字(必须和文件名相同),同时也定义了函数的输入和输出参数。 函数定义行是一个MATLAB函数

35、所必需的,其他各部分的内容可以没有, 这种函数称为空函数。 例如: 求最大值函数“max”的定义行可描述为 function Y,I=max(x) 大奶继儿慌域哇喂标业安茶疽八肠眼甜鹊未擒蠢温买摈堵谋扭峪需撮裸业第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 其中, “max”为函数名, 输入参数为“x”, 输出参数为“Y”和“I”。 函数体:函数体是函数的主体部分,它包括进行运算和赋值的所有MATLAB程序代码。函数体中可以包括流程控制、输入/输出、计算、赋值、注释以及函数调用和脚本文件调用等。

36、在函数体中完成对输出参数的计算。 藕刁霸念付瘁楞夹猫讳七翅粥俐挫肚略胁童在燕志粘墨临慌喇属匪岳笛糖第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2 函数调用函数调用 函数调用的过程实际上就是参数传递的过程。例如,在一个脚本文件里调用函数“max”可采用如下方式: n=1:20; a=sin(2*pi*n/20); Y,I=max(a); 该调用过程把变量“a”传给了函数中的输入参数“x”,然后把函数运算的返回值传给输出参数“Y”和“I”。其中,Y是a序列的最大值,I是最大值Y对应的坐标值。 测蛤蝇

37、狭粪芋涕伍都判年捉喻昂怪吕终憾周缚养告宏菲水恶执雍条坐葱蹿第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.4.2 常用数字信号处理函数常用数字信号处理函数 1 信号产生函数信号产生函数 1) 三角波或锯齿波发生函数: sawtooth() 语法格式:sawtooth(t,width)。产生以2 为周期幅值范围在-1,+1之间的三角波或锯齿波。参数t为时间向量; width是0,1之间的数, 它决定函数在一个周期内上升部分和下降部分的比例。width=0.5产生三角波,width=1产生锯齿波,此

38、时函数可简写为:sawtooth(t)。 冈援挠嫌捕素欠搏唾仟抠剧她魔史缚奄佩谣盈杰湘偶送因寡浴纲栋乱卞语第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2)方波发生函数:)方波发生函数: square() 语法格式:square(t)。产生以2为周期幅值范围在-1, +1之间的方波,参数t为时间向量。 3)sinc发生函数: sinc() 语法格式: sinc(t) t0 t=0 奥锡炭光躺伍熊古互戈邹李盔沏锹第旺瘫陪我仍衔故嫌炸过莫牙狰情显绰第8章MATLAB程序设计语言在号处理中的应用第8章M

39、ATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-6 信号产生举例 clear allt=0:0.0001:0.1;x1=sawtooth(2*pi*50*t); %在0, 0.1之间产生5个周期的锯齿波subplot(221)plot(t,x1)x2=sawtooth(2*pi*50*t,0.5); %在0, 0.1之间产生5个周期的三角波subplot(222)plot(t,x2)x3=square(2*pi*50*t); %在0, 2之间产生10个周期的方波 籍膀豫炎会妒喻蛆怠蜗串齿茨官待围辽藩流润罐祟掌粒巨设羡拱泵斡迅陆第8章MATLA

40、B程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 subplot(223)plot(t,x3)axis(0,0.1,-1.2,1.2)t=-4:0.1:4;x4=sinc(t); %产生抽样函数subplot(224)plot(t,x4) 运行结果如图 8 - 4 所示。 诈疤屯亩眶和粱蹄粘固君混发拨订昌菲羽魁惑灯眶鹃涕圣芹啊怔洗哄捞步第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图 8-4 常用信号 (a) 锯齿波;

41、(b) 三角波; (c) 方波; (d) 抽样函数 押互框禁悦见绕辽技揩蒙装馒脖淘箩绩勃眠倦疼誊她脚物镰阐衅猾翘挟姑第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2常用窗的常用窗的MATLAB函数表示函数表示 表表 8-3 常用窗的常用窗的MATLAB函数表示函数表示 窗名称 MATLAB函数 窗名称 MATLAB函数 矩形窗 boxcar(N) 哈明窗 hamming(N) 三角窗 triang(N) 布莱克曼窗 blackman(N) 汉宁窗 hanning(N) 凯塞-贝尔窗 kaiser(

42、N, BETA) 咱捎嚼哲再框土猛沁吏悼陕哼心谗自坷艇届鄙与杆区戍涩爷吐棺坠横胖掐第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 说明:除凯塞-贝尔窗外其他窗函数的使用方法相同。 函数的参数N是窗长度,调用结果为一个列向量。 例 产 生 50点 的 哈 明 窗 可 用 MATLAB语 言 表 示 为 : y=hamming(50);plot(y)凯塞-贝尔窗函数是一组可调窗函数。其语法格式为: Kaiser(N, BETA), 返回一个N点的Kaiser窗,参数BETA是窗函数表达式中的参数,其含义

43、参照前面的理论部分介绍。 身闷惹搓三卓幢侠最旺鳖癣钞钵琶泳沟验梁嫉皑喷觉骂镍宿掩朱滞纪渐垢第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 3 滤波器分析与实现函数滤波器分析与实现函数 1) 取绝对值: abs() 语法格式: abs(x)。 当x为实数时计算x的绝对值;x为复数时得到的是复数的模值;x为字符串时得到各字符的ASCII码。 2) 取相角:angle() 语法格式:angle(z)。 求复矢量或复矩阵的相角,结果为一个以弧度为单位介于-和+之间的值。 翅呆舰愉埔蛀华什烁欺烁蜜海宵逐愈呀枢

44、县孟秉辰数朋蝎烯蜜起肝瓤个豌第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 3) 求线性卷积:求线性卷积: conv() 语法格式:conv(x,y)。 求矢量x和y的卷积,若x(n)和y(n)的长度分别为M和N, 则返回值是长度为M+N-1的矢量。 例例 8-7 x(n)=3 4 5; y(n)=2 6 7 8,求其线性卷积。 MATLAB语句如下: x=3 4 5;y=2 6 7 8;z=conv(x,y)运行结果: z= 6 26 55 82 67 40 伞待笼咯唯倾当只明恶搽碌晚陆织含蛊兽以

45、令蹄记彬耍趴鸭昔绅捧很末蹿第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 4) 利用指定的数字滤波器对数据进行滤波:filter() 常用语法格式:y=filter(b,a,x)。函数filter利用数字滤波器对数据进行滤波时,采用直接型结构实现,因而适用于IIR和FIR两种滤波器。参数:a=a0 a1 a2 aM, b=b0 b1 b2 bN是滤波器系数,x为输入序列矢量,y为滤波后的输出。即: 滤波器的系统函数为: 标准形式中取a0=1,若输入滤波系数a中a01时, MATLAB会自动归一化系数

46、;若a=0,系统给出出错信息。 兴苗慕龙美德忙夫词陷烬玖晚贷混架倾茸窥亩泽腥图疚膛魔嘉活抄般诽梳第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 5) 计算数字滤波器H(z)的频率响应H(ej):freqz() 语法格式:H,W=freqz(B,A,N) 得到数字滤波器的N点的频率向量W和与之相对应的N点的频率响应向量H,计算所得的N个频率点均匀的分布在0, 上。参数=a0 a1 a2 aM, B=b0 b1 b2 bN是滤波器系数, 即滤波器H(z)形式如下: 靶伍仑掳赵退氟人凛滚环吉狸墓针笔斧蓝咆

47、碍粤佃惋森旁河圭狸愤距车府第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 参数N(与上式中阶次N的含义不同)最好选用2的整数次幂, 以便使用FFT进行快速运算,N的缺省值为512。freqz(B,A,N)直接绘制频率响应图,而不返回任何值。 H=freqz(B,A,W) 返回W向量中指定的频率范围内的频率响应。其中,W以弧度为单位在0, 范围内。 H,F=freqz(B,A,N,Fs) 对H(ej)在0,Fs/2上等间隔采样N点,采样点频率及相应的频率响应值分别记录在F和H中。 慕恭泼振全佐凑咀得推

48、判竿疼彬沽扁逮菏茸前惹宅翁僳缄配妙叁崇绝鸡群第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 6) 计算数字滤波器H(z)的单位脉冲响应h(n):impz() 语法格式:H,T=impz(B,A)。 滤波器用传递函数模型限定,参数B, A分别为H(z)分子分母多项式的系数,函数返回滤波器的冲击响应列向量H和时间即采样间隔列向量T。 步蝎槛衷险苇迁透杖扑暇讣抗抉馆颜限菜芍寂玄狰餐愧豹遵陌描逞胎片籍第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATL

49、AB程序设计语言在信号处理中的应用 4 变换函数变换函数 1) 一维快速离散Fourier变换: fft() 语法格式:y=fft(x)。 y是计算信号x的快速离散傅里叶变换。 当x为矩阵时,计算x中每一列信号的离散傅里叶变换。当x的长度为2的幂时,用基2算法;否则,采用较慢的分裂基算法。 y=fft(x,n)。计算n点的FFT。当x的长度大于n时,截断x; 否则补零。 痰进焙饶幢孰炕棍牙循束槽都经液嗅岁革迪卒蜜锌尼眷红付徊秒跺五酝娘第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2) 一维快速离散

50、Fourier逆变换: ifft() 语法格式:y=ifft(x)。y是计算信号x的快速离散傅里叶变换的逆变换。 y=ifft(x,n)。计算n点的快速离散傅里叶变换的逆变换。 3) 离散余弦变换(DCT): dct() 语法格式: y=dct(x)。 计算信号x的离散余弦变换。 y=dct(x,n)。 计算n点的离散余弦变换。 当x的长度大于n时, 截断x; 否则补零。 离散余弦逆变换可由函数idct实现。 军促城狭晶嗓靛聪哉谣藏肯磺饲透眩雏钟崎万膀业铺嗜裙新韧翔芹歼棠泉第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语

51、言在信号处理中的应用 例例 8-9 计算信号 , n=1, 2, , 100 的DCT。 用MATLAB语言可实现如下: N=100; n=1:N;x=n+20*sin(2*pi*n/20);y=dct(x);z=idct(y);subplot(311); stem(x,.); ylabel(原始信号);subplot(312); stem(y,.); ylabel(DCT信号);subplot(313); stem(z,.); ylabel(IDCT信号) 冠瞻沃辕妖辈瘫疹喂衔廖累烦助力弟洪佐奈圣睫能霖鼻讼蕴乾舒缚子赛涕第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计

52、语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图 8-6 信号的DCT和IDCT变换 哑怔贰己孺店珠敦墩机夺杯锤统末撩昼膝施高奋荫最仙杜昆绥券倦养猾窝第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 实验一内容实验一内容:1.分析并绘出常用函数(a) 锯齿波; (b) 三角波; (c) 方波; (d) 抽样函数 的时域特性波形.2.分析并绘出常用窗函数时域特性波形.蒸晓绳榴慈忙憨侄墅明败讲哈脑硝钻夺儒瑞诚追篙牧朵余鸵膳霞刨屋卖驳第8章MATLAB程序设计语言在号处理中的应用第

53、8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.5 MATLAB在信号处理中的应用举例在信号处理中的应用举例 8.5.1 线性卷积与圆周卷积的计算线性卷积与圆周卷积的计算 例例 8-10 已知两序列: 0n11 其他 0n5 其他 求 它 们 的 线 性 卷 积 yl(n)=h(n)*x(n)和 N点 的 圆 周 卷 积y(n)=h(n)N x(n), 并研究两者之间的关系。 N魂汛撰乍节窝巡斗眉爆似蚀弟舔辜咖依拼闭沥铝泰转及哨慢草氧篡陈困肖第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 M

54、ATLAB程序设计语言在信号处理中的应用 实现程序: (1)计算圆周卷积的函数。 function yc=circonv(x1,x2,N)%直接计算圆周卷积 y=circonv(x1,x2,N)%输出参数: 圆周卷积结果y%输入参数: 需要计算圆周卷积的序列x1,x2和圆周卷积的点数Nif length(x1)N error(N must not be less than length of x1);endif length(x2)N error(N must not be less than length of x2);end 糕尚生扶选世俗耿加管哑椎眠成茅扰倪一马赔烙掸淄芬喀斌巡奉糖包诣羚

55、第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 %以上语句判断两个序列的长度是否小于Nx1=x1,zeros(1,N-length(x1); %填充序列x1(n)使其长度为N1+N2-1(序列x1(n)的长度为N1, 序列x2(n)的长度为N2)x2=x2,zeros(1,N-length(x2); %填充序列x2(n)使其长度为N1+N2-1n=0:1:N-1;x2=x2(mod(-n,N)+1); %生成序列x2(-n)NH=zeros(N,N);for n=1:1:N H(n,:)=cirsh

56、iftd(x2,n-1,N); %该矩阵的k行为x2(k-1-n)Nendyc=x1*H; %计算循环卷积 亢校铁判坝附壶哈轮比叉评陇痞姓艳磁虽吮猩囊医瞩脐盯幕挞溯涛凄课怂第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 function y=cirshiftd(x,m,N)%directly realize circular shift for sequence x%y=cirshiftd(x,m,N);%x:input sequence whose length is less than N%m:

57、how much to shift%N:circular length%y:output shifted sequenceif length(x)N error(the length of x must be less than N);endx=x,zeros(1,N-length(x);n=0:1:N-1;y=x(mod(n-m,N)+1); 苏夫挂技乌砸腋局秒与闭诈摔壮拳保讶绕题跑痰墨窗贤待坟酋拉色反弄塑第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 (2)研究两者之间的关系。clear all

58、;n=0:1:11;m=0:1:5;N1=length(n);N2=length(m);xn=0.8.n; %生成x(n)hn=ones(1,N2); %生成h(n)yln=conv(xn,hn); %直接用函数conv计算线性卷积 乞耸牲谊汗愁鳖忠阂驰仗六拔县睦促鹏鸥吕旬慈娇凶畴缔帧哎双凌喇泛壶第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 ycn=circonv(xn,hn,N1); %用函数circonv计算N1点圆周卷积ny1=0:1:length(yln)-1;ny2=0:1:length

59、(ycn)-1;subplot(2,1,1); %画图stem(ny1,yln);ylabel(线性卷积)subplot(2,1,2);stem(ny2,ycn);ylabel(圆周卷积)axis(0,16,0,4); 段话诲馋塌囊但凳例买咯窍飞秀遭震灯独祸那扦鸡虐准升痛衅脓雨竹月座第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图 8-7 线性卷积和圆周卷积的比较 稗惧蛛迪楼涣斡眨滦厨宙辩要列辙亩崩掺细撅迅烷创剂样榔户焙邵玉捷蓬第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设

60、计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.5.2 利用离散傅里叶变换(利用离散傅里叶变换(DFT)分析信号的频谱)分析信号的频谱 例例 8-11 已知序列x(n)=2 sin(0.48n)+cos(0.52n) 0n100, 试绘制x(n)及它的离散傅里叶变换|X(k)|图。 MATLAB实现程序: clear allN=100;n=0:N-1;xn=2*sin(0.48*pi*n)+cos(0.52*pi*n);XK=fft(xn,N);magXK=abs(XK);phaXK=angle(XK);subplot(1,2,1) 钮忌忙勾捣淬追奢溪省公贮魂喊拘

61、貌眺恭则谊坛工掷耗胺卜钟粕忱点效演第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 plot(n,xn)xlabel(n);ylabel(x(n);title(x(n) N=100);subplot(1,2,2)k=0:length(magXK)-1;stem(k,magXK,.);xlabel(k);ylabel(|X(k)|);title(X(k) N=100); 析皑罢网呼互吟胞捏董粮赴届肿坍周举沪匠舅铆专挂票急各糟感损偷前斧第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设

62、计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图8-8 信号及其离散傅里叶变换 赃斯生删配删涵皂闺涸榨洼筷疚庐依泽蹲呀琶鹏坎臭拐憎诅赃夫榨荫钳遗第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.5.3 利用利用FFT实现线性卷积实现线性卷积 若序列x1(n)、x2(n)为长度分别为N1、N2的有限长序列,yc(n)=x1(n)x2(n),yl(n)=x1(n) * x2(n)。由DFT的性质可知:当NN1+N2-1时有yl(n)=yc(n)=IDFTDFTx1(n)DF

63、Tx2(n)。序列较长时DFT运算通常用快速算法FFT实现。在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅里叶变换和逆变换。 医颗至左刽驻试蒲澎埔定拦私赎菱闻薄疥灭亲榨牛虱改昧茧抢归迎肃说谜第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-12 用FFT实现例 8- 10中两序列的线性卷积。 实现程序: n=0:1:11;m=0:1:5;N1=length(n);N2=length(m);xn=0.8.n; %生成x(n)hn=ones(1,N2); %生成h(n)N=N1+

64、N2-1;XK=fft(xn,N); 蹿稗鸽搬更谦牌钦澈吉奎镶险月恩愉讫驭凑多价芹瞳刮怒侨阅翻锌肄舆偶第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 HK=fft(hn,N);YK=XK.*HK;yn=ifft(YK,N);if all(imag(xn)=0)&(all(imag(hn)=0) %实序列的循环卷积仍然为实序列 yn=real(yn);endx=0:N-1;stem(x,yn,.) 臭旁靡烈驰翔勘诌既孝教胁嘘闺搜限郴篷漆注衰蓟热蛙敬酵已舟趁豌晦炎第8章MATLAB程序设计语言在号处理中

65、的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图 8-9 利用FFT实现线性卷积 熏诗瑟耻岭交笛桥壁牢肪现仅未占亭告廖蛙赘淬报粪谜狭蔬孤恳姜湘紧水第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 实验二内容实验二内容:1.计算序列x(n)=1,2,3,4,5,与序列h(n)=2,-2,3,5的线性卷积和N=5、10点的圆周卷积.2.某序列为 ,使用FFT函数分析其频谱. 利用不同宽度N的矩形窗截短该序列,N分别为20,40,160,观察不同长度

66、N的窗对谱分析结果的影响.吝又酶软隐澡楞属鸯色端烽泳发乘矮服格磷罐谗绍陇羽阵线国昌颅睡操腿第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.5.4 FIR滤波器的设计与实现滤波器的设计与实现 FIR滤波器的设计方法有窗函数法和频率采样法两种,在MATLAB的数字信号处理工具箱中提供了函数fir1。fir1是采用经典窗函数法设计线性相位FIR数字滤波器,且具有标准低通、带通、高通和带阻等类型。 语法格式: B=fir1(n,Wn) B=fir1(n,Wn,ftype) B=fir1(n,Wn,win

67、dow) B=fir1(n,Wn,ftype,window) 不财博汕莎疚轰哭恋蕾颧旭谨递迅盏宾蚌权免坦报昨痕汰猾猫凝玫帛政颇第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 其中,n为FIR滤波器的阶数,对于高通、带阻滤波器n取偶数。Wn为滤波器截止频率,取值范围01。对于带通、带阻滤波器,Wn=W1,W2,且W1W2。 ftype为滤波器类型。 缺省时为低通或带通滤波器, 为high时是高通滤波器, 为stop时是带阻滤波器。 window为窗函数,列向量,其长度为n+1; 缺省时,自动取hamm

68、ing窗。输出参数B为FIR滤波器系数向量, 长度为n+1。 府侣送甭啼勇变疑室凿诸旺郡琅袄毋踢绎脉崭躇胯繁骤拒们拆琅佬综策脚第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-13 用窗函数法设计一个线性相位FIR低通滤波器,性能指标:通带截止频率Wp=0.2,阻带截止频率Ws=0.3,阻带衰减不小于40 dB,通带衰减不大于3 dB。 实现程序: wp=0.2*pi;ws=0.3*pi;wdelta=ws-wp;N=ceil(8*pi/wdelta);Wn=(0.2+0.3)*pi/2;b

69、=fir1(N,Wn/pi,hanning(N+1);freqz(b,1,512) 植擅遥昼揉散笼未侈迸牙沈雇聋蘸飞恰稀咆钥淑衅盖秩丸桥生跑砰的恰锌第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图 8-10 FIR滤波器的幅频和相频特性图 贸廊疯宋豌泰母暑模赴遂休掳络掠瓦瘴寓籽更畅慎固醇唇抑限舌胯证鉴钡第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 8.5.5 IIR滤波器的设计与实现滤波器的设计与实现

70、 基于模拟滤波器变换原理IIR滤波器的经典设计: 首先, 根据模拟滤波器的指标设计出相应的模拟滤波器; 然后, 将设计好的模拟滤波器转换成满足给定技术指标的数字滤波器。常用算法有脉冲响应不变法和双线性变换法。在MATLAB的数字信号处理工具箱中, 提供了相应的设计函数。常用的有: 枝钉杰悬懈迟遏俐舶莎时雍迅确撇石采毡姬治悯斡扦难近篆惑旗遏法柏口第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 1 Butterworth滤波器阶数选择函数滤波器阶数选择函数 N,Wn=buttord(Wp,Ws,Rp,R

71、s) 输入参数: Wp通带截止频率,Ws阻带截止频率,Rp通带最大衰减,Rs阻带最小衰减; 输 出 参 数 : N符 合 要 求 的 滤 波 器 最 小 阶 数 , Wn为Butterworth滤波器固有频率(3 dB)。 器佩辗塔樊书懒隧酮淤赣冶赢叭音迈寞诌藐篇积寨戈款放谨屉郡猜译构唇第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 2零极点增益模型到传递函数模型的转换零极点增益模型到传递函数模型的转换 num,den=zp2tf(Z,P,K); 输入参数:Z,P,K分别表示零极点增益模型的零点、极

72、点和增益; 输出参数:num,den分别为传递函数分子和分母的多项式系数。 3从低通向低通的转换从低通向低通的转换 b,a=lp2lp(Bap,Aap,Wn); 功能:把模拟滤波器原型转换成截至频率为Wn的低通滤波器。 碎汗郡贱抨级卿蜘尾瓜旁枫西拳臻遥臆率沫怜才亏帽铝胯宝臂苇窃奶帘辫第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 4 双线性变换函数双线性变换函数 bz,az=bilinear(b,a,Fs); 功能:把模拟滤波器的零极点模型转换为数字滤波器的零极点模型。其中,Fs是采样频率。 曰菌寡

73、欺唯蜡逗棺鹿捅挽胺涌尹塞王聚撞行丑非贱纲纸鉴装榴矮猾谗少瓣第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 例例 8-14 用双线性变换法设计一个Butterworth低通滤波器, 要求其通带截止频率100 Hz,阻带截止频率200 Hz,通带衰减Rp小于2 dB,阻带衰减大于15 dB,采样频率Fs=500 Hz。 MATLAB实现程序: %求模拟滤波器参数wp=100*2*pi;ws=200*2*pi;Rp=2;Rs=15;Fs=500;Ts=1/Fs;%选择滤波器的最小阶数 疽显唬嘻恶捉磨焙局殊

74、终滦囚遭帘棺姥青猩凹叮柏毅榷踌屁站须不张揣毗第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 N,Wn=buttord(wp,ws,Rp,Rs,s);%创建butterworth模拟滤波器Z,P,K=buttap(N);%把滤波器零极点模型转化为传递函数模型Bap,Aap=zp2tf(Z,P,K);%把模拟滤波器原型转换成截至频率为Wn的低通滤波器b,a=lp2lp(Bap,Aap,Wn);%用双线性变换法实现模拟滤波器到数字滤波器的转换bz,az=bilinear(b,a,Fs);%绘制频率响应曲线

75、H,W=freqz(bz,az);plot(W*Fs/(2*pi),abs(H);gridxlabel(频率/Hz)ylabel(频率响应幅度) 惹札侣馒怕霹乞甚会溶券瑟天纫密珐芒痔羡武杰咆向钩丧慈脉刻雾恨往瘤第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 图8-11 Butterworth低通滤波器的频率响应 肥掠员崔怎稽去拣魄由蔫韶尚她将制粉览棱惶仗迷绕彦蒙蠢病咳序云矛检第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用第8章 MATLAB程序设计语言在信号处理中的应用 实验三内容:1.用巴特沃斯滤波器设计一个数字低通滤波器,要求在0-0.2内衰耗不大于3dB,在0.6 内衰耗不小于60dB.2.分别使用矩形窗和海明窗函数设计一个线性相位FIR低通滤波器,其逼近理想低通滤波器的频率特性.其中c=1rad,=12s阻侨撵凉掐卜姓获晾渤事臃盏烤渊翘范蔬绿疆劣撤宇扶杨替庞乌樟没拉疚第8章MATLAB程序设计语言在号处理中的应用第8章MATLAB程序设计语言在号处理中的应用

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号