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. JS replace 替换全部数据

    (1)使用具有全局标志g的正则表达式 var str = "dogdogdog"; var str2 = str.replace(/dog/g,"cat");/ ...

  2. AOF重写导致的Redis进程被kill

    Redis环境描述 服务器: 阿里云16GB服务器 Redis版本: 5.0.5 持久化方式: AOF 问题描述 阿里云环境,使用docker安装的单节点redis5.x,频繁出现redis进程被操作 ...

  3. CentOS-Docker安装RabbitMQ(单点)

    这里注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面. 获取镜像 $ docker pull rabbitmq:management ...

  4. 23 shell 进程替换

    0.shell进程替换的用法 1.使用进程替换的必要性 2.进程替换的本质 进程替换和命令替换非常相似.命令替换是把一个命令的输出结果赋值给另一个变量,例如dir_files=`ls -l`或date ...

  5. pip 下载时出现问题TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'

    我这里解决就是更新下载源,马德,中科的源居然不够快,我就只能换源了,一换就成功了 1.一次性(临时使用): 可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.ed ...

  6. kong配置upstream实现简单的负载均衡

    目录 通过konga实现 1. 配置upstream 2. 配置Service发布 3. 配置Route,匹配规则 4. 验证结果 通过 Kong Admin API实现 1. 配置upstream ...

  7. VS Code 下载安装并设置中文面板显示

    下载: 下载地址:https://code.visualstudio.com/ 微软在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 M ...

  8. 深度学习之逻辑回归的实现 -- sigmoid

    1 什么是逻辑回归 1.1逻辑回归与线性回归的区别: 线性回归预测的是一个连续的值,不论是单变量还是多变量(比如多层感知器),他都返回的是一个连续的值,放在图中就是条连续的曲线,他常用来表示的数学方法 ...

  9. 解决远程连接服务器数据库报错:Host ‘XXXXXX’ is blocked because of many connection errors

    参考:https://blog.csdn.net/li_li_lin/article/details/72764683和 https://blog.csdn.net/zaishijizhidian/a ...

  10. Pytest单元测试框架之FixTure基本使用

    前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...