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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

7 ]" m4 ]4 z+ C* {& W文章目录: N  R$ Q* s5 Y  e/ B, \6 V& K- O
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结
    1 o! x  [9 I, Z
3 o. b: v9 }( ?* c4 a' M' x

& H- F/ T! p, g. d. `2 D; t前言% z1 C# @) k! B  o! h
本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。; K! [2 n. ^7 O" d, R+ }
4 `) s' p( K9 p+ n
提示:以下是本篇文章正文内容,下面MATLAB已亲测有效. ?" U  I! E2 K9 M% F  S$ n

# Y. y' i: J) a4 N  z一、什么是离散时间信号?) L, g9 x5 y, B& S  c
1、离散时间信号
6 t" Y* H. q. u" R( b5 [信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。! E' g+ d3 l' Q/ W8 R  N. j
离散时间信号:时间为离散变量,幅度为连续变化的变量。
/ @% m0 I* i. S4 F9 ?( ?5 |
$ b6 r  ?; C2 G5 n* v. y0 [  q3 x$ Q2、数字信号处理系统) b0 X7 H% D, E3 R) w7 [
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。
, L2 H# u& p" n  y3 [7 Y4 M" P* X: `# v, M
. E" A2 F4 j+ `

  k# X+ U" a, F' r1 X& I  z( z二、序列的基本运算
7 B  l- A/ X- G2 Y4 K1.序列相加
& [5 x% n  w+ ]4 K, N序列相加是一个对应样本与样本之间的相加。) ?; p+ L& A: o7 }3 A8 X% P
自定义sigadd函数演示运算:
3 }8 O5 q' R% t; {" e, a" \* L8 j7 J
function [y,n] = sigadd(x1,n1,x2,n2)3 S3 T) D- {. a1 k+ V9 `7 P
%实现序列相加
( K3 s+ G1 W" A* _. z% 实现y(n)=x1(n)+x2(n)
1 m6 g/ Q+ M5 j4 [, A% [y,n ]=sigadd(x1 ,n1,x2,n2)
5 t5 @4 }6 n2 |  a: Xn = min(min(n1),min(n2)):max(max(n1),max(n2));
  z% y1 G) ]- ^7 ?! iy1 = zeros(1,length(n));- N! n2 m- O4 n7 E: l6 c$ H7 P/ ?* T4 F
y2=y1;
$ J0 Y& g5 b  q( w
3 ~) H/ w# {# d; v( C0 y  j1 Xy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;* l9 {& Y, x8 O/ @  X+ j6 _
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;* c2 s, j) Q7 o4 w# G+ y

9 U( M, F+ I0 dy=y1+y2;" R2 \( n, F0 S$ b
1 `0 w8 \0 N5 J, J+ q) H
end0 u6 |/ d$ R7 \  T1 e8 ?) f

' ^% P# w$ E7 f5 ^2 U* j调用该函数
5 M7 @0 Q1 t, z' j! D0 u4 }; S/ e/ L" \/ I
n1=[0 1 2 3];" L/ y3 |# Y# w
x1=[1 2 3 4];2 Y3 d% C# R: D, R4 ~7 N+ K/ Z: R! P
8 o4 x. [7 p: h  h) u
n2=[2 3 4 5];% B7 G- ~2 \9 i, _5 w: c
x2=[1 2 3 4];4 s% ]# I+ S, ?, ^& ^$ x( {9 @$ e
" n5 v. N* w+ N, p
subplot(131);
  G$ u5 |" p9 Z, T; estem(n1,x1);( }* ]0 V# V3 P/ Z' H
