第8章 MATLAB程序设计语言 在信号处理中的应用 8.1 概述 8.2 基本数值运算 8.3 基本语句 8.4 MATLAB函数

Slides:



Advertisements
Similar presentations
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
Advertisements

2.8 函数的微分 1 微分的定义 2 微分的几何意义 3 微分公式与微分运算法则 4 微分在近似计算中的应用.
第五章 二次型. 第五章 二次型 知识点1---二次型及其矩阵表示 二次型的基本概念 1. 线性变换与合同矩阵 2.
MATLAB入门及其信号处理应用 1 概述 2 基本数值运算 3 基本语句 4 MATLAB函数 5 MATLAB在信号处理中的应用举例.
Tool Command Language --11级ACM班 金天行.
第四章 数字滤波器基础 本章要点 数字滤波器 Z变换 数字滤波器的组成 数字滤波器的类型 差分方程的传递函数 Z平面的零-极点分布图
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
Signals and Systems Lecture 28
第4章 MATLAB在信号处理中的应用 4.1 信号及其表示 4.2 信号的基本运算 4.3 信号的能量和功率 4.4 线性时不变系统
第2章 Z变换 Z变换的定义与收敛域 Z反变换 系统的稳定性和H(z) 系统函数.
Matlab 中IIR数字滤波器设计相关函数
Hadoop I/O By ShiChaojie.
线性代数机算与应用 李仁先 2018/11/24.
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
现代电子技术实验 4.11 RC带通滤波器的设计与测试.
第二章 离散傅里叶变换 及其快速算法(8学时 )
走进编程 程序的顺序结构(二).
元素替换法 ——行列式按行(列)展开(推论)
实验三 数字滤波器设计 ( Filter Design)
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
  MATLAB操作基础 《信息隐藏实验教程》教学幻灯片 一.
1.2 MATLAB变量表达式与数据格式 MATLAB变量与表达式 MATLAB的数据显示格式
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
第二章 Java语言基础.
实验六 积分器、微分器.
授課教授:張寶基 助教:梁凱雯 郭千豪 音視訊處理實驗室 2014 / 9 / 30
Windows 7 的系统设置.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第一章 函数与极限.
第4章 PHP流程控制语句.
C语言程序设计 主讲教师:陆幼利.
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
2.1.
第四章习题.
晶体管及其小信号放大 -单管共射电路的频率特性.
Three stability circuits analysis with TINA-TI
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
晶体管及其小信号放大 -单管共射电路的频率特性.
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
项目二:HTML语言基础.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
2019/5/2 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 08:20:28.
实验一 熟悉MATLAB环境 常用离散时间信号的仿真.
2019/5/4 实验三 离散傅立叶变换的性质及应用 06:11:49.
第16讲 相似矩阵与方阵的对角化 主要内容: 1.相似矩阵 2. 方阵的对角化.
iSIGHT 基本培训 使用 Excel的栅栏问题
2019/5/11 实验四 FIR滤波器的特性及应用 05:31:12.
2019/5/11 实验三 线性相位FIR滤波器的特性 05:31:30.
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
建模常见问题MATLAB求解  .
2.2矩阵的代数运算.
分数再认识三 真假带分数的练习课.
第15讲 特征值与特征向量的性质 主要内容:特征值与特征向量的性质.
线 性 代 数 厦门大学线性代数教学组 2019年5月12日4时19分 / 45.
2019/5/21 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 11:21:44.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Python 环境搭建 基于Anaconda和VSCode.
§2 方阵的特征值与特征向量.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
第四章 UNIX文件系统.
第6章 IIR数字滤波器的设计 全通系统 最小相位系统 模拟低通滤波器设计 脉冲响应不变法 双线性变换法 模拟域频率变换.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
§4.5 最大公因式的矩阵求法( Ⅱ ).
Presentation transcript:

第8章 MATLAB程序设计语言 在信号处理中的应用 8.1 概述 8.2 基本数值运算 8.3 基本语句 8.4 MATLAB函数 8.1 概述 8.2 基本数值运算 8.3 基本语句 8.4 MATLAB函数 8.5 MATLAB在信号处理中的应用举例

8.1 概 述 8.1.1 MATLAB程序设计语言简介 MATLAB,Matrix Laboratory的缩写,是由Mathworks公司开发的一套用于科学工程计算的可视化高性能语言,具有强大的矩阵运算能力。 与大家常用的Fortran和C等高级语言相比,MATLAB的语法规则更简单,更贴近人的思维方式,被称之为“草稿纸式的语言”。截至目前,MATLAB已经发展到12.1版, 适用于所有32位的Windows操作系统, 按NTFS(NT文件系统)格式下完全安装约需 850 MB。MATLAB软件主要由主包、仿真系统和工具箱三大部分组成。

8.1.2 MATLAB应用入门 1. MATLAB的安装与卸载 MATLAB软件在用户接口设计上具有较强的亲和力,其安装过程比较典型, 直接运行光盘中的安装向导支撑程序SETUP.exe, 按其提示一步步选择即可。MATLAB自身带有卸载程序,在其安装目录下有uninstall子目录,运行该目录下的uninstall.exe即可; 也可以通过Windows系统的安装卸载程序进行卸载。

2. MATLAB的启动与退出 MATLAB安装完成后,会自动在Windows桌面上生成一个快捷方式, 它是指向安装目录下\bin\win32\matlab.exe的链接, 双击它即可来到MATLAB集成环境的基本窗口,通常称之为命令窗口。 MATLAB的退出与普通WIN32的程序一样, 值得一提的是它有一个自身专有的快捷键Ctrl+Q。

3. MATLAB界面简介 图 8-1 MATLAB基本界面——命令窗口

1) 菜单栏 菜单栏中包括File、Edit、View、Web、Window和Help六个菜单项。这里着重介绍File项。  File项是数据输入/输出的接口, 包括10个子项, 这里重点介绍其中的5个子项:  New: 新建文件项。 有四个选择: MFile(.M,文本格式的MATLAB程序文件, 可以直接通过文件名的方式在MATLAB环境下解释运行); Figure(图形); Model(仿真模型文件)和GUI(可视化界面文件)。

Open: 打开所有MATLAB支持的文件格式,系统将自动识别并采用相应的程序对文件进行处理。例如, 打开一个 Open: 打开所有MATLAB支持的文件格式,系统将自动识别并采用相应的程序对文件进行处理。例如, 打开一个.m文件, 系统将自动打开M文件编辑器对它进行编辑。  Import Data...: 导入用于MATLAB处理的数据函数,包括各种图像文件、声音文件和.mat文件。  Save Workspace As...: 将工作空间的变量以.mat(二进制)或ASCII文本的形式存入文件。  Set Path...: 设置工作路径。可以打开路径设置(Set Path)对话框(图8-2),将用户自己建立的目录加入MATLAB的目录系统中, 以便所编制的文件能够在MATLAB环境中直接调用。

图 8-2 路径设置对话框

单击Add Folder. 按钮可以将你的一个文件夹加入到系统路径中; Add with Subfolders 单击Add Folder... 按钮可以将你的一个文件夹加入到系统路径中; Add with Subfolders... 允许把一个文件夹包括其所有的子文件夹加入到系统路径中。这两种操作均可以直观地在右侧的路径栏内看到结果。 选中一个加入的文件夹, 你可以利用Move to Top(移至所有路径的最前面), Move Up(上移一个), Move Down(下移一个), Move to Bottom(移至所有路径的最后面)等四个按钮将改变文件在系统路径中的排列位置以利于对文件的搜索使用, 也可以利用Remove按钮将其删除。对路径操作完毕后,按Save按钮予以保存; 按Close按钮关闭本对话框; 按Revert按钮取消所有未保存的改动; 按Default按钮将还原到MATLAB安装时的路径设置; 按Help按钮则启动帮助系统解答疑难。

2) 命令行区 对输入命令的解释MATLAB按以下顺序进行:  ① 检查它是否是工作空间中的变量, 是则显示变量内容。 ② 检查它是否是嵌入函数, 是则运行之。 ③ 检查它是否是子函数。 ④ 检查它是否是私有函数。  ⑤ 检查它是否是位于MATLAB搜索路径范围内的函数文件或脚本文件。  请注意,如果有两个以上的方案与输入的命令相匹配, MATLAB将只执行第一个匹配。

4. MATLAB常用命令 表8-1 MATLAB常用命令

