我是靠谱客的博主 魁梧衬衫,最近开发中收集的这篇文章主要介绍matlab一直系统函数画脉冲响应,MATLAB之使用 impz 函数计算并画出脉冲响应,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

EDA365欢迎您登录!

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

x

' C" [+ n1 g# Q- ]" A这篇在于讨论 impz 函数的使用。

|9 u8 v8 }& H9 m/ `# g% a

+ k% ~/ J6 C0 d, [4 Q" VMATLAB帮助文档对impz的介绍:8 c# D4 {$ U/ X" |/ r

0 r6 a! y, ]; S8 o$ g我在 MATLAB 中查看 impz 的帮助文档时,始终看的不是太明白这个函数的使用,于是我根据一个例子,对这个函数做了一点分析,解决了一些我的疑惑,记录于此。# s' ?- O9 H% t8 _2 ~* l3 T

* R' Y% i9 K/ q; z帮助文档上对这个函数的概括是数字滤波器的脉冲响应。

/ k( h" P" [* W! G5 p! N6 j1 v* [3 g

所谓的数字滤波器不就是一个线性时不变系统而已,根据脉冲响应的分子分母系数,可以得到该系统的脉冲响应。这个脉冲响应可以用下面的有理传递函数给出:" z) H& }. Y$ G' J' y5 y& d9 L* m

: I2 j; ~4 t% q1 S' T

none.gif

9.png (16.27 KB, 下载次数: 0)

2020-10-15 14:03 上传

& x/ Q% R' d  j  x0 l

# w7 G$ N9 {' b: h; d/ Q& H或者由差分方程给出:

7 }$ O  O; r- ^' B+ C2 W( |* F3 Z, ?& J

none.gif

8.png (10.92 KB, 下载次数: 0)

2020-10-15 14:03 上传

9 a8 p. H/ j  e" n& R7 B6 p

) R/ A0 I- J! A0 J上面的系数用系数向量表示为:

$ }1 y; `1 _/ `' i+ C" p

" E+ O1 L+ `. o: D- w; Y分母系数为:a = [1,a(2),...,a(n_a +1)]

none.gif

7.gif (696 Bytes, 下载次数: 0)

2020-10-15 14:03 上传

; j$ P  u# S, @分子系数为:b = [b(1),b(2),...,b(n_b+1)]

none.gif

6.gif (823 Bytes, 下载次数: 0)

2020-10-15 14:03 上传

' r: v# r. f1 t2 ?& ~, a( f3 ^

,   a7 D7 _* @) Z! Y2 S7 z3 f因此,impz函数的语法格式有这么一条:. R. U4 D0 R$ m$ R% i  ?

' ^6 c+ d  I, b$ o' U, C[h,t] = impz(b,a)" f" u1 _( L) ~6 O6 o1 ^

- E  M; n9 ]8 y- w3 J8 p* n

这里的b和a向量就是分子和分母系数的向量。. s- ~1 b$ [& n* v2 v& c* ~

% x' z3 z7 E2 m- M, y得到的h就是该系统的脉冲响应,而 t 是脉冲响应值对应的位置。, p& C+ y: I9 d7 D

. P! U% j7 ) `3 X% u9 h; a. u/ n! X

对于这个函数的使用,可以直接使用右边的部分,而不出现左边的部分,即 impz(b,a),而文档对其解释如下:

' Q; @0 ~% S, j; ^- G. Z4 L! ~/ ~1 r* l$ M9 I( z( n& @: M

impz(...) with no output arguments plots the impulse response of the filter.

1 ?3 T5 e4 s+ l8 C# U8 V& L; V+ L0 G1 q

意思是直接画出该系统的脉冲响应。

0 D  ]$ E; P& r& a' T0 i7 Q7 J6 u5 w" Y

我们举个例子来理解:

, P* M5 `) F  j9 {" W9 h# ], C1 {' J2 u- ]2 g! o$ a/ c* k# {

这个系统使用差分方程来描述如下:

7 h" }& W# p3 e  V) I% v% L9 j4 X* W* w) L: v) r' E% u  I

y(n) - y(n-1) + 0.9y(n-2) = x(n)7 d/ Y- A$ s% L9 - w3 _3 W

# f4 K* ?; G1 ]  ?% H; m  E; y要求计算并画出它的脉冲响应。6 ^* y/ q8 S) K( l

" r& t$ D# d  C

题解:

! U* L6 S$ p" T6 x7 i, o' C

7 y: E5 v. E2 ?. h$ r* ^跟上上述对impz函数地简单介绍,其实我们可以直接画出它的脉冲响应了。# W( K" A: l0 c$ N0 y

1 r* e5 n$ ^5 q' hb = [1];

a = [1,-1,0.9];

[h,t] = impz(b,a)

stem(t,h);

title('Impulse Response');

xlabel('n');ylabel('h(n)');8 " T) G$ T3 D

- P! _3 g* U9 V# N

none.gif

5.png (30.32 KB, 下载次数: 0)

2020-10-15 14:03 上传

; M; p$ b( K/ O$ `) K* S4 _0 J9 X% b$ C

5 @9 ~; y/ {' : }; @6 ^

也可以:6 S3 5 O4 @  b9 A6 D- M) v- ]

8 Y% V  Z1 H8 I# o

clc

clear

close all

b = [1];

a = [1,-1,0.9];

impz(b,a);

ylim([-1.2,1.2]);1 u# t; `3 c- G, g; j   ) U+ T" u8 y  H  f- U7 w8 Q1 h

none.gif

4.png (25.54 KB, 下载次数: 0)

2020-10-15 14:03 上传

; V5 L$ v8 u0 J6 E/ X' X0 r9 a# Z0 l" g9 I8 c  Z

上面两种方法画出的脉冲响应其实是一样的。; `1 f7 g6 {* K# ?$ f+ }( p# S, H9 ^

0 V1 F+ I) j, i: J+ @$ S4 Z上面这个简单的用法也就告一段落,下面我们再看一条变体语法:; b: Z4 n4 k8 |2 e* e

* |( Q% y" f3 f# k# k& M8 Y

[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.# f" w  I3 G& T- z2 L

只看语法格式,那么一大串英文介绍暂时不管,后面我会慢慢解释。

9 f  L1 d% _6 |3 ?8 {

" e. }. s$ y3 @. m' A' e, u[h,t] = impz(...,n). Q% o  G( ?1 s

4 h7 r& [5 S1 o4 R' e1 N

后面的这个n是什么玩意?

7 d/ X% z5 r$ w/ A4 l& c

5 e4 [0 t/ n) I( S* . X它的用意我用自己的语言叙述下就是如果我要求的脉冲响应不是从0开始,那么我就可以使用这个n向量来指定脉冲响应的位置范围。8 _+ T+ N' P$ c  q( T' D" I

0 D5 N' s0 a' s' S3 L8 E同样使用一个实例来说明,同样是上面的那个差分方程表示的系统,我们求它的脉冲响应。0 y, F: H% G* h7 i, `' S% c

' H$ S$ D# ^- ^: D; k

这个系统使用差分方程来描述如下:/ U$ P2 _/ z$ E1 D, T

7 a: e, / {# b- K1 f

y(n) - y(n-1) + 0.9y(n-2) = x(n)2 O9 {) a) Y# j5 h1 k+ k

5 ?! ]# n* x0 ~' h

