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

离散时间信号——序列的基本运算及matlab实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-2-20 16:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x

. C$ ^$ v0 i: @  F( {2 ~* Y文章目录
4 y2 i4 t$ T1 g; C  y, b9 {: B
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结; V! i' c9 I. s$ w- e
9 G3 F' Y' I6 A
2 T; t3 P( i- d/ B& q( z# t
前言
  M8 |6 Y$ g7 C7 h6 S本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。+ {: {3 L( d$ E- ]( ^6 t! E
0 N: |' C: X/ E; Z9 }9 g. L
提示:以下是本篇文章正文内容,下面MATLAB已亲测有效5 @4 e7 N! k. m& U
$ B* J1 q. q8 U. ^; Q& W1 h* P1 F
一、什么是离散时间信号?
9 ]& q) w6 T. O& n$ W/ e1、离散时间信号
# y' Z+ @* W( i. W' p9 K# V' K1 g信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。3 h' K2 S1 L) ]5 n
离散时间信号:时间为离散变量,幅度为连续变化的变量。' [7 l3 a- g* Y5 N1 h5 m
  I, R6 C9 _. P- `
2、数字信号处理系统
* l( T# h; b7 y数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。8 V3 ^; w( \' i
# @5 G$ w7 a/ a& f, l2 x. j
7 h& l& U7 m, m& x2 R( z- m

) C1 k6 ?  x9 _" C7 {二、序列的基本运算: n: s! r- C5 v+ A7 w
1.序列相加5 H3 K5 I# @' c2 _* D8 Y) B
序列相加是一个对应样本与样本之间的相加。
# ?! @% L$ ^/ @9 R$ c自定义sigadd函数演示运算:
6 a( P* d, R  g' Y7 B7 O* G) g: i& d( u) u& x" q4 B* D$ Y. A
function [y,n] = sigadd(x1,n1,x2,n2)
1 A/ D1 j0 c4 B2 P. e3 y3 c%实现序列相加
4 [3 [6 J, [( P! E% 实现y(n)=x1(n)+x2(n)& G) w; o' @% S/ r
% [y,n ]=sigadd(x1 ,n1,x2,n2)
/ c3 l. N* N3 vn = min(min(n1),min(n2)):max(max(n1),max(n2));, j3 h4 h( M9 X% w0 J% A4 ]
y1 = zeros(1,length(n));
$ [) f3 n. C! R5 b" x$ m+ q! Ny2=y1;
6 U. M  V8 \9 F$ i, y
* G8 _6 Y9 L' @8 Iy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;! M: O1 l+ b; v; {5 k
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
! S, }( y7 l/ R% D
& k% A2 S  m4 Q: Q$ e! N# M! s) Ny=y1+y2;9 b6 I% i: }- M) O
* D; f9 g+ i) j, _
end
' ?. A. m2 \2 b# ?* V
4 k- |% J6 k$ ?, ^. j+ G7 R9 ~调用该函数
% x9 T5 B( z" h: V) f) K* G2 F  X4 }' {
n1=[0 1 2 3];% ?' p5 B7 b$ d
x1=[1 2 3 4];  N( @  M% c/ w7 S" X* A5 D
1 Z1 r: f- ~% E9 D4 W' l
n2=[2 3 4 5];
6 ?# a& ^" {' J0 n* Tx2=[1 2 3 4];/ l9 D9 o, g3 w+ m* v, P. q
9 O. {$ T) K$ w7 Y  M' v' D
subplot(131);9 G8 k7 u/ ~1 X
stem(n1,x1);& ~: w1 \, K" u$ q6 i8 f
axis([-1 5,0 5]);" l1 c+ u, R  O, }
title('x1序列');
+ T4 h* l& k  S! S
+ K8 x! O6 s( C9 b$ Asubplot(132);
; B1 ?7 y0 y$ o+ M) tstem(n2,x2);
* V- b7 I" m8 V& vaxis([-1 6,0 5]);; d5 g) Y/ D1 ?) ?8 S
title('x2序列');
# ?: E7 c4 P) l4 F$ f& j. t( P. W: ?. X: t! q( M6 s3 A8 i; u! p3 r& D
[y,n]=sigadd(x1,n1,x2,n2);/ ^& h- J' i. \$ D5 C
0 I/ i+ K( d; L
subplot(133);
! f  [+ S$ P1 I) @6 ?: G' rstem(n,y);! g3 X, o( g( G, u) ~8 |
axis([-1 6,0 8]);
; B4 _9 {( N% M0 q" Y, Q" R3 ^title('相加后序列');
; P4 }9 {' X& N( O; Z2 w9 [' [' e: d0 }& a- u( L; L
! j( A6 {* |- y, p& J
结果是正确的
( `6 C. W- n" | + [6 X1 ~) S( i
$ B1 K: Q/ T- w/ r' _) R7 k
2 A. _% R/ R# J/ ~3 K' y& M0 k
2.序列相乘0 K/ o- y7 K/ ]+ C% H
序列相乘是对应采样点之间的相乘(点乘)& ^/ i4 |+ Q0 ?7 R0 u+ m7 z2 A1 l
自定义sigmuti函数演示运算:
3 i8 G: U& z9 i1 t& r* T8 C1 e9 A- B, p
function [y,n] = sigmuti(x1,n1,x2,n2)0 j: q) ~( y7 Z" q
% 实现y(n)=x1(n)*x2(n)$ W9 t3 s8 }& Y* ~
% [y,n ]=sigmuti(x1 ,n1,x2,n2)+ ]1 m5 `' ]' I/ h, X
n = min(min(n1),min(n2)):max(max(n1),max(n2));
% r  X* y7 ?+ G, l- Z0 Xy1 = zeros(1,length(n));
# H2 L! Y' d: Oy2=y1;$ X# H. t. s. A, ?1 q
$ u$ {- |6 d+ `3 M$ N
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;; l3 D# J# e" j+ S9 J, O
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;$ u3 J. X# V7 i2 G( c- S; v- w3 i& t

; p! I- e' V5 I' B0 j* Xy=y1.*y2;5 k! X# x& e. K
end
. f, N; Z1 A; `4 q
9 g* \* b9 p) s, K
$ Q; E# q* g6 @2 g- B3 O: @调用该函数
  a: m: H+ ?/ }8 H: q1 _, g1 k) S/ W- l7 s
n1=[0 1 2 3];
* g7 @/ s+ j5 F+ z3 _/ Q! |; ]x1=[1 2 3 4];# k# J1 n. u& H! D
4 O. ^& c, W1 o* t7 r0 J
n2=[2 3 4 5];
; j9 j' W& ~+ r2 j! ]) w, [x2=[1 2 3 4];  |7 M) \" J8 M" ]1 h
2 O4 j1 t4 {+ F
subplot(131);
  X; n, u4 Z( E6 [) y' W3 i; c5 T$ |stem(n1,x1);2 J1 q, |' H* }9 d) R
axis([-1 5,0 5]);; t3 b8 u( N9 g: h7 C
title('x1序列');
/ j% A+ D; x* W! E1 w2 J* Z( f$ h" m! }- m4 e
subplot(132);. {7 K, i6 n& o0 V- I4 q4 X
stem(n2,x2);  K0 t8 s, r* X1 j! f$ h3 f
axis([-1 6,0 5]);. A3 J$ b3 t6 Y4 Z
title('x2序列');
1 j/ ?6 U" T0 x7 h* F' L
, }% x+ A9 K2 D[y,n]=sigmuti(x1,n1,x2,n2);/ c0 z; L2 f% K, j  a* p
& p6 i3 G8 M/ E  X# t4 U/ _" e1 a
subplot(133);
5 y1 {! c' C% Z4 R6 ]stem(n,y);
" e9 x4 ]4 U2 i+ d8 I/ f2 ~  ], Eaxis([-1 6,0 10]);0 K" C% {9 B2 _! p
title('相乘后序列');
/ q9 m8 z" R; C, ?: d% b/ e& C, w' T
. E7 {7 M0 m  h4 C3 f$ h% T
结果图0 K0 q& d4 j5 f) U6 b. d1 S) x

2 ^# e- v. u, z" m) g. o 5 T9 j/ K3 C' m+ @4 P

' N' V) p! _0 S; g) B
# P6 u; m6 y' _* j' H  A7 l8 T" c
3、序列倍率
+ O6 h( {6 \- E6 b这个运算很简单,每一个采样值都乘以倍数a就可以了。
( H1 }' Q) T# z( N自定义sigdouble函数演示运算:) C8 c) ?" T5 w6 `: h, X; K  s
: `% H9 V6 z; [1 b/ o
function [y,n] = sigdouble(x1,n1,a)
* f5 \3 l1 ~% W  q) I# q%sigdouble 序列倍率6 d9 e* x! \% z, S8 P$ q3 ^
%   在此运算中,
  x; t9 f  v/ r7 g- C( P% 每个采样值乘以一个常数a。
  [2 R8 u8 i  _* p' z: p( I+ u& p% a{: M! z1 |) F- M
   
! W$ C2 n4 q7 B1 [) u+ _0 \7 ~      x(n)}= {" n1 ^: q! w% f, Y5 t
   ' E* E  o; Z# {: s/ ?" \
      ax(n)}5 t) v7 b* |0 }6 u  w6 r
% 在MATLAB中可用算术运算符“*”来实现倍率运算。' e% q9 ]. Y9 [0 ~/ m4 _! ]5 o5 X8 P
n=n1;* r- m8 x4 x, O+ R. _3 z
y=a*x1;
( N9 N, p8 \3 d7 \+ Pend. y# R* K( w/ d3 }) }( r5 \! N7 i* }
. P) R. J$ M1 a, m* d, J
, s. a& c: R0 G' g- y* I
调用运行- `( i* a5 o. L2 l; g

$ y, i9 Z  N( @n1=[0 1 2 3];' o7 q$ S( m2 F: O
x1=[1 2 3 4];
7 e/ {6 s6 C/ {1 [- Sa=3;        %倍率
; n; N) o# c% k  B" u3 q[y,n]=sigdouble(x1,n1,a);% j1 \- P2 B/ m
subplot(121);: N* q3 ?' V7 B* B( ~1 v
stem(n1,x1);
) X4 ^' _" s. _, c* i  U' X* G* w# I: faxis([-1 5,0 5]);3 u% w( k9 b, y/ S, Y  A! A) i" p
title('x1序列');
1 k% u) A. W( H1 }$ k0 G  z( d2 e. V( B" C; ]4 F" v
subplot(122);8 h6 ]- x5 P5 p- e" v5 f& I
stem(n,y);6 Z: ]) \# T& R0 z
axis([-1 5,0 13]);
% D" G. F1 c9 u* d2 X& b) Y( ^title('倍率后序列');
0 H4 v8 |: r! O6 u8 j4 o+ V+ A8 x$ Z/ v, `% m
0 s; P: z& t5 ]
结果图- l5 [( @% B: d/ H. Z6 c% ^

2 J4 `! A* ^: ], u6 l, T+ ^0 t' \" Y" X7 L

4 m  m/ S6 k) O" E; @3 p% Y0 K4、序列移位
) ^' r/ O( P& p* p通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。
' r8 Z0 g( H( `4 r移位后:y(n)={x(n-k)}- `% Y6 M* A! O( F* x
自定义sigfold函数演示运算:
1 D! O0 t9 S, y# U
: O( ]+ C( E2 C- I6 b* X1 d
* ~/ x7 n, ^* c) |function [y,n] = sigshift(x,m,n0)
! c  r  _1 X) T" Q- J8 [% i8 @%实现y(n)=x(n-n0); S$ [# i* `; g6 |" ]
%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。
% A+ Y: `' x( i" c
* J! f  l$ s0 r" f7 bn=m+n0;
9 O+ \  S' y7 t+ b8 }  T1 Jy=x;
% J* N/ |( @: f4 F3 B: l: I0 W/ D9 D
# p# \' {! K+ v) @+ \! Z) _
end  N# O  i6 Y( ]: [8 |* n' x
1 \  ?0 O$ ?- L; D- y' |# s
3 w) B$ ^7 @' Z; I! t
调用运行:
% |3 N" [2 c% I, B
9 r* v0 X+ S2 e9 ?5 ], Fn1=[0 1 2 3];( C6 p1 Q$ ~9 q! J
x1=[1 2 3 4];
2 D9 }. F9 v6 N( F- ?a=-3;        %向左平移3个单位+ p8 y; s  R7 J
[y,n]=sigshift(x1,n1,a);
: t; o+ I. d' k7 x$ Bsubplot(121);9 j2 b- W- p1 [! @/ P
stem(n1,x1);
6 c6 v" j- Q: p9 f3 Paxis([-4 4,0 5]);
/ o* U# C6 c3 k7 T/ Ctitle('x1序列');
* B+ v; t0 E5 {& }+ Y$ d9 b+ d; J4 @3 K0 Q! ?0 d7 o4 y
subplot(122);+ j% Q' _) ^" j5 b
stem(n,y);
; t, |2 ^2 y- l5 H- Z4 ?7 N5 Uaxis([-4 4,0 5]);; v) B* l, e4 P( q7 u- m" Q
title('移位后序列');
5 z9 r& `  @% I+ l7 [: b( K, N! ^3 I+ w; X, ]3 @/ @$ R

  ?: o$ A$ I) k0 ?0 c/ a2 |结果图:
- K$ ^* ~# c) t5 V2 L1 m' A
! L. n: w6 M& A, E4 C) e4 z+ C& z0 r  J$ `

3 m5 ?, W  u% ^0 q  c/ B1 U. D0 N& K" i  m
5、序列折叠
# c6 G/ M* Q: K  r& g通过折叠运算,使得采样值每个样本按照n=0翻转
$ w. {4 I( I. o' D& q1 L8 U自定义sigfold函数演示运行:
. V' ^4 |$ ]6 O6 [2 x0 _* i4 ~( K- M9 S; d
function [y,n] = sigfold(x,n0)
( D5 T/ q6 P1 t5 e$ ~%序列折叠运算. |8 v* X# M) s3 S8 {) T" [/ h! }4 I
%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)* c8 D( x. |9 f
%y(n)={
! D1 _  _% `' n  g   
2 m* n+ ]& }9 S3 Z      x(-n)}
8 v2 Z) S: E$ S1 M. V: Ny=fliplr(x);
& M) a% t2 f, t& w* g& r7 j1 \1 [# g& }n=-max(n0):-min(n0);  
9 D& H* z8 G3 a, [% v8 o+ a$ u/ N' c' T9 F+ o3 o
end* h# e* Y. X1 i/ u
6 v# R( H& J5 d; n. [1 Y

( D) n1 T3 Z  U调用运行:1 M& V% z8 I# O- j4 n- C

" `/ _1 V. U( m3 _& un1=[0 1 2 3];
9 d- X+ O  r$ Hx1=[1 2 3 4];4 c5 h. m6 }$ {7 T4 |  Q" M4 Y' G! \
[y,n]=sigfold(x1,n1);
( P3 {+ N: p2 C; i& esubplot(121);
6 u; s/ W* T- S  [2 ^stem(n1,x1);! ~/ T; g; k% h  S
axis([-4 4,0 5]);
! ]+ l1 y) q0 E: wtitle('x1序列');
7 k4 s8 ~7 G) a0 u
9 z( b' ^8 r4 ]  A( M% |subplot(122);
( V" Y2 G7 Z" B/ r0 G2 V6 P# estem(n,y);, U1 l5 A! W9 s8 c7 t" H
axis([-4 4,0 5]);9 {2 t# b7 b+ G
title('折叠后序列');
+ u: y2 o( q9 M6 \1 s6 K+ L3 X+ `2 Q5 v/ x) ]2 n* f/ [- M
% O9 A& J1 Y% p$ Z5 \* d+ C7 o% M( D6 R

, t( m* S1 Y' Q结果图:# X# }2 E7 R  S: v- ?$ K4 {" [& F
/ x2 h0 r1 A4 ^
  ^7 t" `  l. ]- m
4 g9 c  w& V- m7 \: C' F- ^' f6 U: `
3 k, u8 t: H* m+ w6 i- E1 l" w8 m
总结& W  A2 N2 v% @/ c2 g
至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。5 y, H" M* U' G* {" H* |
  • TA的每日心情
    慵懒
    2020-6-13 15:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2021-2-20 17:05 | 只看该作者
    离散时间信号——序列的基本运算及matlab实现
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-24 03:17 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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