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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
7 [9 o. n+ ]5 _# \0 R
文章目录
" y  Z  ?1 g) L0 X- {* N& q  q
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结# R* r+ l' W: y' p

: {/ z9 E3 I# z+ R7 v1 M9 a  v* j6 N' I9 E% K  f
前言
& }& y/ V2 c: j5 A, q+ L! V7 a本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。
8 s& U4 E& V0 ], {) G  v: n' R
8 O1 X$ v  R0 J: f* C3 `" J7 F* Z提示:以下是本篇文章正文内容,下面MATLAB已亲测有效
% ^8 H. g" _' i5 F7 ], h: Q# }5 X! C# b4 d# F
一、什么是离散时间信号?: L; [- M: b% ^/ E
1、离散时间信号/ j* R) C2 Y5 C- b  o
信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
7 b! h3 Q: z0 |: l) S/ P8 l离散时间信号:时间为离散变量,幅度为连续变化的变量。% T* x) ^# \% }

/ v; a7 U! l$ a# c9 w8 w2、数字信号处理系统
; r. B- ?6 k3 Z; ]' E: l数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。" r; Q9 Y. P5 P
& v' I, Y5 T) `3 t& E0 s

$ F% Q/ N  e9 u7 V9 P5 j; k" e, v# r, ?
二、序列的基本运算
+ S1 F( f- Z$ v5 B. |1.序列相加
9 n. y$ R. |8 U$ e序列相加是一个对应样本与样本之间的相加。& _; N) n5 f9 g( x5 V/ S, T
自定义sigadd函数演示运算:
$ u. n: C9 D/ o4 X1 ~
8 V2 T7 o" o, W# t5 u0 U+ Mfunction [y,n] = sigadd(x1,n1,x2,n2)" K7 E# [) r2 h. H
%实现序列相加6 u& h' c5 l+ A3 ^
% 实现y(n)=x1(n)+x2(n)
  f  `" _+ Q* e, _( h% [y,n ]=sigadd(x1 ,n1,x2,n2)/ m/ z1 g* w/ h
n = min(min(n1),min(n2)):max(max(n1),max(n2));' N: S6 T) ]* v$ }" k, \. p1 V! Z$ s6 y* i
y1 = zeros(1,length(n));* ]7 L5 s1 g9 _
y2=y1;6 b0 d5 C* ~8 k3 ^0 j6 f6 L8 N

4 _3 t3 C* j! `9 }7 }y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
- j5 C: a& Q% u1 u$ D: W3 z: Yy2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;6 s- ^! N8 ^* B2 }# S* h8 ^7 n
9 I7 P( u* t0 J* n
y=y1+y2;
& i7 P& k- [, j; V7 k6 Z# Q  T0 y3 l: n1 p% g5 V
end9 x4 _% ~3 j# _) v
9 L) P* H; s9 y' P# W& k
调用该函数2 z% X! u' {% x  J" C9 N# @

& E# u1 [- C  X* }8 Gn1=[0 1 2 3];; P: ~5 C- h, ?& Q+ g3 V; n& q1 E
x1=[1 2 3 4];5 t0 N/ L5 ~' u  `8 u5 b& R

1 n1 w+ j% x' R8 k( L5 a- vn2=[2 3 4 5];- x1 D" F4 m9 z6 |* ^" O
x2=[1 2 3 4];! F: _. E4 e9 I6 S4 V
  n. u, H, X6 g1 i" m) }0 R
subplot(131);/ S  P: r4 K" ~0 Q! T# {7 g
stem(n1,x1);
) U4 \8 Q& Y3 |3 o! daxis([-1 5,0 5]);
3 p& }  T3 |3 S4 {0 ytitle('x1序列');# a& w9 G1 {* `: m1 L& [2 V; Z
1 T2 e) q7 R. c, h# P
subplot(132);
/ H) k3 w+ N, ]0 O+ ]1 zstem(n2,x2);
$ Y# T  H8 }) l& O, n; Taxis([-1 6,0 5]);  c: i) L( @7 Y! i0 a5 u
title('x2序列');
8 |+ o+ \6 K- ], b0 A8 N( l% E/ b0 Z2 v% h7 c# h6 W3 a- d/ q
[y,n]=sigadd(x1,n1,x2,n2);" [+ a7 D5 r* B, X0 `
3 S# B+ B( @* V5 M2 |
subplot(133);
" o7 D7 u; J  [3 T: A3 Zstem(n,y);5 d2 K# z! a- |! C9 I4 b; B: h- \9 j
axis([-1 6,0 8]);2 E# _8 [" e$ F! B# c# H3 F- C
title('相加后序列');- J# B" X' ]/ R. [9 L3 ^

3 H. H; F4 I$ g( d0 M
1 x* S* o( X6 r* a结果是正确的
) e- ~5 u- A5 n$ p# p 9 u! ], L' s# |! V# Z# g# t
* _, o7 |5 c# @5 L/ T
; _9 [* w0 S& _0 t1 V) w
2.序列相乘* k5 }! y8 G# T( m, i/ j- _6 R! f/ Z
序列相乘是对应采样点之间的相乘(点乘)
4 m: d" ^; \9 ?3 H% p# J: Z" I0 f  U自定义sigmuti函数演示运算:
/ w4 E/ q! f5 [3 G# T# y5 j
3 f4 L4 N! H$ {. I* q- _* n& R0 Lfunction [y,n] = sigmuti(x1,n1,x2,n2)
5 P1 \: ^; e9 n  C, p% 实现y(n)=x1(n)*x2(n). N1 l+ }# U7 U# R) ?& t
% [y,n ]=sigmuti(x1 ,n1,x2,n2)% W+ H$ |3 p$ J" ^
n = min(min(n1),min(n2)):max(max(n1),max(n2));9 U- A. f4 K, X9 n- A
y1 = zeros(1,length(n));
5 C( p/ B" d9 n, x: R5 dy2=y1;
+ W5 x$ M: P4 s; O' H8 h
  x$ w0 k* E( D0 j& e, sy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;5 I" Y, o  K: J* w
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;2 }( t, c) Q4 c6 v3 p
9 e! M! l/ J1 ^
y=y1.*y2;
, g7 V9 \4 U7 i$ c  _6 Mend
, \4 E+ a; t; j: b% i2 v. n0 ~9 ], t! [
$ Z; X5 I4 Z; q" X  g/ e1 L4 O
调用该函数& X" x8 N: I; o
# K% @+ ^6 n2 i( m8 N/ c4 z
n1=[0 1 2 3];
" R' L: V  Z" h2 @. Dx1=[1 2 3 4];; {1 K$ V3 ^# e! Z0 J* p; ?

5 I5 M0 q# Y3 W% T4 Dn2=[2 3 4 5];
1 Y: O- j9 P6 T7 N5 lx2=[1 2 3 4];6 c/ j% }; X1 p* R; M' `) }
( r6 ]) i; D4 F, K9 {* ~
subplot(131);
" A; `0 o, P/ n( h8 p$ }stem(n1,x1);
4 `4 k, @- D+ h$ b% xaxis([-1 5,0 5]);
( G. I* k; o1 G2 l' w: `, btitle('x1序列');
( i8 J- E. Y5 U3 L! m$ Y' ]  h! d6 f  j% S; Y) W  W
subplot(132);$ n" u* l4 G6 h$ _: a" |
stem(n2,x2);
) {+ L8 e) {7 o5 E' [axis([-1 6,0 5]);' E/ C3 y; K% Z4 Y! I6 _: f! R% {3 E6 |
title('x2序列');" d) R' `* S6 z9 U

! w; ^( u* `& \: l2 I  j1 y[y,n]=sigmuti(x1,n1,x2,n2);
! c9 G  X) s2 S$ m
6 |) F" C5 p4 R7 v* Q% [; G; vsubplot(133);
$ B& u6 D3 Z$ t' M) e7 [' n' b/ Fstem(n,y);
# c9 r2 \& t+ h, Taxis([-1 6,0 10]);$ P6 |: a' t2 N: ?
title('相乘后序列');5 Y  m' [0 K+ q

$ Y2 f4 L1 i. }* q5 x7 I/ ?
: P* _: o+ Z  ?8 @2 f& y! H结果图0 q; w: n2 ^) Z; g* _  j3 u+ g

' _1 A; H6 Q+ E5 Q7 t
" E1 d' _; s6 h$ E' W8 U- p
: _# m2 E' k; d3 d
2 b  w# A$ [: h0 U- V  u3 v2 z
9 b) Q# N% u2 F; d( C3、序列倍率, D/ W# d# `: w3 N3 ^
这个运算很简单,每一个采样值都乘以倍数a就可以了。
9 d( N8 `) y) m+ O自定义sigdouble函数演示运算:
4 x* P& r  i3 f9 y- t
" f! s1 T/ P1 }" |function [y,n] = sigdouble(x1,n1,a)
* O, x8 N, Y/ c% j%sigdouble 序列倍率9 }% {+ H7 l2 f# _/ ^4 H$ V
%   在此运算中,$ H: r' i# ]' z- F! p8 k; c& @5 G1 Z
% 每个采样值乘以一个常数a。- f7 R# \( U/ e3 E
% a{7 }. ^" U* T# I
   " ^) L! D! N. L" A  c3 C
      x(n)}= {, @& X+ x& C: S
   - u8 ~# g* s: o7 G
      ax(n)}; E+ X* ~. |; O; f
% 在MATLAB中可用算术运算符“*”来实现倍率运算。9 n" o2 L/ {9 m- X
n=n1;
. c" U  }/ X6 M3 X1 j1 W- {- Wy=a*x1;! ~2 j! m1 n" h. ~% m2 C9 `- |
end1 V; O# T( [4 I. n
7 z6 J# I2 C4 P2 i. K
0 s/ y. H2 K0 a7 ]* h
调用运行5 i- r9 t% [: T) [4 g
) q' f: \3 V1 @- [/ M
n1=[0 1 2 3];
& l6 q8 z' h1 e2 O" x+ Y2 V4 v% Tx1=[1 2 3 4];; b, \5 m$ d: L; Z
a=3;        %倍率
; X4 P  H8 e- ?, x' r[y,n]=sigdouble(x1,n1,a);3 I; \% W# e1 }
subplot(121);, F8 x1 O# d; x
stem(n1,x1);
/ T( L! z1 U7 ~3 c! }axis([-1 5,0 5]);2 H6 M0 I. p4 g  a
title('x1序列');
6 v- k# \* w$ [+ g9 h" g' y, v3 }5 }1 H8 J8 j8 H: \
subplot(122);, n* Z6 N( Q1 j9 z" y* Y, {; t
stem(n,y);. x4 g) r9 u# R' t
axis([-1 5,0 13]);. }9 [. {7 Z9 _9 c2 b
title('倍率后序列');0 K+ y& @  t% a% M' ]4 a/ A

8 q' \- D! w' C2 f3 ~8 n6 {/ p! w
结果图# o9 ~* J9 n* K
3 o- u, I9 H, V8 C% S7 _
! n# J8 O) Y7 u3 X/ b6 X

, X7 [  e9 I/ L1 F5 P4、序列移位
; H. ^: o0 X) O3 ]通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。
, |( e3 \; T- B( u移位后:y(n)={x(n-k)}
. o7 P) a4 }' X! W  p自定义sigfold函数演示运算:
4 f) e/ c4 K1 @" h- M5 K0 ?
0 k( |" }% ~9 t- Q" z' ]' p8 s& E4 f( x0 ]8 `
function [y,n] = sigshift(x,m,n0)5 I6 [! e4 X7 S1 r! W( v0 T- K
%实现y(n)=x(n-n0)
7 i) i4 c5 h, W5 w%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。6 T+ S1 e; g/ _! b: [) I" ~3 r) q
! E/ m; l2 `4 e( r: c, h% _, c
n=m+n0;
3 @' g& p5 r) c. y) Fy=x;& K' I. b1 s! ~" A6 s4 V

) c3 |3 D  G( Z6 h  @- @1 q5 W$ P8 x. z$ U
end
$ t, `4 E& q5 y6 q9 O; j1 n: v2 \4 \" N9 ?6 g$ H
2 H9 [) b' [# S1 u; m8 k
调用运行:4 R  q$ w1 y$ T+ q6 R3 {
9 T" F" v/ P. K9 d! O! A6 D
n1=[0 1 2 3];/ ]! g6 [! }) H2 \
x1=[1 2 3 4];
: m; z/ w/ A; |+ Da=-3;        %向左平移3个单位
( o* m, t/ i) c[y,n]=sigshift(x1,n1,a);# n% n, b! p9 C- L6 s& M
subplot(121);
6 e7 Q2 I: |0 u$ i# ~9 n2 `; q+ |2 Nstem(n1,x1);
2 z$ O" E$ {: Zaxis([-4 4,0 5]);
, s3 l( C! S/ ltitle('x1序列');  n" S, O! T# R$ C% d2 S2 o
; v$ o$ u/ R& G# G
subplot(122);
7 l: F1 h' v  H. M; Dstem(n,y);8 R8 X1 K; n' q7 O0 E+ v" I/ A8 `
axis([-4 4,0 5]);; s8 u% V7 m# x& F! M, u6 f2 p
title('移位后序列');. u) T  O3 {1 C, _* u
- b' m8 I! R) Y: Q2 f
* K' i$ s- T% V: c, M
结果图:
1 S' P/ j+ z/ ` : G3 o* N% X5 }" E$ ]6 \4 Q% V
& c; Z6 l7 v- }) J( r: f' v" _
* x8 S: _  |: b# F% K
/ F9 Q$ R  M; E% N. I, y- ^
5、序列折叠
8 }, ?* p. I+ L  k通过折叠运算,使得采样值每个样本按照n=0翻转
3 d- x( l, G9 x! V" l+ \自定义sigfold函数演示运行:' \# F4 u9 A9 z3 f9 G% |2 H
1 h) |) P8 v% B$ M# u
function [y,n] = sigfold(x,n0)8 A9 _5 q! ~. }$ A5 A" T. e
%序列折叠运算
- ^5 P/ A* l5 l% B5 `%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)' }: t, n' X' F6 t9 L5 g% }/ v
%y(n)={) h$ C2 {# F/ p% M1 _1 Z
   3 v% o# u$ r+ P/ R
      x(-n)}' s8 D, r& a; x" D+ t
y=fliplr(x);! R9 p# o- N' A* m2 M: N
n=-max(n0):-min(n0);  
: u5 G/ j* D( B# H' U( u
  h, F4 L, p% Yend9 M! ^% t" P! S! F1 V6 ?! y5 C
8 m4 ]: h* C" \& \9 n# u

& V! c& I/ m' S0 l1 R调用运行:* Q% [( {1 W2 f0 h. }) N

# K9 D' c0 R  Q- E1 E  `1 _n1=[0 1 2 3];
, ]4 F$ a) w6 p5 z! r9 E0 Yx1=[1 2 3 4];) k( h6 B0 O' D. [9 V
[y,n]=sigfold(x1,n1);
% J6 z, ~/ f/ U- a, Psubplot(121);
2 O4 t. h6 f& n. N2 c( Rstem(n1,x1);
0 I) S5 `6 q* Saxis([-4 4,0 5]);! o" f5 E7 k2 ^) @3 @
title('x1序列');  M, H/ p/ b& H" M! w

9 Q- `$ {9 ^3 J7 Y9 Vsubplot(122);/ q- Z6 D. q7 t
stem(n,y);
( i8 |" O$ \! K! t& P+ Haxis([-4 4,0 5]);7 P4 g' g4 k; }1 M
title('折叠后序列');
( y+ v8 `1 D# Z: _
  ]. O$ t# }; A4 x
: X6 v- @; g4 e0 o  {( w  }5 k% ~/ z
结果图:5 S) _  {9 F2 @
4 D% m! q6 x* @" L3 X( M
# F% Y/ x5 R7 ~) ?/ V: p! f

  T$ b: M, p6 G! l! E& B1 m
. X; ^' @9 |; S& A总结; y" I, V( L3 L$ ~8 T. e5 p
至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。) J; x* n' R  m; x$ X% N8 ^
  • 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-1 19:35 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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