当前位置:文档之家› 离散信号及离散系统的MATLAB编程实现

离散信号及离散系统的MATLAB编程实现

为使用方便,也可将上式描述成MATLAB函数,即
function [x , n ] = impseq (n0, n1, n2)
n = [ n1: n2]; x = [ (n - n0) = =0 ];
Stem(n,x)
(2)单位阶跃序列
在 区间的值,MATLAB中可用下列表达式描述:
n = [ n1: n2]; x = [ (n - n0) > =0 ];
y(n)= x(-n)对应的代码为:y=fliplr (x); n= -fliplr (n);
注意:翻转后向量n的取值为负值。
(5)样本和与积
该运算是将序列中各样本值求和或求积,可分别采用函数sum(x)和prod (x)实现。具体应用时还可指定序列x参加运算的元素范围,即sum (x (n1:n2))和prod ( x (n1:n2))。
函数length (n)可取得向量n的长度。
函数find((n>a)&(n<b))可获取向量n在范围a<n<b内的取值。
(2)信号的乘除
MATLAB中两序列对应值的乘、除可分别采用点乘“.*”和点除“. /”运算符,运算时两序列的长度需相等,具体处理方法和序列求和差时的一致。
例.序列x1(n)、x2 (n),长度分别为n1和n2,其求积的MATLAB代码为:
(3)系统稳定性
LTI离散系统稳定性的判别可采用两种方法:
法1:对冲激响应序列h(n)绝对值求和,判别其是否为有限值,若有限,为稳定系统。对应语句为:sum ( abs (h)),其中函数abs是取序列h(n)的绝对值。
法2:利用系统函数H(z)的极点分布进行判断,若极点均在单位圆内,则为稳定系统。系统函数H(z)的极点也即为差分方程中y项对应的各系数[a0, a1, …, aN]构成的多项式的极点,而极点可采用求根函数roots获取。
>> h = filter ( b, a, x );
>> stem (n, h); %绘制冲激响应序列
>>axis ( [-20, 120, -1.1, 1.1 ]); %设定坐标轴取值范围
>>title ( ‘冲激响应’ ); xlabel (‘n’); ylabel ( ‘h(n)’ ); %对图形名称和x轴,、y轴进行标注
(3)移位
序列x (n)的移位操作不影响向量x,只需对向量n的每个元素加或减去一个移位值。如移位序列 等价为 ,对应的MATLAB语句为:
n=n+n0; y = x;
(4)折叠
在这个运算中,序列x (n)的每个样本都对n =0翻转,得到一个折叠后的序列y(n),MATLAB中可由函数fliplr (x)实现。
(6)信号能量
MATLAB中,计算序列x (n)能量的可采用下列两种办法:
法1:Ex = sum (x . * conj (x) ); %函数conj (x)是取复数x的共轭复数
法2:Ex = sum (abs (x) .^ 2 );
4、离散系统
一个离散时间系统,可将一个序列x (n)变换为另一个序列y (n),即将输入信号处理成输出信号。常用离散系统为线性时不变系统(LTI)。
axis([0, 20, 0, 10]);
title (‘例2序列’);
xlabel (‘n’); ylabel (‘x2(n)’);
图1-1-1序列波形图
2、常用信号的表示方法
(1)单位采样序列
在 区间的值,MATLAB中可用下列表达式描述
n = [ n1: n2]; x = [ (n - n0) = =0 ];
(3)实数指数序列
例如要实现序列 ,MATLAB中可用下列表达式描述:
n = [ 0 : 10 ]; x =(0.9 ).^ n ;
(4)复数指数序列
例如要实现序列 ,MATLAB中可用下列表达式描述:
n = [ 0 : 10 ]; x = exp( (2+3j)*n ) ;
(5)正余弦序列
例如要实现序列 ,MATLAB中对应的语句为:
%[ x, nx] =第一个信号
%[ h, nh] =第二个信号
nyb = nx (1) + nh (1); %两向量起点之和
nye = nx ( length (x))+nh ( length (h)); %两向量长度之和
ny = [nyb : nye];
y = conv (x, h);
(2)差分方程
数字信号处理课程实验报告
实验名称
离散信号及离散系统的MATLAB编程实现
系别
教师姓名
实验地点
实验日期
一、实验内容
1、用MATLAB仿真(编写)离散序列
2、常见序列运算
3、差分方程的求解
4、系统零极点的求解。
(红色部分为必做项目)
二、实验目的
1.复习离散时间的信号和系统,复习离散时间重要类型的信号和它们的运算的实现。
LTI离散系统也可用线性常系数差分方程描述:
y(n)的解在MATLAB中可通过调用滤波器函数filter(a, b, x)完成,其中a = [a0, a1, …, aN ] ( a0≠0 ),b = [b0, b1, …, bM ]分别对应差分方程中y和x的各项系数,x为输入信号序列,即将差分方程看成一个滤波器,x作为滤波器的输入信号,y为滤波器的输出值。
例,差分方程 ,计算并画出其冲激响应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; %描述冲激序列
3、序列运算
(1)信号的加减
MATLAB中可用算术运算符“+”和“-”分别实现序列的加法和减法运算,此时两序列的长度必须相等,否则需通过补零法改变信号的长度。
例.序列x1(n)、x2 (n),长度分别为n1和n2,其求和的MATLAB代码为:
说明:
函数min (n)可获取向量n的最小值,函数max (n)则获取向量n的最大值。
(1)卷积
线性时不变系统(LTI)的输入和输出关系可通过冲激响应h (n)表示
y(n)
即y(n)为x(n)与h(n)的线性卷积。MATLAB提供卷积函数conv来计算两个有限长度序列的线性卷积,并假定两个序列都从n=0开始。调用方式为:y=conv (x, h)。
例,x(n)=[1, 2, 3], h(n)=[2, 2, 3], n=[0, 1, 2], x(n)与h(n)的线性卷积代码为:
例,系统差分方程为: ,判断其稳定性。
MATLAB代码为:>> a = [1, -1, -0.9 ]; z=roots (a);
>> magz = abs (z)
magz= 0.9487
0.9487显然极点均在单 Nhomakorabea圆内,系统稳定。
五、实验总结
法1:
法2:
%产生P列x;x是一个行向量
%长的列向量
%长的行向量
说明:
运算符“’”为向量的转置操作符,实现行向量与列向量的相互转化;
函数ones(1,P)用以产生1行×P列的1矩阵,与此对应函数zeros(n,m)产生n行×m列的0矩阵;
矩阵 的冒号运算即 将矩阵所有列向量依次连接在一起,构成一列向量。
>> n = [-3, -2, -1, 0, 1, 2, 3, 4]; %自变量取值
>> x = [ 2, 1, -1, 0, 1, 4, 3, 7]; %因变量取值
说明:
(1)向量可用方括号[ ]表示。
(2)当向量取值连续变化时可用冒号运算符“:”简化赋值过程,如 的n值,可简化为
n=[-3:4]或n= -3:4。
2.熟悉MATLAB软件的集成开发环境,学会利用MATLAB编程及获得帮助的方法。
3.学会利用MATLAB的绘图功能。
三、涉及实验的相关情况介绍(包含使用软件或实验设备等情况)
四、实验试做记录(含程序、数据记录及分析)
1、Matlab表示序列
MATLAB中,可采用向量表示序列,由于MATLAB中对序列下标默认为从1开始递增,因此要表示离散信号 ,一般应采用两个向量分别对信号的自变量和因变量进行描述。如 , n= -3~4,在MATLAB中表示为
(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轴的取值范围,用在stem或plot语句后;title标注图形名称,xlabel, ylabel分别标注x轴和y轴名称;gtext可将标注内容放置在鼠标点击处;hold on和hold off用于控制对象绘制方式,是在原图上还是在新图上绘制;grid用于绘制网格。以上函数具体使用方法可通过在命令窗口中输入help加函数名进行查阅,如“help stem”语句。部分绘图语句的应用见下面语句,对应的波形图为图1-1-1。
>> x=[1, 2, 3]; h=[2, 2, 3]; y=conv (x, h)
相关主题