8.2 基本数值运算 8.2.1 MATLAB内部特殊变量和常数 MATLAB内部有很多变量和常数, 用以表达特殊含义。常用的有: (1) 变量ans: 指示当前未定义变量名的答案。  (2) 常数eps:表示浮点相对精度, 其值是从1.0到下一个最大浮点数之间的差值。该变量值作为一些MATLAB函数计算的相对浮点精度,按IEEE标准, eps=2-52, 近似为2.2204e-016。

(3) 常数Inf: 表示无穷大。 当输入或计算中有除以0时产生Inf。  (4) 虚数单位i,j: 表示复数虚部单位, 相当于 。 (5) NaN: 表示不定型值, 是由 0/0 运算产生的。  (6) 常数pi: 表示圆周率π, 其值为3.141 592 653 589 7…。

8.2.2 变量类型 1. 变量命名规则 MATLAB中对变量的命名应遵循以下规则:  (1) 变量名可以由字母、 数字和下划线混合组成, 但必须以字母开头。 (2) 字符长度不能大于31。 (3) 变量命名区分大小写。

2. 局部变量和全局变量 局部变量是指那些每个函数体内自己定义的,不能从其他函数和MATLAB工作空间访问的变量。  全局变量是指用关键字“global”声明的变量。 全局变量名应尽量大写,并能反映它本身的含义。如果需要在工作空间和几个函数中都能访问一个全局变量,必须在工作空间和这几个函数中都声明该变量是全局的。

8.2.3 矩阵及其运算 MATLAB具有强大的矩阵运算和数据处理功能, 对矩阵的处理必须遵从代数规则。  1. 矩阵生成 1) 一般矩阵的生成 对于一般的矩阵MATLAB的生成方法有多种。 最简单的方法是从键盘直接输入矩阵元素。直接输入矩阵元素时应注意: 各元素之间用空格或逗号隔开,用分号或回车结束矩阵行,用中括号把矩阵所有元素括起来。

例8-1 在工作空间产生一个3×3矩阵A可用MATLAB语言描述如下:  4 5 6 7 8 9] 运行结果: A= 1 2 3 7 8 9

2) 特殊矩阵的生成 对于特殊的矩阵可直接调用MATLAB的函数生成。  用函数zeros生成全0矩阵:格式 B=zeros(m,n)生成m×n的全0阵。  用函数ones生成全1矩阵:格式 B=ones(m,n)生成m×n的全1阵。  用函数eye生成单位阵:格式 B=eye(m,n)生成m×n矩阵, 其中对角线元素全为1,其他元素为0。

2. 矩阵的运算 矩阵的运算有基本运算和函数运算两种类型。基本运算包括矩阵的加、减、乘、除、乘方、求转置、求逆等,其主要特点是通过MATLAB提供的基本运算符+、-、*、/(\)、^等即可完成。函数运算主要是通过调用MATLAB系统内置的运算函数来求取矩阵的行列式(det(A)), 求秩(rank(A)), 求特征值和特征向量([V, D]=eig(A)), 求Jordan标准形(jordan(A))和矩阵分解等。需要用时可以参阅联机帮助和相关参考书。

例 8-2 矩阵的基本运算。 A=[1, 2, 3; 4, 5, 6]; B =[6, 5, 4; 3, 2, 1]; C =A+B %计算两个矩阵的和 D =B′ %计算矩阵B的转置 E=A*D %做矩阵乘法,必须要满足矩阵乘法的基本要求 %E应该是2阶方阵 F=det(E) %求E的行列式值 G=E^(-1) %求E的逆

输出结果:  C= 7 7 7 D= 6 3 5 2 4 1 E= 28 10 73 28 F=54 G= 0.5185 -0.1852 -1.3519 0.5185

8.3 基本语句 8.3.1 程序控制语句 1. 循环语句 MATLAB的循环语句包括for循环和while循环两种类型。  1. 循环语句 MATLAB的循环语句包括for循环和while循环两种类型。  1) for循环 语法格式:  for 循环变量 = 起始值: 步长: 终止值 循环体 end

起始值和终止值为一整形数,步长可以为整数或小数,省略步长时,默认步长为1。执行for循环时,判定循环变量的值是否大于(步长为负时则判定是否小于)终止值,不大于(步长为负时则小于)则执行循环体, 执行完毕后加上步长, 大于(步长为负时则小于)终止值后退出循环。

