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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
- s$ y% ^8 \) x$ C6 i$ f
文章目录  l" a5 }+ v* ^$ A$ L6 W+ v  l# G
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结
      p( J0 O1 o4 r$ e
  ?' e8 j, e$ K0 X+ ^, l

; l3 _6 N  y( g前言
: X5 ^. L8 u0 j9 O& @本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。
5 c3 x6 C0 s" Q7 \( S/ s% e0 i9 @
提示:以下是本篇文章正文内容,下面MATLAB已亲测有效/ e# u( Y7 n% D2 m' a% V

. k' v9 z. S5 P, t1 F一、什么是离散时间信号?
0 H) m& P8 }- T4 q& Y1、离散时间信号
$ i; |7 v3 r% _$ `信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
0 X( C. N2 b8 h离散时间信号:时间为离散变量,幅度为连续变化的变量。
' u/ }" P. O1 u: l  D% b6 t& }4 [' M- T: Q! u5 ?
2、数字信号处理系统+ J) g5 f* A) B* ]! i# h; [, k
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。
/ {, A. K4 ?* c# r
  o' L, s) i: _0 t2 H7 J$ a # ?! C( W. c( x" U8 v9 p  O6 C
, R6 ^: r4 H# i/ q8 w- J" G
二、序列的基本运算
: z5 ~+ G% B) X0 |, u1.序列相加
: [4 i, v2 v: E序列相加是一个对应样本与样本之间的相加。
5 a( s/ L+ j9 ]7 j  q( ]自定义sigadd函数演示运算:9 `: _; Q0 C4 m& I# f: P/ ~
7 K: P; P4 e6 B# N/ t) s6 T: c
function [y,n] = sigadd(x1,n1,x2,n2)
/ C6 S' ?5 R8 `1 \%实现序列相加
& Y4 a! R4 W4 Y, r% 实现y(n)=x1(n)+x2(n), N/ E  a0 `! @& r- }
% [y,n ]=sigadd(x1 ,n1,x2,n2)% }: w. b1 W0 [* ~
n = min(min(n1),min(n2)):max(max(n1),max(n2));1 D/ N0 b3 N; }: ]9 h( n2 T
y1 = zeros(1,length(n));
8 n( c' d% I' e3 d7 w' d& Qy2=y1;5 m$ `' o# c! B' N" z- Z( R

