概述
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
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
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)]
7.gif (696 Bytes, 下载次数: 0)
2020-10-15 14:03 上传
; j$ P u# S, @分子系数为:b = [b(1),b(2),...,b(n_b+1)]
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
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
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
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
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- ~) {
1.png (24.84 KB, 下载次数: 0)
2020-10-15 14:03 上传
4 }# 5 F' n. Y5 k
最后
以上就是魁梧衬衫为你收集整理的matlab一直系统函数画脉冲响应,MATLAB之使用 impz 函数计算并画出脉冲响应的全部内容,希望文章能够帮你解决matlab一直系统函数画脉冲响应,MATLAB之使用 impz 函数计算并画出脉冲响应所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复