例 8-3 给矩阵A、B赋值。  MATLAB 语句及运行结果如下:  k=5; a=zeros(k, k) %矩阵赋零初值 for m=1∶k for n=1∶k a(m,n)=1/(m+n-1);  end for i=m∶-1∶1 b(i)=i;  end

运行结果:  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.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111 b= 1 2 3 4 5

2) while循环 语法格式:  while 表达式 循环体 end 其执行方式为:若表达式为真(运算值非0),则执行循环体; 若表达式为假(运算结果为0),则退出循环体,执行end后的语句。

例 8-4 a=3; while a a=a-1 end 输出: a=2 a=1 a=0

2. 条件转移语句 条件转移语句有if和switch两种。  1) if语句 MATLAB中if语句的用法与其他高级语言相类似, 其基本语法格式有以下几种:  格式一: if 逻辑表达式 执行语句 end

格式二: if 逻辑表达式 执行语句1 else 执行语句2 end 格式三: if 逻辑表达式1 else if 逻辑表达式2

2) switch语句 switch语句的用法与其他高级语言相类似, 其基本语法格式为: switch表达式(标量或字符串) case 值1 语句1 case 值2 语句2 … otherwise  语句n end

8.3.2 绘图语句 常用的MATLAB绘图语句有figure、plot、subplot、stem等, 图形修饰语句有title、axis、text等。  1. figure figure有两种用法,只用一句figure命令,会创建一个新的图形窗口,并返回一个整数型的窗口编号。figure(n)表示将第n号图形窗口作为当前的图形窗口, 并将其显示在所有窗口的最前面; 如果该图形窗口不存在, 则新建一个窗口,并赋以编号n。

2. plot 线型绘图函数。用法为plot(x,y,′s′)。参数x为横轴变量,y为纵轴变量,s用以控制图形的基本特征如颜色、粗细等,通常可以省略,常用方法如表8-2所示。 表8-2 常用绘图参数的含义

3. Stem 绘制离散序列图,常用格式stem(y)和stem(x,y)分别和相应的plot函数的绘图规则相同,只是用stem命令绘制的是离散序列图。  4. subplot subplot(m,n,i) 图形显示时分割窗口命令,把一个图形窗口分为m行,n列,m×n个小窗口,并指定第i个小窗口为当前窗口。

5. 绘图修饰命令 在绘制图形时,我们通常需要为图形添加各种注记以增加可读性。 在plot语句后使用title(′标题′)可以在图形上方添加标题, 使用xlabel(′标记′)或ylabel(′标记′)为X轴或Y轴添加说明,使用text(X值、Y值、′想加的标示′)可以在图形中任意位置添加标示。

例 8-5 画图基本语句如图 8 - 3 所示。 图 8-3 例8-5中绘制的几种正弦波形

MATLAB 语句及运行结果如下:  x=0:0.1*pi:2*pi; %定义x向量 figure(1); %创建一个新的图形窗口, 编号为1 subplot(2,2,1); %将窗口划分为2行, 2列, 在第1个窗口中作图 plot(x,sin(x)); %画图 title(′正弦线′); %给图形加标题 subplot(2,2,2); %在第2个窗口中作图 plot(x,sin(x),′r′); %画一正弦波, 红色 xlabel(′X′); %给x轴加说明

ylabel(′SIN(X)′); %给y轴加说明 subplot(2,2,3); %在第2个窗口中作图 plot(x,sin(x),′--′); %画一正弦波, 破折线 subplot(2,2,4); %在第2个窗口中作图 plot(x,sin(x),′r+′); %画一正弦波, 红色破折线 text(4,0,′注记′);

8.4 MATLAB函数 8.4.1 函数及其调用方法 在MATLAB语言中,M文件有两种形式:脚本和函数。  脚本没有输入/输出参数,只是一些函数和命令的组合。它可以在MATLAB环境下直接执行,也可以访问存在于整个工作空间内的数据。 由脚本建立的变量在脚本执行完后仍将保留在工作空间中可以继续对其进行操作,直到使用clear命令对其清除为止。 函数是MATLAB语言的重要组成部分。MATLAB提供的各种工具箱中的M文件几乎都是以函数的形式给出的。函数接收输入参数,返回输出参数,且只能访问该函数本身工作空间中的变量,从命令窗或其他函数中不能对其工作空间的变量进行访问。

