找回密码
 注册
关于网站域名变更的通知
查看: 1755|回复: 1
打印 上一主题 下一主题

MATLAB之使用 impz 函数计算并画出脉冲响应

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-15 14:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

2 W7 h, B, U4 w, `这篇在于讨论 impz 函数的使用。2 d% J0 u- D/ x, y) i0 P/ l

# l/ h/ b/ S/ ^* n) M# mMATLAB帮助文档对impz的介绍:MATLAB之impz函数介绍(数字滤波器的脉冲响应)
, L4 u6 R5 Y) K& L
9 Q, F! |3 w( k* c* p( U我在 MATLAB 中查看 impz 的帮助文档时,始终看的不是太明白这个函数的使用,于是我根据一个例子,对这个函数做了一点分析,解决了一些我的疑惑,记录于此。
8 I4 O: j  X- I: w* ]# c0 C1 H# t
1 R/ U  A' X) M% _' |9 H帮助文档上对这个函数的概括是数字滤波器的脉冲响应。' ^0 V8 V: @# N7 ]

: b7 D8 z% |0 ^% M1 S所谓的数字滤波器不就是一个线性时不变系统而已,根据脉冲响应的分子分母系数,可以得到该系统的脉冲响应。这个脉冲响应可以用下面的有理传递函数给出:
: }+ A. H0 ^3 {8 K
- N7 ^# s6 o6 `0 c. C5 s0 [  v
5 K! k6 G3 {5 n: k
0 ^5 O; a& g% J或者由差分方程给出:: N3 Y# W6 X; M! ~! j4 |

$ n1 x( k- g" t, J
/ p$ m2 j( \( J* ?  L* W6 o
9 k+ ~) d& X5 ^) W! L3 k/ p0 r上面的系数用系数向量表示为:
: B, t$ N& i" t: b# n
: o; R% O) M) h( R1 R分母系数为:a = [1,a(2),...,a(n_a +1)]
  n$ M9 B1 W0 |' T0 P2 G& _: \分子系数为:b = [b(1),b(2),...,b(n_b+1)] 2 P: ~$ H' K& J# i& D5 T

$ x5 ?7 e8 a8 G% k9 {* F# p因此,impz函数的语法格式有这么一条:% M7 @) e- O0 M- O

" u! i1 k. C: E: p/ v" v[h,t] = impz(b,a)$ I* e1 q) x  x3 }; ~/ U
9 [/ D! i: T, Y) D& @. q" H3 u/ F
这里的b和a向量就是分子和分母系数的向量。
( P/ \8 z, z: n7 v# I+ m
; M9 z  F" j5 g+ h9 ]4 k% t% e得到的h就是该系统的脉冲响应,而 t 是脉冲响应值对应的位置。
. a$ _$ x/ [' M; F8 J& ?1 l5 _; K* X0 ]7 Y! }" o$ y' a- H
对于这个函数的使用,可以直接使用右边的部分,而不出现左边的部分,即 impz(b,a),而文档对其解释如下:: U7 |* j  `9 x' e. P7 r' G
+ z' _" o' j- w) D
impz(...) with no output arguments plots the impulse response of the filter.
6 |; V9 I$ I- n5 {) U5 P; ^0 w; _- V
意思是直接画出该系统的脉冲响应。
4 O: ^) u4 ^* [2 X% H( [( @% I- E* }0 V/ d: i% Y1 q7 T  e
我们举个例子来理解:
3 z; H' H" ?5 ^  B) d; r
/ M+ |3 O- p9 i+ V, Y1 n这个系统使用差分方程来描述如下:. K# `/ n2 t7 b1 \9 S
! u/ e* F$ X2 U# q$ w& h# `$ S
y(n) - y(n-1) + 0.9y(n-2) = x(n)4 I8 D0 N5 H! n4 ^; ~' L+ \

+ j: d8 N- E( H) X+ m要求计算并画出它的脉冲响应。" x) S2 Q  u; D& |" r; g% K

* S5 T) q, G/ d题解:. _) F/ l: U2 G2 q

6 {# u! [# q2 b6 g! k; P5 C跟上上述对impz函数地简单介绍,其实我们可以直接画出它的脉冲响应了。
& A8 j* d( Y$ c4 W2 H
- ^' y' Y+ S/ g% p6 J) j3 X0 ^4 H& I
  • b = [1];
  • a = [1,-1,0.9];
  • [h,t] = impz(b,a)
  • stem(t,h);
  • title('Impulse Response');
  • xlabel('n');ylabel('h(n)');
    $ m8 a3 y6 U) S3 L  b  h. g* e# L# \

1 X+ g8 a% |3 ~: [/ q8 u1 x" P 0 F% L6 }7 e; O% @( r' M: Y3 |+ f
) i$ a7 U9 g& U- ]4 }/ s5 s
* o& Z8 H3 Z) s. }
也可以:
/ O# g( [/ @* O) ~& w4 c- Z  f3 b1 ]+ H! a. Y/ i" Z
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • impz(b,a);
  • ylim([-1.2,1.2]);) O% p. [9 B! s# [
   7 i) e1 H6 i1 u8 n0 ^2 `6 U

, q' z3 i; e" ?* c( d! s
: ?. s! W8 u* V3 d上面两种方法画出的脉冲响应其实是一样的。
# W  }" @+ n! t. z
: Q$ p8 P9 `) x上面这个简单的用法也就告一段落,下面我们再看一条变体语法:
1 {( |: I" Z7 R) Z( X- \, Z5 _6 C) x4 z) y, {# \! R
[h,t] = impz(...,n) computes n samples of the impulse response when n is an integer (t = [0:n-1]'). If n is a vector of integers, impz computes the impulse response at those integer locations, starting the response computation from 0 (and t = n or t = [0 n]). If, instead of n, you include the empty vector, [], for the second argument, the number of samples is computed automatically.
0 Z3 H4 Z/ T4 g# T- L- o7 I5 w只看语法格式,那么一大串英文介绍暂时不管,后面我会慢慢解释。& F+ o: A+ B# Y

, ~% }0 B$ J$ G[h,t] = impz(...,n)
7 y/ Z4 @3 j# N. a+ {8 O% E" R# a3 v4 s3 O) Y
后面的这个n是什么玩意?2 A0 w- B4 q9 I; w

' W' ~+ r3 n2 T3 S它的用意我用自己的语言叙述下就是如果我要求的脉冲响应不是从0开始,那么我就可以使用这个n向量来指定脉冲响应的位置范围。$ r, \1 T: S) e) k. F$ o8 q: a

' z- v7 t0 i% N9 r同样使用一个实例来说明,同样是上面的那个差分方程表示的系统,我们求它的脉冲响应。
, R2 o, r' @2 D% K9 U2 p) d$ z; g$ C' T' |  `9 r6 R2 H
这个系统使用差分方程来描述如下:6 I( U6 z* }- U' h. j

; `: }% V" s/ ~( l2 [y(n) - y(n-1) + 0.9y(n-2) = x(n)
+ j" ?  M! d! \* s: b& I3 J+ j$ G# d6 Y, J9 Y, C% `
要求计算并画出在n = -20,...,100 的脉冲响应h(n)。
: G+ D9 A+ i; I. V: T) ]% w3 i5 q% ?( ~6 ?% X0 d" F
脚本程序如下:$ r4 h) z! c6 Q: [( L

- e! i; \$ O0 e
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • n = [-20:120]';
  • impz(b,a,n);
  • ylim([-1.2,1.2]);
    ; X3 W5 K5 _7 y0 f
' T5 Q7 Y  ~4 p, I" i
( O& _* c5 }+ x. t/ K! S: ?9 E; B
2 q0 A% g0 o. j# y
3 W  {/ s# j8 T0 x: p$ G. W
这里的n是一个行向量或者一个列向量,无关紧要。* L$ E% C' O1 N4 z4 J4 b' Y9 ^
0 W/ v0 p; O# s5 i8 t6 D4 L
也可以使用下面的方法来产生:6 c1 a, E  ^9 U4 Y# W+ Y, L

1 |5 @, X) w7 y" j
  • clc
  • clear
  • close all
  • b = [1];
  • a = [1,-1,0.9];
  • n = [-20:120]';
  • [h,t] = impz(b,a,n)
  • stem(t,h);
  • title('Impulse Response');
  • xlabel('n');ylabel('h(n)');+ K% e/ D0 C2 P- b: s, g

5 W5 u/ v9 ^* X7 Y1 U$ _   c! e) `. c; Q  N6 b  q+ q( b9 v

# c' w: Y! Y; `2 O8 k3 M5 `1 k# n
上面画图的函数stem(t,h),也可以改成stem(n,h)。
$ s5 B1 T4 m; G  H
) f9 r- f2 h6 W9 ^7 L, `/ \这间接说明了t和n是一样的,函数产生的t是一个列向量,如果n也是一个列向量的话,那么二者一致。
& {0 e$ O8 r: o- F/ a/ e( P8 ^! v) F; G1 C' G$ ]
可以使用这条语句进行验证:$ \! ?4 D  l$ C; C

" {, }, o' {+ R7 H" zn == h! {$ G# c$ \/ h, t4 \2 Q. O7 I
! F# s5 b8 O; D9 Y
可以得到一个和n同维度的向量,元素全为1.(可自行验证。)) Q  N' j0 D7 i9 g3 J5 z

7 z- k& J  b) e- O9 B+ k+ p最后,需要说明的是由于是同一个系统,所以指定与不指定n产生的脉冲响应都是一样的,只不过这里指定了显示脉冲响应的位置在-20,...,100.& ^8 {  I+ P& ]& c$ h) a

( o9 n5 C) c  ?. t3 A: m& {" F再给出一个例子:0 y0 J  J: F- m3 i

% ?5 E1 O' Z2 y2 z首先使用ellip函数产生一个满足如下要求的滤波器,关于ellip函数介绍如下:
9 t% A1 m% J& ~/ m2 [3 ?0 A" C/ z7 L  g0 c
MATLAB之ellip 函数介绍(椭圆滤波器设计)7 L0 V9 g/ ]) y0 }; ?0 |( Q* x* B
8 ~+ W/ ]  D! X$ N* b7 Z
设计具有归一化通带频率0.4的四阶低通椭圆滤波器。 指定0.5 dB的通带纹波和20 dB的阻带衰减。 绘制脉冲响应的前50个样本。; s7 I+ k# `5 {$ J9 u

. b2 b5 c( a) X5 {! l# J/ a  {! ]: E
  • clc
  • clear
  • close all
  • %
  • % Impulse Response of an Elliptic Lowpass Filter
  • % Design a fourth-order lowpass elliptic filter with normalized passband frequency 0.4.
  • % Specify a passband ripple of 0.5 dB and a stopband attenuation of 20 dB.
  • % Plot the first 50 samples of the impulse response.
  • [b,a] = ellip(4,0.5,20,0.4);
  • impz(b,a,50)( n; J% j: l3 A4 G8 j/ `3 A  H
$ b  p: j/ q% R

' Y& z" m3 G$ Y; s+ }- Z
8 E: V2 V0 u2 @& d; S( l. r9 z

该用户从未签到

2#
发表于 2020-10-15 14:59 | 只看该作者
MATLAB之使用 impz 函数计算并画出脉冲响应
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 20:02 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表