axis([-1 5,0 5]);
& S' k6 Y' j8 b% f7 T- Otitle('x1序列');& q9 i* B- e* `# K3 R3 A% @6 `
" R9 c- D9 Q. ]: n% w1 K, i! k9 I5 Q
subplot(132);# Q: [; g) c0 p5 U! r
stem(n2,x2);
, t8 D! q2 g) ~1 y% @2 Maxis([-1 6,0 5]);
2 H* x0 U+ ^4 Htitle('x2序列');2 U4 g, J3 p3 a8 C
7 f9 g, Z& P8 {
[y,n]=sigadd(x1,n1,x2,n2);
: U) |$ Z. G! l* {1 A7 y$ C* b5 d$ _
subplot(133);7 ^/ y7 x: ]4 m% G9 Z
stem(n,y);  _" @$ ~: g" d! ^2 r4 f1 ~
axis([-1 6,0 8]);6 n% W. `5 \4 e- Q9 U; v* X$ V
title('相加后序列');' X* t. k, F1 x

1 e! h4 S. |* h7 Z; ^
3 G8 T6 ^2 D4 q' \" \结果是正确的# h9 U" @; k, j  i/ O, f
' K* f: K, _/ _  V- L
5 K9 Y# C; z+ T4 l- t7 y
, i7 |7 G5 b: ?6 h
2.序列相乘
- p% O- b9 k% C5 b$ v序列相乘是对应采样点之间的相乘(点乘)
6 o+ c0 x7 k( Q/ z0 a/ U  t自定义sigmuti函数演示运算:
, C8 G9 S+ ~1 Q4 T4 X) C: R% r% r* g$ Q" Z# f
function [y,n] = sigmuti(x1,n1,x2,n2)/ F4 R7 B2 i- h) Q
% 实现y(n)=x1(n)*x2(n)
3 K! D* y  j1 Y% }5 t- f% [y,n ]=sigmuti(x1 ,n1,x2,n2); B- t" V! e& \" j' d' E9 |
n = min(min(n1),min(n2)):max(max(n1),max(n2));
& Q- F/ ?' ?6 p) z9 G) Oy1 = zeros(1,length(n));
' p4 X9 ^% O2 |3 ^y2=y1;
9 _" W3 B* C0 u; C- A- U* ]5 R; c# y, ]0 i3 o
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;, ]% v" g; u; _. n$ N
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
! G" }, n. b7 ]$ ]3 J
8 {" R5 ^( w$ v; }7 V3 Fy=y1.*y2;5 O) }' k5 y7 @* j2 @2 z
end
+ T) s) I( v$ [5 g0 h) g' B( m3 M
0 g+ Q0 G) e* }. Z  p2 A, x3 Q; j! C
调用该函数$ p5 m2 h* V: |3 W1 g. c8 B
- e& n+ {/ a" Y( h4 y1 r: D
n1=[0 1 2 3];$ ]; y1 o+ P) ?* ~& D
x1=[1 2 3 4];
. }" M4 W6 n, u( T: S+ H
% v  \: W, [7 Z( S4 Kn2=[2 3 4 5];! T" h6 _3 T  l; x9 z
x2=[1 2 3 4];6 z9 _/ o: y6 r9 S: q

# l# E7 F5 V8 j3 R9 M. ^; Y, X: Xsubplot(131);
2 R* x2 Y- f1 x$ g1 E' z+ Cstem(n1,x1);
' y8 V$ t; ^6 ~8 ^5 Laxis([-1 5,0 5]);, D+ J- i9 i/ `& b6 F
title('x1序列');
% ^9 @7 ?, J% z" `: P7 [# O
5 v/ N8 Z- a0 s+ e6 Csubplot(132);1 F" E+ G. B- L/ I+ K7 I
stem(n2,x2);
7 p" P7 L: _! H; Paxis([-1 6,0 5]);
: o6 J1 Q" R6 T7 xtitle('x2序列');
3 n  T. X0 k8 U; a" I9 @( t8 h  M* T; B8 L& U8 W
[y,n]=sigmuti(x1,n1,x2,n2);& p( s, m/ z$ i' M" Q* F
* V* C1 L! a# g
subplot(133);
5 Q+ U, J' j9 B  S- L: Rstem(n,y);
& x( I; z# ~. n/ n7 h7 _# ]; xaxis([-1 6,0 10]);5 u. Y! Z4 n; |4 M
title('相乘后序列');
- _9 m. K1 k" v) R0 w
3 y$ k/ B& P+ p5 S( ^1 f. G2 p, F# t: u* N, t
结果图
, N- H/ z2 b' |0 \5 ~+ m3 w) W
8 W. I/ X5 A1 Y$ ?/ p) c3 R 2 Y0 c6 R" D4 a
% o8 Y  ~, C' H* n$ O6 R) \) i# A
( @/ C3 t9 ~" o1 r
! r8 o8 e2 K* t3 ~+ H
3、序列倍率% _$ ]* U6 q) D' E+ m, }
这个运算很简单,每一个采样值都乘以倍数a就可以了。+ k; \3 q: u- M: L
自定义sigdouble函数演示运算:
2 t) a( ^5 L! E) J# i3 c
7 B1 F' _1 s4 R8 l" I, A/ bfunction [y,n] = sigdouble(x1,n1,a)
" M9 q  p) j" q%sigdouble 序列倍率$ i6 K- i; S" B6 a
%   在此运算中,
/ C, \% m& l1 q% 每个采样值乘以一个常数a。" e' n, s4 n/ Y/ g
% a{$ `' q3 v, _- ]0 P( x9 ?
   1 f* B' Z& m/ W) C* O
      x(n)}= {& O# ^. @( ?( d1 L6 I$ w' h
   
3 N! Q$ q0 k$ r      ax(n)}- H1 e1 k. ~5 S# c: h
% 在MATLAB中可用算术运算符“*”来实现倍率运算。
( I0 B, Y2 X4 {  M5 Y8 m! D* En=n1;) [+ f7 h( I! H/ e2 _( G, L
y=a*x1;
9 S3 N/ g) i( f; mend8 Q  M- m) _, A$ }( S
6 f2 ?3 g/ M3 e/ b) y: z
8 A2 }7 ^5 h7 t" s% L$ G8 L
调用运行: ^& [; r2 Y! ]; v- r) Q
  E, o& v4 f$ t: g, u% A' F
n1=[0 1 2 3];  g: z6 N* p9 q3 Y+ i4 P
x1=[1 2 3 4];
% ^* Y8 H- A* E! i$ }a=3;        %倍率
$ v# J; r% C. e9 m6 u[y,n]=sigdouble(x1,n1,a);
: \; p( _% {! ]1 h# f: c9 d, psubplot(121);5 r& O# I1 T8 G- q+ b8 v& Q
stem(n1,x1);3 @/ m7 V9 X2 j+ I/ i  |9 h
axis([-1 5,0 5]);
6 y+ v  X2 O0 {- B/ jtitle('x1序列');$ \( O) G0 H5 u& O3 o
& X* m5 N' q7 A* N3 L/ d+ V3 o
subplot(122);" x- @) o9 F$ d8 `* W+ J
stem(n,y);  T: C0 J: }; B7 a
axis([-1 5,0 13]);9 `$ b+ O, j! t8 W
title('倍率后序列');
( `6 g* h% b8 b# V- l; I  Y: I6 e+ P" R7 G( H
0 U. M) s6 r8 K% \7 U4 N
结果图
, b4 v& G" K) d4 G# S 0 {% b5 A; j" v' N+ Z+ E. r

; z' ^- U( G* R. W- |
0 ~$ u2 a" H2 V4、序列移位: h4 y! Q  |2 Y0 q' [6 z9 x
通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。9 g1 ~* @- \, \  C3 P1 k: \
移位后:y(n)={x(n-k)}
5 _7 d' J3 J1 l; ~/ B/ j自定义sigfold函数演示运算:8 N# i1 h2 |5 e* i. Q

7 |) @& q2 [: `( F# }
, g+ V9 ]+ w/ t' e) p( ^function [y,n] = sigshift(x,m,n0), |: D9 d, Y& J, W; y' v3 x9 K
%实现y(n)=x(n-n0)
. G3 B# J: t3 E* k" H) {%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。
4 F8 P" u0 _. w$ B* o% S. m3 C5 \* C7 h' ^
n=m+n0;
( @. D" O# P+ g  n* X4 r6 {5 i7 ]; oy=x;2 R/ n( N" f: h4 E

: b, a6 K# f) m& V% R% G9 k
: H3 d& C! J7 y. |# _! Uend
' F) \+ U% X! J- Z0 q/ Y' D5 C
0 z7 D1 P8 r3 ?
  w5 M- }  R0 G! c调用运行:
- }( x, r( w, V+ Z, b, A
5 J4 I0 O8 V/ w+ I( D5 Sn1=[0 1 2 3];
) Y6 J7 R4 F6 F$ Q; Ox1=[1 2 3 4];7 l7 x" |/ _! H4 a
a=-3;        %向左平移3个单位
& e, w/ l1 s. B& m" ~. U[y,n]=sigshift(x1,n1,a);
7 d: E6 c$ s. Vsubplot(121);) C! Y9 v! L5 W, T) ^
stem(n1,x1);/ v+ N. _2 P0 M9 h" D8 T7 l
axis([-4 4,0 5]);
- U* e1 g# s+ i3 g; I6 `title('x1序列');
; M+ B  O9 h: Z7 A+ b$ W8 J+ i: V- k  N6 X9 s& v& U
subplot(122);) E3 I, I2 v6 q7 V8 N
stem(n,y);
  z3 Y, h3 d: W* K* E. x) l5 Oaxis([-4 4,0 5]);% x0 h+ x1 C9 T$ r& x( [
title('移位后序列');
+ ~( y6 z$ o5 x, e: ^
+ _  Y* P. N6 `/ u7 q' A3 o4 k  p' s, \$ D( l
结果图:
2 `9 q& V, o2 h 1 x+ L) G: z3 S2 G. z

# O: |0 l% W3 t9 U7 ]) V
7 F1 `3 G! B# t. h2 B: @1 W9 z4 P( U! x% g/ Y, B  V% q/ p
5、序列折叠
2 S# ?6 R" C% q# h' Y( |& A) ~+ X! M通过折叠运算,使得采样值每个样本按照n=0翻转2 v- Y0 Z% f' }( n( C# }
自定义sigfold函数演示运行:+ S& X( o& n, U" o4 r8 u' a3 H( o

. s' V  e$ ~: c) B. q0 Qfunction [y,n] = sigfold(x,n0)
. R- I) Q% \2 [" A0 A%序列折叠运算
# G: j% @9 k0 @1 c. x: h( Z2 m%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)
) f' @5 V/ ~6 V& V# O0 u, Z2 l6 x%y(n)={
  ~4 t+ I4 k: k   % M8 ?, B5 U6 o
      x(-n)}
; ]7 d0 z0 S9 b' \+ Sy=fliplr(x);7 |& P$ ]; k0 t0 g, C, H
n=-max(n0):-min(n0);  , a) e& d( o% o; }6 b& ^6 l
" k6 w/ N+ [) _8 ~$ O
end" e& U* \1 g5 K! C/ T
, r9 o1 L( |* y3 ]$ f
- r; p' X1 I5 m0 |
调用运行:# J6 T5 ?' j6 i7 `' k5 M" Z2 w

1 v4 b9 y3 s  P( h* bn1=[0 1 2 3];% D- T! w6 Q# m: L* O. y
x1=[1 2 3 4];
" E0 T5 K2 G4 a2 o/ `[y,n]=sigfold(x1,n1);
% ?5 p% u! k! U3 s, y, x( Jsubplot(121);- E3 G( }7 U2 s4 g' O% b# p
stem(n1,x1);7 }( i8 D/ @4 p1 J  b0 w0 K& q
axis([-4 4,0 5]);
0 Y$ v5 M' o9 c+ H6 mtitle('x1序列');
: u% n1 A1 E( U, A* m2 r) @, @. k$ j8 {4 {4 M
subplot(122);
! P5 B7 j9 S* ]5 ^$ astem(n,y);
# p) T6 C9 c1 _& l/ q0 h* J/ laxis([-4 4,0 5]);
$ S# F/ b# F' U2 l/ W0 h* ytitle('折叠后序列');
% h* ~, Z" P# s" Z6 p) `. K) l
9 L" I" Y- E& l" s4 ~& h3 a4 @; p+ ]7 e
9 m$ J7 x$ X3 |+ A" j9 B. w9 K
结果图:
2 Z3 C7 @2 c+ U6 _, e 4 X0 Q+ d* E" [) c( g

, j' z, |) x2 u  L: ?) P3 |8 w2 c/ E# E- h+ q1 M2 b5 t4 y
3 J  I4 h" l' n! V6 v+ N: _8 ]
总结5 I5 R& \, n# C1 w4 p5 z  y) M. J8 {1 K
至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。, B7 ~. X& O* C8 C6 T' i
  • 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-23 23:57 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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