MATLAB 提供了函数filter,可以实现差分方程的递规求解。

设差分方程的形式为\(a_0y(n) + a_1y(n-1) + \cdots + a_my(n-m)=b_0x(n)+b_1x(n-1)+\cdots+b_sx(n-s)\)

基本的调用方法

yn = filter(B, A, xn)

  • \(B = [b_0, \cdots, b_s], A = [a_0, \cdots, a_m]\);
  • xn是输入信号;
  • yn是输入信号通过系统的零状态响应。

    如果输入是单位脉冲函数,则输出就是系统单位脉冲响应。

yn = filter(B, A, xn, xi)

  • 前3个参数的用法同上。
  • xi是等效初始条件序列,一般是通过调用函数filtic得到的。
  • yi是由系统初始状态引起的零输入相应和输入信号引起的零状态相应之和,即全响应。

xi = filtic(B, A, ys, xs)

  • 参数B,A的用法如上
  • ysxs表示的输入和输出在\(n_0\)时刻之前的初始条件:\(ys =[y(-1),y(-2),\cdots, y(-N)]\),\(xs=[x(-1),x(-2),\cdots, x(-N)]\)。如果系统是因果系统,显然输入为0,即xs = 0,此时可以省略xs

例子

  1. 求系统的单位脉冲响应和零输入相应
% 滑动平均滤波器的差分方程如下
% y(n) = 1/5 * (x(n) + x(n-1) + x(n-2) + x(n-3) + x(n-4))
windowSize = 5;
B = ones(1, windowSize) / windowSize;
A = 1; % 求该系统的单位脉冲响应
subplot(411)
delta = [1, zeros(1,33)]; % 单位脉冲信号
y0 = filter(B, A, delta);
stem(0:length(y0)-1, y0)
title('单位脉冲响应') % 求系统在某个输入信号下的零状态响应
% 输入信号
subplot(412)
xn = [ones(1, 32), zeros(1,4)];
xn(13)=2; xn(16)=0.5;xn(20)=1.5;
stem(0:length(xn)-1, xn);
title('输入信号') % 零状态相应
subplot(413)
yn = filter(B, A, xn, xi);
stem(0:length(yn)-1, yn);
title('零状态相应输出') % 卷积验证
subplot(414)
yc = conv(xn, y0)
stem(0:length(yc)-1, yc)
title('卷积验证')
xlim([0, 35])

运行结果:

  1. 求系统的全响应
% 设因果系统 y(n) = 0.8*y(n-1) + x(n),输入为x(n)=\delta(n)
% 在不同初始条件下的输出:(1)y(-1)=0; (2) y(-1)=1
A = [1, -0.8];
B = 1;
xn = [1, zeros(1, 30)]; % y(-1)=0, 输出即是零状态输入
subplot(211)
y0 = filter(B, A, xn);
stem(0:length(y0)-1, y0)
title('初始状态为y(-1)=0')
ylim([0, 2]) % y(-1)=1
subplot(212)
ys = 1; % 初始状态
xi = filtic(B, A, ys);
yn = filter(B, A, xn, xi);
stem(0:length(yn)-1, yn);
title('初始状态为y(-1)=1')
ylim([0, 2])

运行结果