3 R1 n" a  T6 r  v" {6 I8 Ty1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
& \# a5 Q5 g  |) w0 M7 Ry2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;4 G% u# Q6 G  \* @3 n* `) n: F

5 s; H& a7 M- }3 p! b$ a( Cy=y1+y2;; E: {2 @" B! x, R
4 u9 H2 ?; b' M9 E! S" L2 \5 c! m
end
0 r( W, ?* z, K# ~# ~+ V1 [2 G
9 A1 d6 q# f$ W4 E1 n0 c调用该函数/ ?" x4 ^8 p- m/ h" V  L
+ [8 F( d/ t2 Q2 k: L8 i
n1=[0 1 2 3];; R1 M1 ^0 m: X: s5 m) ?, R) `
x1=[1 2 3 4];, N. E) i' y9 w8 K* |0 K  l7 [4 }

. X+ i/ h) |0 W7 l7 i* Nn2=[2 3 4 5];+ P) n' f8 A5 v. U0 s+ E! E( i" d
x2=[1 2 3 4];
2 g  N9 g. u  N# s+ E7 Z% h( M/ v+ v; p& P" c; e+ A. D4 W
subplot(131);
( s5 g- A0 ?! Ostem(n1,x1);
. f( _# @1 K6 [$ m7 o% `# {8 t4 Jaxis([-1 5,0 5]);1 Q2 p: |# o: g8 M
title('x1序列');9 {( V7 u! v. X! G0 V. @

3 f4 V4 \/ g7 q' b, ^0 I8 esubplot(132);
, H+ y" k. G8 `8 }. z' wstem(n2,x2);
4 u9 a1 r# G( D& [$ w1 e% ~axis([-1 6,0 5]);
, ?1 \5 v6 S% p& a: O4 V& h6 vtitle('x2序列');
. E+ w; H( `$ ?6 s# C
+ e% o# l* O4 Q: u+ v9 \[y,n]=sigadd(x1,n1,x2,n2);
# u* O* g  u) b! r  u5 y  |
# [4 ^; r0 M5 u+ B* Usubplot(133);1 _1 n* U% |% j- b
stem(n,y);
" s) Z/ W4 j6 I) e, E; Z0 Faxis([-1 6,0 8]);
) B) I: S! F8 K) Z9 Stitle('相加后序列');
& m+ O( M: D3 @" |0 r, s, y" @: z$ E/ ~# @: R

, W% U: L# Y) \. k. \' I3 D结果是正确的
2 r/ |& U* z  q% e! _$ x & a4 X& X6 w+ Q

7 {( V7 T6 F1 H7 |
" i( H, j1 u! y2.序列相乘; r; M9 B. P+ f; l) c
序列相乘是对应采样点之间的相乘(点乘)  p% J' Y4 u7 R' Q; }6 Z
自定义sigmuti函数演示运算:, @$ u; _3 z  ~/ t" P

* e: O2 d2 _2 h$ ?( sfunction [y,n] = sigmuti(x1,n1,x2,n2), b, H% _% R; b1 s! d0 o
% 实现y(n)=x1(n)*x2(n)
2 _9 V9 H% ~' D& b5 l0 U# H7 r7 Q% [y,n ]=sigmuti(x1 ,n1,x2,n2)
" i( Q9 P  z; O1 l4 c6 n3 t8 v: Nn = min(min(n1),min(n2)):max(max(n1),max(n2));
# H5 ]- l: u  ?( a& n7 E# W8 ]y1 = zeros(1,length(n));( @2 k$ ~/ k; b* Q
y2=y1;$ o+ R4 z( @; \5 q4 w  L

3 O" |0 ]5 u# |5 Qy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;* x  W2 t/ u; b: l" B
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
  q. f: n* [. @; }' X1 `* O
9 g/ p6 ~% Z8 `# n) ~% W9 W. Qy=y1.*y2;
9 I5 K7 J! T3 P, W' r6 N) Z$ Gend
  ^* ?2 O4 _3 `8 O' G$ k' M) R7 t3 H! E; l& {8 `3 I% w* U% R. F

) X8 _3 ?6 W- g$ }% m调用该函数" |7 U' o# z- H4 `' M
& b: y. O2 u5 H+ Z& |, v- x# S
n1=[0 1 2 3];
2 c9 B4 q1 V6 b* U2 W! gx1=[1 2 3 4];
2 i$ t! }4 a& ]% v' {+ y
/ a5 G6 a8 r0 g1 sn2=[2 3 4 5];
$ t1 \1 G: U1 T# q. \' Wx2=[1 2 3 4];
' C' Z, k$ s6 J# N7 f- g: A3 g9 y( e
subplot(131);! G/ @  u" [; w, G
stem(n1,x1);/ y1 c& J& m6 Q# o! L
axis([-1 5,0 5]);
2 {, f: I' Q. E* Ttitle('x1序列');
- E2 {6 o9 I: \' u9 y( i: `5 S& b# g- d2 k$ z
subplot(132);5 H% ^# i) x# w! H& E
stem(n2,x2);" E& h* Q' n8 J4 Y3 o
axis([-1 6,0 5]);
% C' \3 o; _8 M' b* {7 i' jtitle('x2序列');; [- W  g+ `" D$ i; C
7 o* c9 p6 q$ s! b$ i) P$ h( c. D
[y,n]=sigmuti(x1,n1,x2,n2);: t  c  d4 k* O* c7 K
6 U+ A  w( L5 `
subplot(133);% F; b. F. Y& G0 M% F( Q) t9 ]
stem(n,y);! _+ e/ f2 z& |0 l7 s2 Z
axis([-1 6,0 10]);
/ q9 ^- p4 {! w! J$ d' Gtitle('相乘后序列');2 S- y/ l7 `# s/ e% a+ c. \, _1 O
/ Q# n9 `7 {& U' h  _: V
4 D2 _' w; Z& r2 O* n5 H
结果图
; H! `2 u, F! _9 J
0 s+ g2 l' a: M: E! s! e
! w! F3 e2 x& N8 b2 a. j# b$ @
6 |, B5 N( y6 v. D( r0 t7 V; y
0 z: e7 X; T: e0 s5 C% _$ x% {
2 H" `7 a# W- t! [5 W7 Z5 A, \3、序列倍率, c) R5 e  v0 V5 J  Z
这个运算很简单,每一个采样值都乘以倍数a就可以了。+ N7 e, L( P6 K( b- y
自定义sigdouble函数演示运算:
0 u8 O4 r0 ~+ [& x( C; H" r4 ]9 d
function [y,n] = sigdouble(x1,n1,a)
. Q, r  X/ H2 M* x%sigdouble 序列倍率
% S+ F* O, a, y%   在此运算中,6 s) k" T/ s& ~5 w* s1 n; m
% 每个采样值乘以一个常数a。
- G6 i% A/ y6 F7 k6 L% a{
: a/ W/ z* Y8 k   $ S1 @: ^4 ?7 X3 y
      x(n)}= {
) t8 p+ X4 Z* P# ?   
  O/ {& \% _7 `; u" T# ]+ b      ax(n)}% Z5 d$ ?2 ?! L! V+ h9 Q; r
% 在MATLAB中可用算术运算符“*”来实现倍率运算。8 h- n* @  e8 ?1 p2 R" k
n=n1;
( f1 b' d: m0 p0 ?0 v! k( ]& gy=a*x1;+ \; A* ^9 [* G0 Z, E0 |1 F: a
end
8 u- F; D" T, w! H: i6 \; x% Y) V5 r' m$ r3 }
/ u3 a9 Y8 N) u
调用运行
) ^, P3 U, ?# F5 Q: O7 J2 n8 |9 T/ b* w! N4 L
n1=[0 1 2 3];8 p/ g2 s, g/ k  j1 }& e: S! g$ s- F
x1=[1 2 3 4];3 S) s% E9 B5 i1 v! q. m
a=3;        %倍率
/ p" X& H0 N" R. o- a4 @5 r/ b, M[y,n]=sigdouble(x1,n1,a);; i* H. m+ _; a& k* q0 |! U# L
subplot(121);
9 ]7 ?3 Q5 h7 W2 O2 H, ?stem(n1,x1);
& o1 V" Q) @$ m" ?$ ~axis([-1 5,0 5]);0 i; w+ d! [/ _3 I+ s
title('x1序列');% L2 _9 W) ^( j
& ^* O/ J5 g$ D( p6 @0 g: c
subplot(122);
) N8 ~4 p# o9 ]; Pstem(n,y);
, L0 C# x) o& z& H- Paxis([-1 5,0 13]);5 f' ^1 Z) ]) @. P: Q' k7 v
title('倍率后序列');! Z) R& Z" }# `

2 z( [! U, B/ k; j. q' C, t0 H5 O" B2 d) ?$ P
结果图
  i1 U6 Q- ^, k7 \/ o' I; T! q + v; i( G0 G2 h/ u  K8 f
6 G! {3 b, k, s/ x9 W9 c

4 \% g2 n9 W+ ]6 R( D4、序列移位
5 T) x" A( E; O% @- j+ F通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。
5 h" u  Z9 e* H3 g' K移位后:y(n)={x(n-k)}
  l- `9 R' |1 [自定义sigfold函数演示运算:. x& ?- o4 v: ?- f) L8 G

% ~, \3 Z( S$ F" W4 q3 K
0 d2 r/ U9 ^9 ]! b, o+ qfunction [y,n] = sigshift(x,m,n0)
) v( j0 y# L4 R3 E%实现y(n)=x(n-n0)
8 C$ X4 ]5 {- v2 _! U" d0 U. k$ ?%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。
7 h8 x* R7 O. H, r2 ?* x; ~. H
7 M6 j3 p( Y# bn=m+n0;/ U5 ]3 E5 V' O
y=x;
  P% I. {+ Y7 y, w. l+ l$ h
) v7 w  \0 [1 i( W- x' u6 g4 |2 Y  [9 p( f! d  e9 P1 Y
end
% i* D! E: a& Q, v% p& _5 I- @% A- J& Z( ]- E2 |% p
! N8 i$ O# ~( O
调用运行:
' n; w# t+ V+ u' O  `! w- l* l: c& ?- l
6 c/ t( M5 ~' I3 z3 ^, W  Wn1=[0 1 2 3];& h* K2 P- \( l* Q, K) w
x1=[1 2 3 4];
, w# h$ G* x/ y6 X- v& l+ b! _9 v* l' _a=-3;        %向左平移3个单位
# E, {' J/ e% A. V1 x9 _[y,n]=sigshift(x1,n1,a);
( q- k9 I! {: Z# n- c& k& P" \subplot(121);7 L+ a. M% T% N) D8 b
stem(n1,x1);( G; X) x0 ]. r0 k9 K! s
axis([-4 4,0 5]);
1 a2 U5 q$ T  utitle('x1序列');
: W! |& J0 w4 c1 |2 E& J( C, n) i; _) j( H
subplot(122);, `8 e8 j& W* C, [
stem(n,y);1 a1 I, ^- t: S% E
axis([-4 4,0 5]);
: m0 U8 j* y- U1 L* utitle('移位后序列');+ l( W- |/ Z) ^

2 P: q1 U  i0 C1 \0 m6 @5 g# t$ i1 n$ S3 s8 C
结果图:4 M7 D7 }  \* q: L, {- {: T; I
+ ~' P* i$ f. w; x
, f, H. x; q8 m1 u6 o- ~* Y
/ Y0 E$ ~3 F" ?7 N: q
# _: ^  ?! P) `; Q0 A. p
5、序列折叠3 e$ T- j- A: P% f% W- q' I" g) A" x/ A
通过折叠运算,使得采样值每个样本按照n=0翻转! x: S- K7 d) @  D0 z& {
自定义sigfold函数演示运行:
4 A9 H4 ~0 j4 w; k' V. q1 m9 J) g
" w1 g4 o3 g- }: lfunction [y,n] = sigfold(x,n0)) G" F7 W8 n- p0 b
%序列折叠运算2 E8 j( k6 u1 R& [
%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)
  ], J8 B" N& J) X3 h& h) @/ z  E%y(n)={
6 b' c4 U; a6 K* l# e   
! }6 v# |$ H) R! T4 R6 m1 x      x(-n)}' P* t* @4 M% B7 R
y=fliplr(x);
5 W$ I' P* ]( L) t6 K5 Q! c; d- T7 un=-max(n0):-min(n0);  
9 L& \& U' }  e, P
( \8 Y4 b" g. i# r9 ^8 gend
5 x8 R. @+ M& Y
- W+ O4 a7 u1 }9 G( L% e8 g5 v( d" Y0 [; k  N5 D
调用运行:) s! j2 x3 \+ \0 L5 U# c4 I. F" @
% O4 u1 F" S% p9 a" ?' W. ~
n1=[0 1 2 3];) p9 i) [. ^4 L9 r( V  N" F
x1=[1 2 3 4];
) v. Q% C) A4 `8 R! c[y,n]=sigfold(x1,n1);
8 R  V9 L% e2 i% Rsubplot(121);- r6 r! `0 M; h6 x
stem(n1,x1);1 }0 W3 r& d8 p5 o" n, e4 @6 k& _+ `
axis([-4 4,0 5]);3 V9 E) \' t  K7 {7 \/ j# f+ s2 ]$ C
title('x1序列');6 u: r9 p; f) B' Y. F

1 e, o9 J: l+ f& J: psubplot(122);6 K& x: Y% V4 `# R% N5 e- n% U5 ]
stem(n,y);
* i- g( i" L6 R0 K* V7 w  Haxis([-4 4,0 5]);
9 \) _" {5 s; vtitle('折叠后序列');
- s" J+ B% b$ m8 }
  _- L: E* M4 o$ L  n+ b( o/ Z4 t8 V9 J: c. W; @, P
# ^+ n) x3 w  V0 `; }
结果图:% u! U. _+ Q# Z) {. m) w' u5 d

1 F1 C% N* y2 D" L- U( l- U! S; r, a6 m; B2 @
+ v7 ^# [8 D) l/ ^
" ^" }0 H' V1 F4 g
总结
7 z- X: R2 f0 ]6 c5 v$ A. R- G至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。7 \* [) B2 \- L3 h5 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-24 00:56 , Processed in 0.171875 second(s), 28 queries , Gzip On.

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

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

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