1. 函数结构 MATLAB语言中提供的函数通常由以下五个部分组成: (1) 函数定义行; (2) H1行; (3) 函数帮助文件; (4) 函数体; (5) 注释。

这五个部分中最重要的是函数定义行和函数体。  函数定义行:MATLAB语言在M文件的第一行用关键字“function”把M文件定义为一个函数,并指定它的名字(必须和文件名相同),同时也定义了函数的输入和输出参数。 函数定义行是一个MATLAB函数所必需的,其他各部分的内容可以没有, 这种函数称为空函数。  例如: 求最大值函数“max”的定义行可描述为 function [Y,I]=max(x)

其中, “max”为函数名, 输入参数为“x”, 输出参数为“Y”和“I”。  函数体:函数体是函数的主体部分,它包括进行运算和赋值的所有MATLAB程序代码。函数体中可以包括流程控制、输入/输出、计算、赋值、注释以及函数调用和脚本文件调用等。 在函数体中完成对输出参数的计算。

2. 函数调用 函数调用的过程实际上就是参数传递的过程。例如,在一个脚本文件里调用函数“max”可采用如下方式:  n=1:20; a=sin(2*pi*n/20); [Y,I]=max(a); 该调用过程把变量“a”传给了函数中的输入参数“x”,然后把函数运算的返回值传给输出参数“Y”和“I”。其中,Y是a序列的最大值,I是最大值Y对应的坐标值。

8.4.2 常用数字信号处理函数 1. 信号产生函数 1) 三角波或锯齿波发生函数: sawtooth() 语法格式:sawtooth(t,width)。产生以2π 为周期幅值范围在[-1,+1]之间的三角波或锯齿波。参数t为时间向量; width是[0,1]之间的数, 它决定函数在一个周期内上升部分和下降部分的比例。width=0.5产生三角波,width=1产生锯齿波,此时函数可简写为:sawtooth(t)。

2)方波发生函数: square() 语法格式:square(t)。产生以2π为周期幅值范围在[-1, +1]之间的方波,参数t为时间向量。  3)sinc发生函数: sinc() 语法格式: sinc(t) t≠0 t=0

例 8-6 信号产生举例 clear all t=0:0.0001:0.1; 例 8-6 信号产生举例 clear all t=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 - 4 所示。 subplot(223) plot(t,x3) axis([0,0.1,-1.2,1.2]) x4=sinc(t); %产生抽样函数 subplot(224) plot(t,x4) 运行结果如图 8 - 4 所示。

(a) 锯齿波; (b) 三角波; (c) 方波; (d) 抽样函数 图 8-4 常用信号 (a) 锯齿波; (b) 三角波; (c) 方波; (d) 抽样函数

2.常用窗的MATLAB函数表示 表 8-3 常用窗的MATLAB函数表示 窗名称 MATLAB函数 矩形窗 boxcar(N) 哈明窗 hamming(N) 三角窗 triang(N) 布莱克曼窗 blackman(N) 汉宁窗 hanning(N) 凯塞-贝尔窗 kaiser(N, BETA)

说明:除凯塞-贝尔窗外其他窗函数的使用方法相同。 函数的参数N是窗长度,调用结果为一个列向量。  例 产生50点的哈明窗可用MATLAB语言表示为: y=hamming(50);plot(y)凯塞-贝尔窗函数是一组可调窗函数。其语法格式为: Kaiser(N, BETA), 返回一个N点的Kaiser窗,参数BETA是窗函数表达式中的参数β,其含义参照前面的理论部分介绍。

3. 滤波器分析与实现函数 1) 取绝对值: abs() 语法格式: abs(x)。 当x为实数时计算x的绝对值;x为复数时得到的是复数的模值;x为字符串时得到各字符的ASCII码。 2) 取相角:angle() 语法格式:angle(z)。 求复矢量或复矩阵的相角,结果为一个以弧度为单位介于-π和+π之间的值。

语法格式:conv(x,y)。 求矢量x和y的卷积,若x(n)和y(n)的长度分别为M和N, 则返回值是长度为M+N-1的矢量。 MATLAB语句如下:  x=[3 4 5]; y=[2 6 7 8]; z=conv(x,y) 运行结果: z= 6 26 55 82 67 40

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中a0≠1时, MATLAB会自动归一化系数;若a0=0,系统给出出错信息。

