EDA365电子论坛网

标题: 两个序列的卷积和运算的MATLAB实现(1) [打印本页]

作者: mytomorrow    时间: 2020-6-1 14:09
标题: 两个序列的卷积和运算的MATLAB实现(1)
设矩形脉冲 是脉冲响应 的LTI系统的输入,求输出 y(n).
/ F2 I" ^2 }. W: ^' X) [* N6 B( _+ t; c
下面的脚本中用到了一个自定义的函数,也就是两个信号相加的函数:
: D9 k( U5 R/ N% M0 N1 s* Q7 ~1 I
9 O! G, \! d7 K5 p4 p' T7 ?function [y,n] = sigadd(x1,n1,x2,n2)
  b/ I  [' _- H( W& d% p5 ?3 r1 V$ k% implements y(n) = x1(n) + x2(n)
4 X# s% h& `+ H; A. w% [y,n] = sigadd(x1,n1,x2,n2)
" T& H; J7 U0 a9 P+ M# u5 s- T7 }" `$ P5 a$ d%——————————————————————————————
* s0 g" \) Q+ ~0 n4 _% k, F% y = sum sequence over n, which includes n1 and n2
/ u$ \' o+ l4 @% P3 X% x1 = first sequence over n1
" G7 a1 q6 q2 C7 ^$ |5 d' I% x2 = second sequence over n2( n2 can be different from n1)
& w% x3 y8 R1 ]2 D%
2 A2 ?$ O0 \$ h1 y1 g  fn = min( min(n1), min(n2) ):max( max(n1), max(n2) ); %duration of y(n)
% f6 D' }8 ~- u7 _y1 = zeros(1,length(n)); y2 = y1; %initialization
) }" H1 j* m) s0 s: z, t$ x% [y1( find( ( n >= min(n1) )&( n <= max(n1) ) == 1  )  ) = x1; %x1 with duration of y1
2 U) L9 E# P. y- J" N, u$ b; f/ ~y2( find( ( n >= min(n2) )&( n <= max(n2) ) == 1  )  ) = x1; %x2 with duration of y2# A7 I( E; Z0 u& O! j5 m! B) b, Y
y = y1 + y2;
3 M" S! x9 e6 _  s
) B: a5 r  U* X3 o
. O1 o& L" |; r直接给出MATLAB脚本:
: g2 G# X+ T4 s  `# ]& d; l; \- O' `" m) h
clc
' `" ~) j; ?6 V* {1 [0 K9 kclear
5 I: c; U$ v5 B# l" Y$ jclose all
. r; ]3 @- h  q0 e
1 b* l9 [1 H! m% help stepseq: J+ K% b3 c6 s
%   generate x(n) = u(n - n0); n1 <= n <= n2
. c) w6 z# d) ~2 s, n* v  h) G%  _____________________________________________) v+ ~# s* r" A3 a
%  [x,n] = stepseq(n0, n1, n2);& n& E( `  K" `) [2 l9 ]- a7 @
[u1,n1] = stepseq(0,-5,45);2 D4 F% ]! d6 P
[u2,n2] = stepseq(10,-5,45);
4 Z( @. k  u' S: ]! u' d
( v) Q3 R" F; X0 h3 `! Z% generate signal x(n)+ z% u' T2 V+ N9 S* x; X' {" X- d
[x,n] = sigadd(u1,n1,-u2,n2);
$ W) m6 u- k1 U0 y. D  a
9 N6 N2 I/ z' M% f% generate signal h(n); n7 W  K" J- D  n
m = -5:45;
; e: K0 l: R2 Y/ {h = ( (0.9).^m ).* u1;
4 P0 ?( \3 A9 g: f9 u* _7 K1 Q: z  C. P
* I, j9 W% |/ ^7 R
% the convolution of x(h) and h(n)" t, }, x4 o/ F
y = conv(x,h);
/ `* f: s) z! B% ensure the index' N0 Z$ F& p5 x3 l- G
nyb = n(1)+ m(1);
, ]) y6 W0 d! G8 C! H- _1 Mnye = n(length(x)) +n(length(h));
: r- u% O+ e2 E& J2 a- Qny = nyb:nye;; X/ b6 i1 K0 J
1 [6 |* e( D: d; |* [
; ]: s" S0 _/ H$ P$ M0 Z
subplot(3,1,1);- l3 T) ^$ [7 T5 J( u2 i0 p' ?  Z
stem(n,x);
- x5 ~7 d' L6 j% T; ^! @# Z" Y+ s% htitle('x(n)');
5 d: T! I- u" i: H" Q6 o% Sxlabel('n')
3 M3 z- J/ [2 z$ v( |) L2 p/ k' `7 c6 T/ q
subplot(3,1,2);+ o8 V$ M0 R7 M4 Z
stem(m,h);
; w& _/ E) _* ?1 P" }4 U5 Z$ Ftitle('h(n)');! ?* I/ j' z" R' j. E2 J6 R, j
xlabel('n')
" I: o( D! m( c7 |
0 ?" T8 Z- z. Y4 q- msubplot(3,1,3);* n8 `  `% U/ D2 Q/ I% k+ C
stem(ny,y);
/ P  L% ^$ l- S1 Ytitle('the conv of x(n) and h(n)');
+ h5 _+ ?* c* I. N/ j- x( A; Xxlabel('n')6 e1 i$ }$ S5 f5 L$ ?' M& ?
xlim([-5,45]);9 ]. b+ @! Z- L  X8 b$ ^
! Q* F0 |' W9 n+ |/ m+ x

* q# m! e" u9 o
9 {# a* o( j" S7 R) ]$ @! K1 R( R; E2 p/ g. W

  n& y0 ?$ z! G# P
* q* U0 s) w" Q4 b
' D- g- ^  o% Y- n* s
7 w& c2 ~3 t" r* I4 r8 R
作者: Heaven_1    时间: 2020-6-1 15:08
subplot这个函数经常使用
& X' `# a  y+ h. b+ `* f




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2