要求计算并画出在n = -20,...,100 的脉冲响应h(n)。

/ i# r! g! F+ N  D+ n# G

* K3 }; U) p. W( m脚本程序如下:

b# P2 W4 b- 6 y8 v$ i9 O+ K" K( E/ v, |

clc

clear

close all

b = [1];

a = [1,-1,0.9];

n = [-20:120]';

impz(b,a,n);

ylim([-1.2,1.2]);! K' g& b, , [) V7 V8 l

( ~) ^5 e$ Z. b8 m2 i# h4 @

' v4 B# + {; J" z4 Y, p

none.gif

3.png (26.15 KB, 下载次数: 0)

2020-10-15 14:03 上传

( Q5 d% Q1 |# F# q) i* MO4 i7 a* Y  H) c# |2 ^; x6 C

这里的n是一个行向量或者一个列向量,无关紧要。, F) E7 p1 z% D, {2 L. Z

A$ p3 A- M% O9 b' L5 t

也可以使用下面的方法来产生:

0 B0 X) w2 q! - r$ d) N; p5 y7 j1 q, u

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)');

: L4 u- o( S$ U. k/ K7 T - }/ p+ ], t, f" o

none.gif

2.png (31.66 KB, 下载次数: 0)

2020-10-15 14:03 上传

: A6 Z& C1 J( L/ R0 I7 v7 l8 c; M4 d' O; u( V

; I! }" |1 O# o- B. ]

上面画图的函数stem(t,h),也可以改成stem(n,h)。

W. k, H8 @+ e+ f, z" l  O6 o4 k  L0 w8 O

这间接说明了t和n是一样的,函数产生的t是一个列向量,如果n也是一个列向量的话,那么二者一致。

2 m4 r$ * J* X- p. Z, K4 O8 t7 d( K8 G9 J4 k" b

可以使用这条语句进行验证:; p3 D) l+ a$ [7 B/ }" j8 d. w

' g! O5 e  L/ z: Sn == h

3 W3 [7 D7 d' + B7 j- R( W8 N  v* n

可以得到一个和n同维度的向量,元素全为1.(可自行验证。)1 ^+ C" x3 ^, H1 N5 d

/ }1 n; ^2 r% k0 m4 W

最后,需要说明的是由于是同一个系统,所以指定与不指定n产生的脉冲响应都是一样的,只不过这里指定了显示脉冲响应的位置在-20,...,100.

! e1 k! D8 E1 A! gv8 V# s* u/ b' A

再给出一个例子:

$ ]0 ]1 z: w7 T; A& ~

2 ?9 r" H  D3 {/ v首先使用ellip函数产生一个满足如下要求的滤波器,关于ellip函数介绍如下:$ D. q: M  p& ]6 j; f( o' O& D

* k/ i( y9 x8 c% X

& t# g* z4 l5 |! - I% i. k& D

# Q& D) D( B1 m. 设计具有归一化通带频率0.4的四阶低通椭圆滤波器。 指定0.5 dB的通带纹波和20 dB的阻带衰减。 绘制脉冲响应的前50个样本。5 D; u  I, @) w+ C9 C' w

: |' @# q3 @, o& z# K% gclc

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)7 ^1 |1 b; ^5 V7 G( ^0 q4 ^0 l7 X: d1 j, L* n7 U

6 K& @$ A/ N- ~) {

none.gif

1.png (24.84 KB, 下载次数: 0)

2020-10-15 14:03 上传

4 }# 5 F' n. Y5 k

最后

以上就是魁梧衬衫为你收集整理的matlab一直系统函数画脉冲响应,MATLAB之使用 impz 函数计算并画出脉冲响应的全部内容,希望文章能够帮你解决matlab一直系统函数画脉冲响应,MATLAB之使用 impz 函数计算并画出脉冲响应所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部