5) 计算数字滤波器H(z)的频率响应H(ejω):freqz() 语法格式:[H,W]=freqz(B,A,N) 得到数字滤波器的N点的频率向量W和与之相对应的N点的频率响应向量H,计算所得的N个频率点均匀的分布在[0, π]上。参数A=[a0 a1 a2 … aM], B=[b0 b1 b2 … bN]是滤波器系数, 即滤波器H(z)形式如下:

参数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中。

6) 计算数字滤波器H(z)的单位脉冲响应h(n):impz() 语法格式:[H,T]=impz(B,A)。 滤波器用传递函数模型限定,参数B, A分别为H(z)分子分母多项式的系数,函数返回滤波器的冲击响应列向量H和时间即采样间隔列向量T。

4. 变换函数 1) 一维快速离散Fourier变换: fft() 语法格式:y=fft(x)。 y是计算信号x的快速离散傅里叶变换。 当x为矩阵时,计算x中每一列信号的离散傅里叶变换。当x的长度为2的幂时,用基2算法;否则,采用较慢的分裂基算法。  y=fft(x,n)。计算n点的FFT。当x的长度大于n时,截断x; 否则补零。

2) 一维快速离散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-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-6 信号的DCT和IDCT变换

实验一内容: 1.分析并绘出常用函数(a) 锯齿波; (b) 三角波; (c) 方波; (d) 抽样函数 的时域特性波形. 2.分析并绘出常用窗函数时域特性波形.

8.5 MATLAB在信号处理中的应用举例 8.5.1 线性卷积与圆周卷积的计算 例 8-10 已知两序列: 0≤n≤11 其他 0≤n≤5 例 8-10 已知两序列: 0≤n≤11 其他 0≤n≤5 求它们的线性卷积yl(n)=h(n)*x(n)和N点的圆周卷积y(n)=h(n)○N x(n), 并研究两者之间的关系。 N

实现程序:  计算圆周卷积的函数。 function yc=circonv(x1,x2,N) %直接计算圆周卷积 y=circonv(x1,x2,N) %输出参数: 圆周卷积结果y %输入参数: 需要计算圆周卷积的序列x1,x2和圆周卷积的点数N if length(x1)>N error(′N must not be less than length of x1′); end if length(x2)>N error(′N must not be less than length of x2′); end

%以上语句判断两个序列的长度是否小于N x1=[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-1  n=[0:1:N-1]; x2=x2(mod(-n,N)+1); %生成序列x2((-n))N H=zeros(N,N); for n=1:1:N H(n,:)=cirshiftd(x2,n-1,N); %该矩阵的k行为x2((k-1-n))N end yc=x1*H′; %计算循环卷积

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:how much to shift %N:circular length %y:output shifted sequence if length(x)>N error(′the length of x must be less than N′); end x=[x,zeros(1,N-length(x))]; n=[0:1:N-1]; y=x(mod(n-m,N)+1);

(2) 研究两者之间的关系。 clear all; n=[0:1:11]; m=[0:1:5]; N1=length(n); (2) 研究两者之间的关系。 clear all; 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计算线性卷积

ycn=circonv(xn,hn,N1); %用函数circonv计算N1点圆周卷积 ny1=[0:1:length(yln)-1]; ny2=[0:1:length(ycn)-1]; subplot(2,1,1); %画图 stem(ny1,yln); ylabel(′线性卷积′) subplot(2,1,2); stem(ny2,ycn); ylabel(′圆周卷积′) axis([0,16,0,4]);

图 8-7 线性卷积和圆周卷积的比较

8.5.2 利用离散傅里叶变换(DFT)分析信号的频谱 例 8-11 已知序列x(n)=2 sin(0.48πn)+cos(0.52πn) 0≤n<100, 试绘制x(n)及它的离散傅里叶变换|X(k)|图。  MATLAB实现程序: clear all N=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)

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-8 信号及其离散傅里叶变换

8.5.3 利用FFT实现线性卷积 若序列x1(n)、x2(n)为长度分别为N1、N2的有限长序列,yc(n)=x1(n)○x2(n),yl(n)=x1(n) * x2(n)。由DFT的性质可知:当N≥N1+N2-1时有yl(n)=yc(n)=IDFT{DFT[x1(n)]·DFT[x2(n)]}。序列较长时DFT运算通常用快速算法FFT实现。在MATLAB的信号处理工具箱中函数FFT和IFFT用于快速傅里叶变换和逆变换。

例 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+N2-1; XK=fft(xn,N);

HK=fft(hn,N); YK=XK.*HK; yn=ifft(YK,N); if all(imag(xn)==0)&(all(imag(hn)==0)) %实序列的循环卷积仍然为实序列 yn=real(yn); end x=0:N-1; stem(x,yn,′.′)

图 8-9 利用FFT实现线性卷积

实验二内容: 1.计算序列x(n)=[1,2,3,4,5],与序列h(n)=[2,-2,3,5]的线性卷积和N=5、10点的圆周卷积. 2.某序列为 ,使用FFT函数分析其频谱. 利用不同宽度N的矩形窗截短该序列,N分别为20,40,160,观察不同长度N的窗对谱分析结果的影响.

8.5.4 FIR滤波器的设计与实现 FIR滤波器的设计方法有窗函数法和频率采样法两种,在MATLAB的数字信号处理工具箱中提供了函数fir1。fir1是采用经典窗函数法设计线性相位FIR数字滤波器,且具有标准低通、带通、高通和带阻等类型。  语法格式:  B=fir1(n,Wn) B=fir1(n,Wn,′ftype′) B=fir1(n,Wn,window) B=fir1(n,Wn,′ftype′,window)

其中,n为FIR滤波器的阶数,对于高通、带阻滤波器n取偶数。Wn为滤波器截止频率,取值范围0~1。对于带通、带阻滤波器,Wn=[W1,W2],且W1<W2。 ′ftype′为滤波器类型。 缺省时为低通或带通滤波器, 为′high′时是高通滤波器, 为′stop′时是带阻滤波器。 window为窗函数,列向量,其长度为n+1; 缺省时,自动取hamming窗。输出参数B为FIR滤波器系数向量, 长度为n+1。

例 8-13 用窗函数法设计一个线性相位FIR低通滤波器,性能指标:通带截止频率Wp=0. 2π,阻带截止频率Ws=0 例 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=fir1(N,Wn/pi,hanning(N+1)); freqz(b,1,512)

图 8-10 FIR滤波器的幅频和相频特性图

8.5.5 IIR滤波器的设计与实现 基于模拟滤波器变换原理IIR滤波器的经典设计: 首先, 根据模拟滤波器的指标设计出相应的模拟滤波器; 然后, 将设计好的模拟滤波器转换成满足给定技术指标的数字滤波器。常用算法有脉冲响应不变法和双线性变换法。在MATLAB的数字信号处理工具箱中, 提供了相应的设计函数。常用的有:

1. Butterworth滤波器阶数选择函数 [N,Wn]=buttord(Wp,Ws,Rp,Rs) 输入参数: Wp通带截止频率,Ws阻带截止频率,Rp通带最大衰减,Rs阻带最小衰减;  输出参数:N符合要求的滤波器最小阶数,Wn为Butterworth滤波器固有频率(3 dB)。

2.零极点增益模型到传递函数模型的转换 [num,den]=zp2tf(Z,P,K); 输入参数:Z,P,K分别表示零极点增益模型的零点、 极点和增益;  输出参数:num,den分别为传递函数分子和分母的多项式系数。  3.从低通向低通的转换 [b,a]=lp2lp(Bap,Aap,Wn); 功能:把模拟滤波器原型转换成截至频率为Wn的低通滤波器。

4. 双线性变换函数 [bz,az]=bilinear(b,a,Fs); 功能:把模拟滤波器的零极点模型转换为数字滤波器的零极点模型。其中,Fs是采样频率。

例 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; %选择滤波器的最小阶数

[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); %绘制频率响应曲线 [H,W]=freqz(bz,az); plot(W*Fs/(2*pi),abs(H)); grid xlabel(′频率/Hz′) ylabel(′频率响应幅度′)

图8-11 Butterworth低通滤波器的频率响应

实验三内容: 1.用巴特沃斯滤波器设计一个数字低通滤波器,要求在0-0.2π内衰耗不大于3dB,在0.6 π –π内衰耗不小于60dB. 2.分别使用矩形窗和海明窗函数设计一个线性相位FIR低通滤波器,其逼近理想低通滤波器的频率特性. 其中ωc=1rad,τ=12s