matlab学习003-绘制由差分方程表示的离散系统图像

发布于:2024-04-23 ⋅ 阅读:(212) ⋅ 点赞:(0)

目录

1,题目

2,使用函数求解差分方程

1)基础知识 

①filter函数和impz函数 

②zeros函数 

2)绘制图像

 3)对应代码


 

 如果连简单的信号都不会的,建议先看如下文章👇,之后再来看这篇文章,因为有些基础性的语句我没注释。就注释了新的内容。

matlab学习001-简单的矩阵输入运算及绘制信号曲线_

1,题目

设离散系统可由下列差分方程表示:

y(n)-y(n-1)+0.9y(n-2)=x(n)
计算n=(-5:40)时的系统的冲激响应。

2,使用函数求解差分方程

1)基础知识 

①filter函数和impz函数 

离散系统模型时域表示的matlab实现函数有filter函数和impz函数两种。其中,impz函数用于实现离散系统的单位冲激响应。接下来分别认识这两个函数:

 filer:滤波器。

filter函数,是利用递归或非递归滤波器对数据进行滤波。因为一个离散系统可以看作是一个滤波器,系统的输出就是输入经过滤波器滤波的结果。filter函数有两种格式:

  1. y=filer(b,a,x) →表示由向量b和a组成的系统对输入x进行滤波,系统的输出为y。
  2. [y,zf]=filter(b,a,x,zi)→zi表示输入信号的初始状态,zf表示该函数返回的系统的最终状态向量。

impz函数

impz:Impulse response of digital filter:数字滤波器的脉冲响应 。

 impz函数直接给出系统的单位冲击响应,其语法格式如下:

  • impz(b,a)

②zeros函数 

在matlab中,有很多方法可以产生单位冲击序列,但是最直接的方法就是使用matlab中的zeros函数。例如产生一个64点的单位冲击信号的matlab程序如下:

pulse=[1 zeros(1,63)]

 结果输出如下:

在上面的程序代码中的zeros函数用法详细解释请参考matlab的文档,如下👇 

绘制成图像:

 单位冲击序列也可以使用如下代码绘制:

n=0:63;
impulse=(n==0);
stem(n,impulse);

2)绘制图像

 3)对应代码

pulse=[1 zeros(1,63)]  % 产生64点的单位冲激序列
a=[1 -1 0.9]; % y函数的系数
b=[1];  % x函数的系数
rfilter=filter(b,a,pulse); % 使用filter函数
rimpz=impz(b,a,64); % 使用impz函数
subplot(211); stem(rfilter);title('使用filter函数绘制的y(n)-y(n-1)+0.9y(n-2)=x(n)');axis([-5 40 -1.5 1.5]);
subplot(212); stem(rimpz);title('使用impz函数绘制的y(n)-y(n-1)+0.9y(n-2)=x(n)');axis([-5 40 -1.5 1.5]);
%h=get(gca,'position');   %将子图横坐标范围扩为原来的3倍
%h(2)=3*h(2);
%set(gca,'position',h);

有问题请在评论区留言或者是私信我,一天8h在线。


网站公告

今日签到

点亮在社区的每一天
去签到