• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Matlab 使用filter求解系统响应

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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])

运行结果


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap