用MATLAB处理信号与系统中的问题,更加直观、方便、准确。

一. 理论知识

1.线性系统的响应

许多实际系统都可以用线性系统来模拟,如果线性系统的参数是常数,则该线性系统可以用线性常系数微分方程来描述,所以,求解线性系统的响应就转换成求线性常系数微分方程的解了!

线性系统响应对应微分方程解
对于一个线性系统,存在激励u(t)和响应y(t),激励和响应之间的关系可以用微分方程的形式来描述:

其中,a、b为常系数;方程为n阶线性时不变(LTI)常系数微分方程。

2.微分方程的解

既然将线性系统的响应转换为微分方程的解,那么求解微分方程就是最重要的任务了!

Ⅰ.经典解

首先看一下微分方程的经典解:完全解=齐次解+特解

齐次解仅仅取决于系统本身,特解仅仅取决于激励。

Ⅱ.完全响应

系统的响应,就是完全响应,可以分为零状态响应和零输入响应,如图:

实际上,我们分析一个系统的响应,主要是从零输入响应和零状态响应入手的。

3.零输入响应

在零输入条件下,系统的响应就是零输入响应。
零输入条件下,微分方程等式右边都为0,化为齐次方程,求出特征根,就可以求出零输入响应!
当特征根都为单根时,零输入响应如下:

4.零状态响应

在零状态条件下,系统的响应就是零状态响应。
零状态条件下,初始状态都为0,即y(0-)=0…等等,此时的微分方程为非齐次方程,求出特征根,就可以求出零状态响应!
当特征根都为单根时,零状态响应如下:

利用卷积求零状态响应

5.冲激响应

冲激响应是一种特殊的零状态响应,LTI系统处于零状态下,由单位冲激信号引起的响应就是冲激响应,一般用h(t)表示,冲激响应在后面求LTI系统响应的时候十分重要!!!
看一下冲激响应的框图表示:

6.阶跃响应

阶跃响应也是一种特殊的零状态响应,是输入为阶跃函数时系统的响应:

7.卷积求零状态响应

卷积的定义:

卷积的表示:

卷积的物理含义:

卷积求零状态响应:

任意信号都可以表示为冲激序列之和,所以,任意信号作用域系统的零状态响应都可以用冲激响应表示出来,这就是卷积求零状态响应:

二.连续信号的MATLAB描述

刚才已经对求解线性系统做了一个概括,那么各种函数是怎么样在MATLAB中描述的呢?接下来就一一介绍最常用的几种函数的MATLAB描述。
要知道,利用MATLAB分析连续信号时,要对信号作离散化处理,就是取出抽样点,根据抽样点的数据画出信号的图像,所以采样的区间和采样密度就影响着信号的表示效果。

1.单位冲激信号

MATLAB的实现代码如下:
在MATLAB中,我们以持续时间为dt,面积为1的脉冲信号表示冲激函数,具体注释都已经在函数中作了描述:

冲击函数
clear
clc
t0=0;%采样开始
dt=0.01;%采样间隔
tf=5;%采样终点
t1=1;%冲击点在t1处有一个持续时间为dt,面积为1的脉冲信号
t=[t0:dt:tf];%采样点
st=length(t);
n1=floor( (t1-t0)/dt );%floor:朝负无穷方向取整数,此处为t1的序列号
x1=zeros(1,st);%zero:生成(1,st)的零矩阵,此处为初始化信号
x1(n1)=1/dt;%给出t1处的信号
subplot(2,1,1),stairs(t,x1),grid on
axis([0,5,0,30])
subplot(2,1,2),plot(t,x1),grid on
axis([0,5,0,30])

使用stairs和plot只是为了对比一下画图效果。
运行结果如示:

2.单位阶跃信号

代码如下:

clear
clc
t0=0;
dt=0.1;
tf=10;
t1=3;
t=[t0:dt:tf];
st=length(t);
n1=floor((t1-t0)/dt);%阶跃序列号
x2=[zeros(1,n1),ones(1,st-n1)];%产生阶跃序列
stairs(t,x2)%画出阶跃函数
grid on
axis([0,10,0,3])

运行结果如下:

3.复指数信号


代码如下:

//复指数函数(u,jw)
clear
clc
t0=0;
dt=0.05;
tf=5;
t=[t0:dt:tf];
u=-0.5;%实部参数
w=10;%虚部参数
x3=exp((u+j*w)*t);%复指数函数
subplot(2,1,1),plot(t,real(x3)),grid on
legend('Re(x3(t))')
subplot(2,1,2),plot(t,imag(x3)),grid on
legend('Im(x3(t))')

运行结果如下:

三.LTI系统的零输入响应

零输入响应是微分方程的齐次解,具体讲解看下面吧(博主水平太低,讲不出来那种效果哈哈哈)


//LTI零输入响应
clear
clc
a=input('输入分母系数向量a=[a1,a2,...]=');%微分方程系数,从左到右
n=length(a)-1;
dt=input('采样步长dt=');
tf=input('仿真时长tf=');
Y0=input('初始条件向量Y0=[y0,Dy0,D2y0...]=');%已知初始条件
%以下为通解
p=roots(a);%p是特征方程的根,也就是系统的极点,roots(a)用来求多项式a(x)的根
V=rot90(vander(p));%V=vander(p),V是范德蒙矩阵
c=V\Y0';%用范德蒙矩阵求对应于各极点的系数
t=[0:dt:tf];
y=zeros(1,length(t));
for k=1:n
y=y+c(k)*exp(p(k)*t);
end
plot(t,y),grid on

roots(a)用来求多项式a(x)的根。

四.求LTI系统零状态响应

前面说了,求零状态响应,要利用激励卷积冲激响应得到零状态响应,所以要求零状态响应就先得掌握冲激响应和卷积。

1.冲激响应

讲解直接上ppt吧:




直接上代码:

//LTI冲激响应
a=input('多项式分母系数向量a=');
b=input('多项式分子系数向量b=');
[r,p]=residue(b,a);%求出极点和留数
dt=input('dt=');
tf=input('tf=');
t=[0:dt:tf];
h=zeros(1,length(t));
for i=1:length(a)-1
h=h+r(i)*exp(p(i)*t);
end
plot(t,h)%h冲激响应
grid on

运行结果如下:

2.卷积

卷积很简单,MATLAB中利用函数conv(u,h)即可,意为求u、h的卷积:

//卷积 y=conv(u,h)  输入u 冲激响应h
lear
clc
u=input('u=');
h=input('h=');
dt=input('dt=');
y=conv(u,h);%进行卷积
%t=dt*([1:length(y)]-1);
plot(dt*([1:length(y)]-1),y)
grid on

3.卷积求零状态响应

这里就是重头戏啦!

  • 先求冲激响应
  • 再求卷积
  • 得出零状态响应

如题:


实际上,如果单纯说使用matlab这个工具来求的时候,对原理不需要很深入的掌握,只要理解程序,会将程序套进去即可。
代码如下:(可以直接套的)

//零状态响应
clear
clc
a=input('多项式分母系数向量a=');%等式左边系数
b=input('多项式分子系数向量b=');%等式右边系数
t=input('输入时间序列t=[t0:dt:tf]');
u=input('输入序列u=');%输入函数
tf=t(end);
dt=tf/(length(t)-1);
[r,p]=residue(b,a);%用极点留数法求冲激响应
h=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t);%冲激响应
subplot(2,1,1),plot(t,h),grid on
y=conv(u,h)*dt;%用卷积求零状态响应
subplot(2,1,2),plot(t,y(1:length(t))),grid on%零状态响应

运行结果:

下面就试着用这个套路来做一道题:

可以看出:

  • 多项式分母系数,也就是方程左边的系数为a=[1,4,3]
  • 多项式分子系数,也就是方程右边的系数为b=1
  • 然后就是构造单位阶跃函数
  • 进行卷积

代码如下:

clear
clc
t0=0;
dt=0.5;
tf=10;
t=[t0:dt:tf];
%产生单位阶跃函数
st=length(t);
n=0;%阶跃序列号
f=[zeros(1,n),ones(1,st-n)];%f:单位阶跃函数
%求零状态响应
a=[1,4,3];
b=1;
%t=input('输入时间序列t=[t0:dt:tf]');
u=f;
[r,p]=residue(b,a);%用极点留数法求冲激响应
h=r(1)*exp(p(1)*t)+r(2)*exp(p(2)*t);%冲激响应
y=conv(u,h)*dt;%用卷积求零状态响应
plot(t,y(1:length(t)),'-ob','LineWidth',1)%零状态响应
grid on;
xlabel('时间');
ylabel('分量');
text(5,0.2,'零状态响应结果','FontAngle','italic','FontSize',16);%斜体,字号16磅
title('零状态响应');

运行结果如下:

MATLAB—信号与系统中的应用的更多相关文章

  1. Matlab 信号与系统课设 - BiRadio仿真电台

    BiRadio Matlab 信号与系统课设 - BiRadio仿真电台 Author : Benjamin142857 Date : 2018-12 Video : BiliBili Github ...

  2. 形象地展示信号与系统中的一些细节和原理——卷积、复数、傅里叶变换、拉普拉斯变换、零极图唯一确定因果LTI系统

    看懂本文需要读者具备一定的微积分基础.至少开始学信号与系统了本文主要讲解欧拉公式.傅里叶变换的频率轴的负半轴的意义.傅里叶变换的缺陷.为什么因果LTI系统可以被零极图几乎唯一确定等等容易被初学者忽略但 ...

  3. 信号与系统实验序章0——MATLAB基础命令入门

    本次开启新的系列,关于用Matlab实现常见信号和函数的生成和变换. 同时如果没有MATLAB基础,那么可以跟着本文一步一步学习Matlab的相关操作,本文旨在记录在信号与系统课程中MATLAB的学习 ...

  4. 针对Windows 64位系统中Matlab没有LED Control Activex控件的解决方法

    Win 10 64bits系统中Matlab 64位软件没有LED Control Activex控件,LED ActiveX Control控件位于Gauges Blockset模块中,而Gauge ...

  5. DVB-C系统中QAM调制与解调仿真

    本文简单记录一下自己学习<通信原理>的时候调试的一个仿真DVB-C(Cable,数字有线电视)系统中QAM调制和解调的程序.自己一直是研究"信源"方面的东西,所以对&q ...

  6. Linux 系统中僵尸进程

    Linux 系统中僵尸进程和现实中僵尸(虽然我也没见过)类似,虽然已经死了,但是由于没人给它们收尸,还能四处走动.僵尸进程指的是那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸.配图源 ...

  7. 僵尸进程的产生和避免,如何kill杀掉linux系统中的僵尸defunct进程

    在 Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的"僵尸"进程."僵尸"进程是一个早已 死亡的进程 ...

  8. DVB系统中PCR的生成和PCR校正

    http://blog.csdn.net/chenliangming/article/details/3616720 引自<广播电视信息>2008年1月 从数字电视前端系统功能上来讲,传统 ...

  9. FPGA系统中DRAM,SRAM,SDRAM,FLASH 区别(转)

    原文:http://hi.baidu.com/abners/item/a9042ef35d3f005bc8f337f5 一般来说这几种存储器是一个nios系统都具有的,sram的好处是接口简单,速度快 ...

随机推荐

  1. shell 重定向以及文件描述符

    1.对重定向的理解 Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向:从字面上理解,输入输出重定向就是「改变输入与输出的方向」的意思. 输入方向就是数据从哪里流向程序.标准输入 ...

  2. Python小白的数学建模课-B4. 新冠疫情 SIR模型

    Python小白的数学建模课-B4. 新冠疫情 SIR模型 传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SIR 模型将人群分为易感者(S类). ...

  3. 日常学习-001-Get和Post的区别

    首先说明参考链接:https://mp.weixin.qq.com/s/W68JzNIoUpm9hyXinOzkMw 以下为个人观后总结. 初级理解: GET和POST的区别 1.get传送的参数长度 ...

  4. celery task异步任务

    业务端后台:通过python manage运行 运行用例时,用python manage运行时会卡,影响效率 celery task 本身自己也是个服务,异步处理case 异步:小明去给我买个东西,我 ...

  5. 在SublimeText3中搭建Verilog开发环境记录(一)

    ------------恢复内容开始------------ ------------恢复内容开始------------ ## 前言 *工欲善其事,必先利其器* 一款好用的撸码软件,能够大大的提高工 ...

  6. python函数的坑

    一.默认参数的坑,如果你的默认参数指向的是可变的数据类型,那么你无论调用多少次这个默认参数,都是同一个. def func(a,list=[]): list.append(a) return list ...

  7. python + mysql 实现查询表数据

    实例如下: import pymysqldef select_form(): # 打开数据库连接 db = pymysql.connect("localhost", "r ...

  8. Java 使用新方法打印Word文档

    前言 我曾写过一篇文章,它主要介绍了如何通过物理打印机和虚拟打印机来打印Word文档.今天这篇教程将介绍一种新的方法来实现对Word文档的打印. 此次使用到的类库仍然是Spire.Doc for Ja ...

  9. 【模拟+排序】花生采摘 luogu-1086

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". 鲁宾逊先生和多多都很 ...

  10. Vue框架主要内容学习总结

    Vue框架体系主要内容: 1. vue核心语法和用法: 2. vue-router--路由.路由相当于访问路径,将访问路径与vue组件映射起来.传统方式常采用超链接实现路径或页面之间的切换, 而在vu ...