|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
% u6 c( d& V% z$ x# C, B# O& ?# v
先给出filter的大致介绍:MATLAB之filter 函数介绍(一维数字滤波器)* k/ Z% J1 f( I2 `4 o4 L$ N
# J5 ?$ z( h8 j8 d7 J
上篇博文写了产生一个系统的脉冲响应的博文,有兴趣可以看看:MATLAB之使用 impz 函数计算并画出脉冲响应
" b6 K" C- T' r- C
3 o8 a1 \" D# k' t$ M使用到的filter语法如下:
8 `; K) |3 N& E7 S5 _, J8 N! p5 C9 \0 J, h) d: S. o& Q
y = filter(b,a,x); `' m0 Z* |+ e( w' d; L
! n V' G& q! s8 Q对具有分子系数向量b和分母系数向量a的系统函数对x进行滤波,得到响应y。
( O3 @) A0 F6 l. c" O) ?/ z
2 _4 [1 P* Z$ P# P3 k h8 D8 W如果x为一个单位阶跃序列,则响应就是单位阶跃响应。
2 Y7 w& }8 x4 `' D% @7 S1 }( V! F2 \- I+ S# U
这就是理论上的基础思路。
0 E: F( N( s% j: D& q! g+ c( Q+ [( V/ v U) }3 ]: G
给出实例分析:
! d w% |( i* _7 `. |9 c( u9 o U+ V1 _. i V1 ?
这个系统使用差分方程来描述如下:
' c* s8 X& G. ^& V \& P% \% I
: G$ `! v( E& z) F) t+ S, sy(n) - y(n-1) + 0.9y(n-2) = x(n)
* m R2 P0 V. H v, b. l6 `( d' L1 K
6 Z+ C6 I- C5 v1 L要求计算并画出它在 你= -20,..., 100的单位阶跃响应。 i% V1 ~. M# r: y5 B- b7 P
L! @2 o4 |4 r0 _5 w写下面的MATLAB脚本之前必须声明的是下面脚本中使用了之前博文中写的一个阶跃序列的函数:) E1 ?9 O0 [/ J! g
0 l6 [$ c1 K3 F# f- function [x,n]=stepseq(n0,n1,n2);
- % generate x(n) = u(n - n0); n1 <= n <= n2
- %——————————————————————
- %[x,n] = stepseq(n0, n1, n2);
- %
- n = [n1:n2];
- x = [(n-n0) >= 0];
6 M0 _5 i) ]4 ^$ K7 w5 a/ D" A
8 D! S( {; w* p! Z2 N2 y( A( p
3 |+ q. E7 w2 `3 ~. p; e更多相关信号的函数见博文:基本序列运算及其MATLAB的等效表示+ X& v b# C8 l0 A- u0 |9 w) @
% h% R% `$ T C! g0 E) e
下面使用MATLAB脚本实现:' p) ?' N* g. c# N, Z
( r' q; `) C) B$ m5 A; n" N
- clc
- clear
- close all
- b = 1;
- a = [1,-1,0.9];
- % n = [-20:100];
- [x,n] = stepseq(0,-20,100);
- stem(n,x);
- title('step sequence');
- xlabel('n');ylabel('x(n)');
- ylim([0,1.2]);
- figure;
- s = filter(b,a,x);
- stem(n,s);
- title('step response');
- xlabel('n');ylabel('s(n)');
& T' R3 k* i& `! }9 @ 8 p7 X" K8 ]9 L L- U
4 u6 g& v8 [3 L) ^+ u
[( ~. \1 _) V5 d! q' j2 E 8 ?0 E: t( x* W; h4 y8 X
- n" T7 T2 L/ Z% `) P" u) N' v
/ t& A4 j+ t2 T- D% O# O0 W
' _4 J! k# F% }* ]; w9 W |
|