Matlab 使用filter求解系统响应的更多相关文章

  1. 采用sqlserver的缺省配置,在生产环境经常碰到系统响应慢(甚至hung的情况)

    请重视并正确配置sqlserver实例及数据库的参数,一般化的配置推荐如下: 1.数据和日志文件的初始大小分别设置为10G和2G,均设置为按照固定200M大小增长,不限制最大值: 2.sever实例设 ...

  2. Matlab随笔之求解线性方程

    原文:Matlab随笔之求解线性方程 理论知识补充: %矩阵除分为矩阵右除和矩阵左除. %矩阵右除的运算符号为“/”,设A,B为两个矩阵,则“A/B”是指方程X*B=A的解矩阵X. %矩阵A和B的列数 ...

  3. C++和MATLAB混合编程求解多项式系数(矩阵相除)

    摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题. 主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll ...

  4. Springboot 之 Filter 实现超大响应 JSON 数据压缩

    简介 项目中,请求时发送超大 json 数据外:响应时也有可能返回超大 json数据.上一篇实现了请求数据的 gzip 压缩.本篇通过 filter 实现对响应 json 数据的压缩. 先了解一下以下 ...

  5. 基于Matlab的多自由度系统固有频率及振型计算

    可参考文涛,基于Matlab语言的多自由度振动系统的固有频率及主振型计算分析,2007 对于无阻尼系统 [VEC,VAL]=eig(inv(A)*K) 对于有阻尼系统,参考振动论坛计算程序 输入M,D ...

  6. JSP Filter,GZIP压缩响应流

    url:http://hi.baidu.com/xhftx/blog/item/fbc11d3012648711ebc4af59.html 关键词:JSP,Filter,Servlet,GZIP 现在 ...

  7. matlab学习之求解函数的根和极小值

    只是用来求解函数的部分一个根,具体算法没查询,只是调用自带的函数 代码如下 % 求函数零点和极小值 xiszero=func(0) x=-1:0.1:1.5; y=func(x); plot(x,y) ...

  8. MATLAB quadprog函数求解二次规划问题

                     [例]求如下二次规划问题. [分析]首先应该把目标函数表示成如下矩阵形式: 这里要细说一下如何写成矩阵形式. 首先,向量x是很容易写出的,因为f(x)包含两个变量x1 ...

  9. MATLAB 利用filter函数实现滑动平均滤波

      function [ y ] = moving_average( x, win_size ) y1=filter(ones(1,win_size/2+1)/win_size,1,x); y2=fi ...

随机推荐

  1. liunx驱动之字符设备的注册

    上一篇文章学习了如何编写linux驱动,通过能否正常加载模块进行验证是否成功,有做过liunx应用开发的小伙伴都知道驱动会在'/dev'目录下以文件的形式展现出来,所以只是能加载驱动模块不能算是完成驱 ...

  2. acwing 890. 能被整除的数

    #include<bits/stdc++.h> #define ll long long using namespace std; int m; int n,p[20]; int sum, ...

  3. actviti7撤回操作

    @Override @Transactional(rollbackFor = Exception.class) public int callBack(String processId) { //通过 ...

  4. SQL反模式读书笔记思维导图

    在写SQL过程以及设计数据表的过程中,我们经常会走一些弯路,会做一些错误的设计.<SQL反模式>这本书针对这些经常容易出错的设计模式进行分析,解释了错误的理由.允许错误的场景,并给出更好的 ...

  5. ctf实验吧Once More

    题目链接:http://ctf5.shiyanbar.com/web/more.php 思路分析:显然是后台逻辑代码. 1.ereg函数有漏洞,可以使用%00截断,这个就做笔记了好吧.这个函数大致意思 ...

  6. SqlServer常用语句整理

    先记录下来 以后整理 1.常用语句 1.1update连表更新 update a set a.YCaseNo = a.WordName + '['+ convert(varchar,a.CaseYea ...

  7. 深入理解Java多线程——ThreadLocal

    目录 定义 API 场景分析 场景实验,观察Spring框架在多线程场景的执行情况 10000此请求,单线程 10000次请求,线程数加到100 对c的访问加锁 把c设为ThreadLocal 收集多 ...

  8. EXCEL:关键字有重复,其他信息一行多列显示

    =INDEX(A:A,SMALL(IF(MATCH($A$2:$A$13,$A$2:$A$13,0)=ROW($A$2:$A$13)-1,ROW($2:$13),4^8),ROW(1:1)))& ...

  9. SQLITE数据库不支持远程访问

    SQLITE数据库不支持远程访问 import sqlite3 conn=sqlite3.connect("dailiaq.db") cur=conn.cursor() def c ...

  10. Python爬取网易云热歌榜所有音乐及其热评

    获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...