《2022年2022年离散信号及离散系统的MATLAB编程实 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年离散信号及离散系统的MATLAB编程实 .pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数字信号处理课程实验报告实验名称离散信号及离散系统的MATLAB编程实现系别教师姓名实验地点实验日期一、实验内容1、 用 MATLAB 仿真(编写)离散序列2、 常见序列运算3、 差分方程的求解4、 系统零极点的求解。( 红色部分为必做项目)二、实验目的1.复习离散时间的信号和系统,复习离散时间重要类型的信号和它们的运算的实现。2.熟悉 MATLAB软件的集成开发环境,学会利用MA TLAB 编程及获得帮助的方法。3.学会利用 MATLAB的绘图功能。三、涉及实验的相关情况介绍(包含使用软件或实验设备等情况)matlab 软件,计算机四、实验试做记录(含程序、数据记录及分析)1、Matlab
2、表示序列MATLAB中,可采用向量表示序列,由于MATLAB中对序列下标默认为从1 开始递增,因此要表示离散信号., x(1), x(0), x(-1),.)(nx,一般应采用两个向量分别对信号的自变量和因变量进行描述。如7,3,4, 1,0, 1, 1, 2)(nx, n= -34,在 MATLAB中表示为 n = -3, -2, -1, 0, 1, 2, 3, 4; %自变量取值 x = 2, 1, -1, 0, 1, 4, 3, 7; %因变量取值说明:(1)向量可用方括号 表示。(2)当向量取值连续变化时可用冒号运算符“:”简化赋值过程,如)(nx的 n 值,可简化为n=-3 :4或
3、n= -3:4 。(3)分号“;”表示不回显表达式的值。(4) “%”表示其后内容为注释对象。(5)符号“ ”是 MATLAB 命令窗口的输入提示符,此外,为便于多次调用,也可在m 文件中输入相应的命令语句。利用 MATLAB ,还可对信号的波形进行描述,常采用的绘图语句有stem,plot,subplot, axis,title ,xlabel,ylabel,gtext, hold on, hold off, grid 等。其中 stem 绘制离散图形;plot 绘制连续图形;subplot 用于绘制子图,应在stem 或 plot 语句前调用; axis 指定 x 和 y 轴的取值范围,用
4、在stem名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - 或 plot 语句后; title 标注图形名称, xlabel, ylabel 分别标注x 轴和 y 轴名称; gtext 可将标注内容放置在鼠标点击处;hold on 和 hold off 用于控制对象绘制方式,是在原图上还是在新图上绘制;grid用于绘制网格。以上函数具体使用方法可通过在命令窗口中输入help 加函数名进行查阅,如“help stem”语句。部分绘图
5、语句的应用见下面语句,对应的波形图为图1-1-1。% 画子图 1 subplot( 1, 2, 1); stem (n, x1); %x1 为序列axis(-5, 5, -2, 2); %向量的前两个值为x 轴的取值范围,后两个为y 轴的取值范围title ( 例 1 序列 ); xlabel ( n ); ylabel (x1(n) );% 画子图 2 subplot( 1, 2, 2); stem (n, x2); axis(0, 20, 0, 10); title (例 2 序列 );xlabel ( n ); ylabel (x2(n) );图 1-1-1 序列波形图2、常用信号的表示
6、方法(1)单位采样序列000,0, 1)(nnnnnn在21nnn区间的值, MATLAB中可用下列表达式描述n = n1 : n2 ; x = (n - n0) = =0 ; 为使用方便,也可将上式描述成MATLAB 函数,即function x , n = impseq (n0, n1, n2) n = n1 : n2 ; x = (n - n0) = =0 ; Stem(n,x) (2)单位阶跃序列000, 0, 1)(nnnnnnu名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - -
7、第 2 页,共 6 页 - - - - - - - - - 在21nnn区间的值, MATLAB中可用下列表达式描述: n = n1 : n2 ; x = (n - n0) =0 ; (3)实数指数序列nanxn,)(例如要实现序列100,)9.0()(nnxn,MATLAB中可用下列表达式描述: n = 0 : 10 ; x =(0.9 ). n ; (4)复数指数序列nenxnj,)()(0例如要实现序列100,)()32(nenxnj,MATLAB中可用下列表达式描述: n = 0 : 10 ; x = exp( (2+3j)*n ) ; (5)正余弦序列nnnx),cos()(0例如要
8、实现序列100),5.0sin(2)3/1.0cos(3)(nnnnx,MATLAB中对应的语句为:n = 0 : 10 ; )5.0sin(2)3/1.0cos(3npipinpix(6)随机序列在 MA TLAB 中,有两种随机序列可用。rand (1, N) 产生其元素在0,1之间均匀分布的1N 维随机序列矩阵。randn (1,N) 则产生均值为0,方差为1 的 1N 维高斯随机序列矩阵。其他随机序列都可用这两种函数的变换得到。(7)周期序列周期为 N,长度为 L(L=P*N )的周期序列)(nx可视为信号Nnnx0),(复制 P 次后产生的结果。 MATLAB中可用下列两种方法表示:
9、法 1:;,.,xxxx法 2:);, 1 (Ponesxx%产生 P 列 x;x 是一个行向量(:);xx%长的列向量; xx%长的行向量说明:运算符“”为向量的转置操作符,实现行向量与列向量的相互转化;函数 ones(1,P) 用以产生 1 行 P 列的 1 矩阵,与此对应函数zeros(n,m)产生 n 行 m 列的 0 矩阵;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 矩阵x的冒号运算即(:)x将矩阵所有列向量依次连
10、接在一起,构成一列向量。3、 序列运算(1)信号的加减MATLAB中可用算术运算符“+”和“ -”分别实现序列的加法和减法运算,此时两序列的长度必须相等,否则需通过补零法改变信号的长度。例. 序列 x1(n) 、x2 (n) ,长度分别为n1 和 n2,其求和的MATLAB代码为:序列相加的长度的具有的长度的具有列的零值)行初始化(产生的长度%; 212)(%;2)1)2max(&)2min(21)(%; 1)1)1max(&)1min(1)(1%; 12);(, 1(1)(%);2max(),1max(max(:)2min(),1min(min(yyyxnyxnnnnfindyxnyxnnn
11、nfindynlengthyynlengthzerosynynnnnn说明:函数 min (n) 可获取向量n 的最小值,函数max (n) 则获取向量n 的最大值。函数 length (n) 可取得向量n 的长度。函数 find(na)&(nb) 可获取向量n 在范围 an x=1, 2, 3; h=2, 2, 3; y=conv (x, h) y= 2 6 13 12 9 对于起点和终点为任意值的序列进行线性卷积运算,可自行扩展另一个函数conv_m,具体形式为:function y, ny= conv_m ( x, nx, h, nh) % y, ny = 线性卷积结果% x, nx =
12、 第一个信号% h, nh = 第二个信号nyb = nx (1) + nh (1); % 两向量起点之和nye = nx ( length (x)+nh ( length (h); %两向量长度之和ny = nyb : nye; y = conv (x, h); (2)差分方程LTI 离散系统也可用线性常系数差分方程描述:nmnxbknyaMmmNkk, )()(00y(n)的解在 MATLAB中可通过调用滤波器函数filter(a, b, x)完成,其中 a = a0, a1, , aN ( a00 ),b = b0, b1, , bM 分别对应差分方程中y 和 x 的各项系数, x 为输
13、入信号序列,即将差分方程看成一个滤波器,x 作为滤波器的输入信号,y 为滤波器的输出值。例,差分方程nnynynxny);2(9.0)1()()(,计算并画出其冲激响应h(n), n = -20, , 100。在 MATLAB 命令窗口中,对应程序为: b = 1 ; a = 1, -1, 0.9 ;% 注意确定 a 值时,需先将y 项移至等式左侧 n = -20: 120; x = zeros (1, length (n) ); x (21) = 0; % 描述冲激序列名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整
14、理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - h = filter ( b, a, x ); stem (n, h); % 绘制冲激响应序列axis ( -20, 120, -1.1, 1.1 ); % 设定坐标轴取值范围title ( 冲激响应 ); xlabel ( n ); ylabel ( h(n) ); %对图形名称和x 轴,、y 轴进行标注(3)系统稳定性LTI 离散系统稳定性的判别可采用两种方法:法 1:对冲激响应序列h(n)绝对值求和,判别其是否为有限值,若有限,为稳定系统。对应语句为:sum ( abs (h), 其中函数 abs
15、是取序列 h(n)的绝对值。法 2:利用系统函数H(z)的极点分布进行判断,若极点均在单位圆内,则为稳定系统。系统函数 H(z)的极点也即为差分方程中y 项对应的各系数a0, a1, , aN构成的多项式的极点,而极点可采用求根函数roots 获取。例,系统差分方程为:nnynynxny);2(9.0)1()()(,判断其稳定性。MATLAB代码为: a = 1, -1, -0.9 ; z=roots (a); magz = abs (z) magz= 0.9487 0.9487 显然极点均在单位圆内,系统稳定。因为MATLAB 语言是一种解释性语言,所以有时MATLAB 程序的执行速度不是很理想。因此尽量避免使用循环,用向量化的运算来代替循环操作。五、实验总结名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -