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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

) l3 X+ P2 ~7 b5 v文章目录
- E  o0 Z) v/ R; J5 A
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结
    5 \+ k" N% M- F1 B7 v4 ^+ s

8 Y, D- o7 C$ Z; E9 B) m6 x2 X  \* Q  _5 D; x
前言4 _3 e- Y2 o' d4 M5 P4 e* w/ [" r4 K
本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。
% u8 ]6 d. Y. T$ L5 y
) s: v: T& D- f& b! s提示:以下是本篇文章正文内容,下面MATLAB已亲测有效3 p8 I0 j9 }+ _0 Y
/ T% y  g0 [+ R! P/ f2 l
一、什么是离散时间信号?0 f5 d% X/ v, x) T3 F1 b
1、离散时间信号
- }9 e3 y; o9 Z4 z. w信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
1 I3 j! Z0 }1 G& R) O& V& L. Z离散时间信号:时间为离散变量,幅度为连续变化的变量。& N) b: O8 }. q, s  ^2 [  N7 n5 T0 B
0 o0 q$ k# X0 P( S
2、数字信号处理系统0 [$ I1 m2 u: ^& h
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。
/ W& Q* p, ?% n0 S  U
0 C( F+ y- T: G0 Y
$ ?* i4 V! |; U) i( [0 Q6 d7 Y) s  W6 w7 _1 T' P# z
二、序列的基本运算
. l4 l2 M% P. i: T1.序列相加, h. B4 s4 z0 \1 B
序列相加是一个对应样本与样本之间的相加。
, r/ a4 o7 _6 A5 B5 s1 g) L自定义sigadd函数演示运算:* H% p# X; X6 }( @4 V

3 k- T& G) \+ p) `+ \function [y,n] = sigadd(x1,n1,x2,n2)
$ ]4 ~: S+ b; j  W# S( ?& ^%实现序列相加
3 |  C7 e, f5 r# r" P8 H% 实现y(n)=x1(n)+x2(n)
6 Z0 k5 n2 X" q% k) J; I/ T% [y,n ]=sigadd(x1 ,n1,x2,n2)' G1 x4 J' L. Y$ D& V
n = min(min(n1),min(n2)):max(max(n1),max(n2));
3 h$ m# J4 l9 J$ z  |y1 = zeros(1,length(n));' u3 j0 k" D: b
y2=y1;  L7 [0 X  l* ^$ p, \; _# H

- q, R2 C, `+ {! R1 Py1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;. ?& `7 E# B3 n8 @+ B: E
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
9 X2 X1 K' z' T( D$ ~6 u
0 d/ M* `, n1 p; o7 I/ g; ]1 [, uy=y1+y2;4 n  F6 i- H/ o2 Q, E

9 o% K) b* ^; y; dend
9 Q2 X9 }) d4 D. l) S1 @7 M. g& E8 n% J& {
调用该函数
' h  a* T* f3 H3 l; a
; R6 n% m4 u# T1 Tn1=[0 1 2 3];& L& \; }+ ?3 ^  _# K
x1=[1 2 3 4];
! z# m; g1 W; M3 f, A8 d) S7 T1 Q: y; X$ y+ H* y) U! P
n2=[2 3 4 5];. B5 Q* ^  i5 M; g5 w' p
x2=[1 2 3 4];- B: n$ y5 F  l+ |! J2 B7 Y

$ x1 h2 X  {' |+ A9 Z6 g1 Xsubplot(131);3 f& ^4 \% Z% q& f
stem(n1,x1);
- a9 z  a3 g$ O& t' Y( n7 Xaxis([-1 5,0 5]);
8 E1 Y4 D! {8 Etitle('x1序列');. n( I/ S& _; O) U" N
% l) ], Q! w$ e8 ^% W  V8 {
subplot(132);
) C% X$ @1 `) e; C5 m, `stem(n2,x2);
/ I! S# |: M+ i  naxis([-1 6,0 5]);
5 v8 S6 o  s5 K9 X/ }, ?. `title('x2序列');% H0 x& \$ l4 B' C
# t" A' F" C% B% H2 C+ \9 n( y" k
[y,n]=sigadd(x1,n1,x2,n2);
5 D0 q# M- z+ P5 B1 P, h
+ ~" o; K- u) r" Tsubplot(133);+ {9 v8 m& x% B5 n' I5 C
stem(n,y);8 R& C3 L* V* s- g( u$ Y( q
axis([-1 6,0 8]);. _1 _! }. ^* H9 v! f: C% w
title('相加后序列');! z# i! ^, [6 V# D, _# \
) l3 ?" r7 n0 u7 c) @  s* c
4 M, d: N. K# F& |
结果是正确的
4 v! |; X7 Q* h2 [& D' Q$ ~
+ [2 u$ n5 M* x7 \9 ]9 b5 T$ U7 s) N- N# a  Z% g

8 I! j4 I+ J* N( F. d% ^2.序列相乘
& L5 @0 ^. I$ L- W5 B  E7 ~序列相乘是对应采样点之间的相乘(点乘)
6 g) [+ J4 L2 V4 ~2 o+ I. q自定义sigmuti函数演示运算:
7 u  r0 y0 Y0 q+ g4 E0 ^! S3 a- M- w8 e
function [y,n] = sigmuti(x1,n1,x2,n2)
8 t1 D4 k2 N% s% 实现y(n)=x1(n)*x2(n)
* t& Q: C2 T' X$ @5 p$ ~% [y,n ]=sigmuti(x1 ,n1,x2,n2)
# W4 O' G' T+ u3 Wn = min(min(n1),min(n2)):max(max(n1),max(n2));
* S- D) C$ p+ V2 s% \3 ]  Sy1 = zeros(1,length(n));, k. s# g$ v; J" [
y2=y1;
9 _: E$ R; T* r' [$ u' y% \9 F7 b. }/ V6 \, H- C
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
, N% s8 s. `/ C5 T8 Ty2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;! C0 L' ]! x' J: N. ?0 v

8 {+ V3 R7 e; H9 X6 n6 L2 hy=y1.*y2;
, A+ x1 ^! d8 t% ?8 ?# |% q2 iend' x3 l! D. w/ n1 [5 ?. e

1 z/ [" E* W- G& B' P. [
4 Y; x9 f" M) r5 f调用该函数
$ I0 A! n" D: B/ |
- r# L' ~% W1 l  R# w* C. zn1=[0 1 2 3];
4 }! J3 _" t$ ?  y" p: U0 Sx1=[1 2 3 4];
& w; g8 G9 j. S3 m
; Y" H( O$ i6 Tn2=[2 3 4 5];- i' p4 o$ e9 C$ L1 @0 i9 b( h
x2=[1 2 3 4];* ?1 ~) Y% d; ^! b1 i  Z
+ I1 v! p' @) g* b4 P1 S
subplot(131);
# }6 F" w; `9 U+ w7 Vstem(n1,x1);
: R: M0 r6 n- j, Iaxis([-1 5,0 5]);# ^9 y; y. J5 `
title('x1序列');
' ~8 H1 v2 x: s5 k
. ^$ _5 p7 }3 [/ C* _subplot(132);2 n7 |% t% _0 a& a1 x( ?* n. S
stem(n2,x2);  Z/ @- ^' x1 K9 @
axis([-1 6,0 5]);
. J; Y, _9 H6 m3 X, N) O, Ttitle('x2序列');
  L1 N) m8 n! z! i! W6 K3 H8 |8 i- o/ N3 Z7 r. a
[y,n]=sigmuti(x1,n1,x2,n2);- ?7 b, ?% V9 y% X4 L! k1 X

2 H+ S4 [* L2 tsubplot(133);
5 [, G0 K2 M+ K7 f+ Vstem(n,y);
" ~3 a: M! \2 {* y; i! K& o3 vaxis([-1 6,0 10]);- q" Y! [, V# `
title('相乘后序列');
8 T  M0 c# N: E3 s* ~" X0 G3 `$ }5 `. X- ^
" o6 ]2 S1 A! `
结果图/ D; I, k9 A2 e  o, \9 J3 M
" m) }: k. O0 |$ H  \- g* Y8 p/ X

" k9 d/ T1 j2 B, {) G
( X  A+ g( L; d* v
( \/ d  S5 G. l4 G1 O/ }. A8 C  ]- c+ ?5 H# U+ Q
3、序列倍率
- ~! c" u! U" ?0 N: U这个运算很简单,每一个采样值都乘以倍数a就可以了。
; W6 f3 h  p# q; u自定义sigdouble函数演示运算:, N, ^9 `$ Y# s. e3 q
4 y# o* h& c3 {2 _& Q( Z7 j  N
function [y,n] = sigdouble(x1,n1,a)
. r& c+ V: \. ?1 C% [$ F8 h6 e1 a%sigdouble 序列倍率
' [/ w6 ?$ A' {7 Y%   在此运算中,
/ o* |* S, Z, O% 每个采样值乘以一个常数a。
* a; R% f6 S4 k! J$ B  ^, u: I: z% a{/ q5 I7 {$ \9 a8 |( T5 i- d3 Z) W' y
   
2 W$ G; h; P, X! T      x(n)}= {" k0 {# ~+ B1 H9 H& }; q3 m
   9 {+ o/ V  L; z" g2 j! J* E
      ax(n)}
1 Q1 {, T) d7 g) w% 在MATLAB中可用算术运算符“*”来实现倍率运算。
& s% y, i2 J. ^! qn=n1;
4 c+ X- n! I5 W; j/ W. c+ Xy=a*x1;, @' V5 ]# }$ [' p0 b3 y. J
end
0 B! M0 f9 @( z* a5 a/ S" \# D7 z2 g2 u7 T

! Z, D3 ?5 s2 Z2 L2 x调用运行
+ |4 c$ A* m, L, m7 ^9 Y
: B7 K& J$ o) W* r5 [9 Un1=[0 1 2 3];
$ J2 e" s' R: W) c1 }8 o# hx1=[1 2 3 4];
4 i$ m; t; ?" w0 I( wa=3;        %倍率
3 P, {8 l% z3 i4 |+ ?[y,n]=sigdouble(x1,n1,a);& u+ v8 Y6 b. [" ]
subplot(121);
3 \$ i8 M. e+ u( ?& cstem(n1,x1);' v& Y5 P# [; z5 m' m6 K9 W& u2 G
axis([-1 5,0 5]);
& I! {. y6 S' C' t* T( R4 dtitle('x1序列');
- ~7 E! `/ h. |# k+ ]
7 y) z; v) f' q; t5 u  s. i5 Rsubplot(122);
# l$ H; S0 X; I" h, S: K: n; Ustem(n,y);( C( d! X. K/ e# ]+ O
axis([-1 5,0 13]);2 t* y5 f' \% W
title('倍率后序列');
5 b, y; O# f3 B/ C& j, @! S7 ]
6 s$ ~: M8 X! R. f3 l
$ K2 p! x3 ^  ~( W0 a9 b5 ]结果图# k2 |, J8 Z& m  |5 T

1 M& \' u! q. p6 v6 h% g& K' @
0 @# I! P% _* j. G" I. D5 _6 l9 C$ V% v9 g8 L/ R: S( W
4、序列移位- }0 q: ?9 x6 F- E
通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。' t$ `* T8 E/ Y. b  h
移位后:y(n)={x(n-k)}
! U' V9 p% Q' T  Y6 `1 h自定义sigfold函数演示运算:
0 T7 \9 K1 W7 ~
. ~% b7 X- X6 }& R# Q
" U9 h) n" Z0 Ffunction [y,n] = sigshift(x,m,n0)8 _" c0 `3 _/ Y  z8 d
%实现y(n)=x(n-n0); k: m' I0 a: l% J
%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。; b8 F+ B4 ?0 ^0 Q0 f
% b/ W6 q7 W8 u: j! A1 i" c* \
n=m+n0;
3 }1 Z- o! I, q! M2 vy=x;3 ?5 ]. U! y1 U+ q7 G1 {
: _& P+ |( |- x. [% Y. Y, N& a5 G  D5 j
) n$ l) Y3 \7 T/ O; ^  {& p
end6 F0 _/ e: O# N1 y
  o$ z8 h# i- `# x
  |: `% h4 P0 R- t3 S
调用运行:2 \0 U. f5 r. U- k: z2 b

! N: }% G0 N5 |; Y+ ~: V; E- Zn1=[0 1 2 3];
- u! S9 x6 Z3 Ix1=[1 2 3 4];
" y3 Q8 ]7 |/ l3 {a=-3;        %向左平移3个单位5 h. D4 z* `: @) ^
[y,n]=sigshift(x1,n1,a);
' I2 ]+ S! v6 j! {, ?+ Bsubplot(121);# _4 Z" B0 e2 O0 A( D! u/ c
stem(n1,x1);4 h4 {) `7 D% p8 s# ^! y
axis([-4 4,0 5]);
7 K# F; d: `+ }9 j  b) Ftitle('x1序列');
* Y; O7 s. o& U- Y
9 V! J4 d0 Q1 G4 {; D" K0 H0 {subplot(122);- e" I9 g+ _4 Z. a/ [
stem(n,y);
/ V5 u9 h# J5 J$ V  gaxis([-4 4,0 5]);! `$ b6 L; o7 T! O$ u2 }% Q
title('移位后序列');0 H  f& B+ e5 n

& w3 L, G8 w) r  y$ V$ t* Z# e( H1 v$ V
结果图:1 `" B3 Q! ^& A9 d% M9 |+ N
/ O& Q4 i0 {  p! @/ O
8 d! C) r4 ?! t% {& }
# T. _+ B3 S2 x% W! w$ f
! t1 m$ r, ^- N6 |, d$ H% u8 @" w
5、序列折叠
7 a% Z8 Y7 k; r, C通过折叠运算,使得采样值每个样本按照n=0翻转
+ h! s; D9 }6 S& }* }: o自定义sigfold函数演示运行:
. ]# m0 f' V4 g+ ]) r2 \1 q5 ]7 x! j
function [y,n] = sigfold(x,n0), O& H8 g7 [! N+ K8 r1 b
%序列折叠运算' m! E2 W* W' n8 s+ d- V
%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)
; y' a9 x9 g6 F/ [0 j, X8 N%y(n)={0 {/ S) V) J( W" d, p6 W
   9 z  T) Y, A7 N* i, }
      x(-n)}
' D- |$ R2 |7 i8 ^6 Qy=fliplr(x);
0 ^: i/ E% i' Q/ On=-max(n0):-min(n0);  
- G. G4 O% J2 S+ Y) p% b. r8 V- m, H4 d' v$ u
end) @! Y2 U- w! W' J  K% ]

& Y( V. d/ X5 J9 }/ [9 [, T$ P. q% C) J4 o
调用运行:+ V2 g4 z) p* n  a
$ k, Q: M! y, f2 r3 }
n1=[0 1 2 3];8 n6 ^- X4 k# @+ [
x1=[1 2 3 4];# E4 a0 p- n. Y4 \) h
[y,n]=sigfold(x1,n1);7 Y' F2 V! ?, `9 s% H
subplot(121);
1 `9 L& w; ~+ A5 W9 o( jstem(n1,x1);, Q2 F" j% X' s! v1 U
axis([-4 4,0 5]);6 E+ g: l% C6 M$ R7 y/ p% E6 U4 @
title('x1序列');
7 I% V* Y+ E) j* Q7 H; [9 g  k' W0 l& p/ M4 j) C+ A7 t+ b
subplot(122);
1 M( I; O# ?" R- x0 y1 istem(n,y);8 L6 D4 h7 M8 J0 d  t- v
axis([-4 4,0 5]);
; Y1 u/ u1 t' B9 C. otitle('折叠后序列');# U7 u! S9 e1 C/ v  R! P
5 d. z/ U+ {4 @, X- Q

/ f5 [: S/ \: n9 `+ B7 k( f
. ?) i6 c+ E5 _: P结果图:
! W; r$ S3 N9 n+ Z8 S8 ?
: Z% c/ A) Y8 R+ b' I+ a
4 |, ^1 o4 ]* o
: N: M6 }4 s( w/ I4 U5 i4 s7 W' \. j7 O$ @$ y+ K) R$ A$ W
总结
9 h; h# w: S$ F% Z0 n6 Q: ?至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。
6 j$ |& C* `; Z+ v& D+ L
  • 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 01:49 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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