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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

9 t6 d$ T/ [9 k) ]+ i文章目录
. J5 a: U( {0 A5 W% p( I3 K
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结
    2 M) A2 P6 P5 s+ W$ b
0 F2 r* h! Z" y. e5 o- ^9 U
- b8 y- ?) y5 ~
前言
. M( @" x) `; L# o! \. k; g本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。% O3 k& \  A3 b% t- u% w0 _

5 O# s" L1 _- [3 O8 b提示:以下是本篇文章正文内容,下面MATLAB已亲测有效( U/ e! w' `5 o# ~5 v1 i

( o4 q9 h: x4 [- u4 d+ a: |一、什么是离散时间信号?
7 E) _& t% U7 h/ E, t. c. k1、离散时间信号
6 _; v' S9 i/ L) S信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
, ^) I" g1 T3 O& A( K离散时间信号:时间为离散变量,幅度为连续变化的变量。
# e& v8 W  j* D7 |1 g9 Z. I% i  Q$ r
2、数字信号处理系统( y& B7 m/ A+ E7 z& f
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。& `6 S7 s; B9 x% K7 I
: R; ?6 O* q5 q' x, ?  z# k
! L* c3 f7 }, Z1 k  v- k
) \3 y& Y% t, M$ u4 r; T# t5 m
二、序列的基本运算1 Q2 g6 n4 r( I
1.序列相加
/ T/ C* z0 c; c4 O2 A) d+ g序列相加是一个对应样本与样本之间的相加。6 O# S; }6 l, t- c) C; ^/ u
自定义sigadd函数演示运算:2 ?$ G0 J! _: Q

! |6 e- w: ~% k/ dfunction [y,n] = sigadd(x1,n1,x2,n2)
, T" Q' e# ^$ E%实现序列相加
: S1 C! X# {8 i7 F) z% Y# i; h% 实现y(n)=x1(n)+x2(n)
3 `3 s0 W2 |( e, F% [y,n ]=sigadd(x1 ,n1,x2,n2)
( \: a7 f, ?! Qn = min(min(n1),min(n2)):max(max(n1),max(n2));' J- y5 z0 ^5 G5 V$ l, I' K: U
y1 = zeros(1,length(n));
6 @" l* w2 O0 _3 B! dy2=y1;8 p) f1 m% w, J- b2 P  L8 g& d# ^
' W1 M1 c' ~$ V5 G# V. I6 y
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
5 n1 X4 O8 H8 F  P; Q- s0 ky2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;; o! y* `* Q  A  L: Z6 B' b
2 @+ p5 H& T- s5 s7 ?9 a
y=y1+y2;  s# b- v9 g( _0 C: u
( n9 n2 N: e: P/ l9 b# \9 d! q
end2 S+ e  x7 E& U

0 o+ y3 m2 C- r调用该函数: b) o: w8 `7 e2 y% b
: m9 U6 T5 j& e0 V
n1=[0 1 2 3];
8 c% p; C  {$ G  |* B, F3 tx1=[1 2 3 4];4 `0 D- Z' M2 ?7 X$ G

+ V9 c- i. P3 {6 F$ Sn2=[2 3 4 5];5 J  |& z2 R. ~$ {( N3 k  S
x2=[1 2 3 4];& `% I1 t  t7 ]9 L( T) i3 c/ f2 |
1 S; `4 X0 J" C
subplot(131);
9 R: `/ u% t# istem(n1,x1);
9 F6 p& N9 B  P4 g8 B, K$ faxis([-1 5,0 5]);  n8 \8 u  G5 M* N& u
title('x1序列');# ]' r( b/ ^. Y) |' x: l/ ^
4 y) S9 E) c) s( d' H
subplot(132);5 q5 s# @% L& G4 @
stem(n2,x2);' o# n! S% W1 Y( d# z& b1 ]
axis([-1 6,0 5]);
' v, d1 w. l" Gtitle('x2序列');! J& d( ?" Y; n
! o( C" ^8 S+ T9 I+ F6 _; `
[y,n]=sigadd(x1,n1,x2,n2);$ u! E7 G; A1 a

; e' x. J. |; @8 @subplot(133);
8 e6 U. A" `" w1 T( ?stem(n,y);  B  `( P. L$ L$ [) o& g$ c
axis([-1 6,0 8]);% p% b2 h- a, U  y5 `3 q8 t, z
title('相加后序列');
( t1 O* n9 b. q5 A/ ?* Z4 W: M) a: F) x

. z4 k" v+ ^8 m% K7 C* }7 R+ p结果是正确的
6 V% C$ u- o9 W* _
. v& i1 ]6 x. a' [& i3 d: t( h3 ~' E% b$ T
2 h9 Y! Q) M, A( N* v
2.序列相乘# q6 ~1 v& p/ e* r& I7 {  s
序列相乘是对应采样点之间的相乘(点乘)
. W$ w# O& C0 T# s+ H自定义sigmuti函数演示运算:
% q6 R' |; A1 M( W
3 d" l6 }8 X4 j6 l& D  }function [y,n] = sigmuti(x1,n1,x2,n2)
6 g6 Y$ H$ `4 |7 K$ Y# _  i% 实现y(n)=x1(n)*x2(n)
/ N+ S- a( G& g  k% [y,n ]=sigmuti(x1 ,n1,x2,n2)9 u* b. B" V# i
n = min(min(n1),min(n2)):max(max(n1),max(n2));
( V- P0 e; U; S9 n4 g! Oy1 = zeros(1,length(n));
2 k* b0 N; j0 y8 J% k/ |y2=y1;
# k+ }3 `' C) X6 E# i& E1 R1 t" j6 b2 Z0 d, c, c! p. e
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
" X' H/ M/ o. J- h, `y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
2 J+ Q2 ~- \. o& m5 ^: `. o4 F1 I4 H, k
y=y1.*y2;8 P# a$ O, H6 [6 J7 ^& G  h
end
5 b5 I+ a  o. P# y2 z" B
( c# Y/ E* r1 c% |; H! r
% E7 M& t" R- I8 D, C调用该函数
! n) o8 B. o7 j  g* ^
4 H7 P- {6 X% R) Cn1=[0 1 2 3];
# X5 E% g! H2 d# H) Nx1=[1 2 3 4];8 n8 A1 B4 G  L$ C8 J
) H. ^8 S& d0 e7 E  h
n2=[2 3 4 5];
9 S3 J* W+ X- I5 X4 V' U' ^3 px2=[1 2 3 4];
, Y" l3 L  D2 h8 d0 u) q! z4 M6 [! w; ^" P
subplot(131);! s6 Y8 [- S/ o! K1 e6 h0 B: m
stem(n1,x1);3 B: W0 e0 u! p0 {
axis([-1 5,0 5]);
  D, T# m1 k, q$ p: utitle('x1序列');
" Q" K% k8 i6 |6 |/ e$ V6 o7 n+ D4 X
subplot(132);  V- T1 ^% Z+ O& Z4 B, _% }) @
stem(n2,x2);
& k, d+ ?: a% }; Naxis([-1 6,0 5]);
3 R/ v: ~: k  s: s( J) wtitle('x2序列');
7 w& y1 c7 l8 U7 M' g
' C& z* p! {3 n8 i[y,n]=sigmuti(x1,n1,x2,n2);
! J6 d0 i/ b- x- ]/ K& z6 c* k- b* j  [0 J- W
subplot(133);" o9 f# _6 M9 b; A
stem(n,y);
. e- q% G5 k9 G4 ?# R8 Y5 `axis([-1 6,0 10]);- X! K6 ?# F) I6 J- g, ]/ B7 m
title('相乘后序列');
) {( O1 B/ F8 e7 R2 r9 |4 z
, W' I# R9 x' |% j# i% G- a9 Z( T% w2 ]3 j8 Q3 a9 t' g3 }
结果图" G1 [9 @, A. l  ~9 g. R8 c- f- S
7 w" B6 {! t* {' c/ x

& h6 ]5 e) j3 h! j9 t
) m4 x% H/ u2 r7 h: n& k; e/ f3 u) L0 d% c' c  M

  l9 s$ B/ l5 N. o6 G3、序列倍率+ a6 b5 k* p* _: M/ u
这个运算很简单,每一个采样值都乘以倍数a就可以了。7 S( v. U9 E% F, b) g
自定义sigdouble函数演示运算:1 L; k, e  D+ ]  O

2 S" z8 C1 {3 L1 t: [( s; ofunction [y,n] = sigdouble(x1,n1,a)3 Q0 r1 \  R, F6 e' g0 G7 q7 I5 A
%sigdouble 序列倍率4 t9 ~$ Q0 k5 M/ O: w- ?6 Y, h( @
%   在此运算中,
+ W; H% I; ?1 W8 _' R- z% 每个采样值乘以一个常数a。
0 W  c6 O) }: @+ ^5 y9 ~5 c% a{4 v+ l2 Q" ^9 x; k7 u
   
# y7 _- H' h9 `1 ?$ Y; j) k- V      x(n)}= {
$ T/ l+ _6 p3 M1 s, I     c& p/ r3 |/ M
      ax(n)}* z1 J+ \. l/ T: ^% ^* S9 d. {) r
% 在MATLAB中可用算术运算符“*”来实现倍率运算。; I( v- Z" X- q" ~
n=n1;" s/ S* f; m5 Q( W" O0 @8 V
y=a*x1;
' P$ A1 ?2 S& p: Iend
/ \4 D- m7 ^4 G& U0 `* z
0 N+ x5 c6 S0 j+ [+ L3 G* E8 ~1 Q- W
调用运行
7 z3 x5 k+ p, I% z  g9 Y: l9 n: H4 u6 E6 u) e$ A0 X6 L; ^
n1=[0 1 2 3];
( q2 m2 x: \6 Z! v/ c; Ex1=[1 2 3 4];
, C" s! e2 ?3 \% O6 q, Na=3;        %倍率
" p, T, J( S" n[y,n]=sigdouble(x1,n1,a);; X3 T$ f: P/ }# }4 s& H
subplot(121);$ ^, ~6 F" n- s7 ?/ j
stem(n1,x1);
: O+ t; r1 U6 l7 D0 g% paxis([-1 5,0 5]);- ?( P3 o3 K. N. `* T' Q
title('x1序列');
7 I, i* `5 b) i( n! t; }9 X, h9 [' L7 H0 M
subplot(122);
9 l* q' P5 ?8 |- z2 estem(n,y);! t- l: s, b/ S# S# f
axis([-1 5,0 13]);
) a% u2 o' h! S7 G- L% T( c: [title('倍率后序列');
8 s5 q: w7 F; f% p6 g( D* K5 a8 Z5 {, h

0 G# Q9 I0 S8 `8 r6 @9 W7 b结果图& P. i+ M; \5 A  v
- Q0 I' v' }2 F/ A6 G1 r

0 A7 \, q% p! R6 W9 o5 U5 m' i5 M  p
4、序列移位
8 K& K: G3 ]0 E4 v( b通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。" }) Y/ e# ]6 u! S8 r& h5 f2 w& U/ E
移位后:y(n)={x(n-k)}0 [. x) D4 m! Y( N/ i6 d3 I% M) z
自定义sigfold函数演示运算:6 g% Y1 H) ?/ G- q; O6 r! e
- ~6 x  r/ ?# Y! _" l9 J9 p

8 v$ i( f9 v7 G& W* kfunction [y,n] = sigshift(x,m,n0)9 f9 O$ Z; M# P, K9 z% m! ]" h" Q
%实现y(n)=x(n-n0)
. k1 R; ?8 D8 s" H& |# L%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。
3 J5 V; W, i' J: Y5 P+ E4 ^5 ^7 `* w* [9 S2 Y3 Y# d, f$ V$ K1 a
n=m+n0;$ m2 ]# ?+ ^- g
y=x;
2 [0 c# Z% @6 R6 b4 f7 l
3 w, ?/ g3 i; H; j' P7 z
1 C( k+ `: l' x) |7 l' Nend- M  s, J% m1 J

) ?, g, k7 P, u2 H7 u, j  {5 i6 F& e) {- b# ]( t
调用运行:
' a1 `( d  W' Y/ C: d% Y! v) t$ z" }: |
n1=[0 1 2 3];  o. a( [$ I  Z3 R7 Y
x1=[1 2 3 4];
; N% I% f' f/ i1 b) Ia=-3;        %向左平移3个单位/ V! {9 \+ y/ ^  ~- e2 p* E
[y,n]=sigshift(x1,n1,a);( b4 @3 L6 v4 C7 ~9 g
subplot(121);
, B* ]+ t8 j% |  b( [/ Lstem(n1,x1);
' C+ [+ t- ^! zaxis([-4 4,0 5]);
% E6 c* \' v6 G5 G5 P1 Vtitle('x1序列');, E6 {$ k4 C" j) M  z+ |$ N
$ X/ T8 o+ W* O8 A/ f
subplot(122);
) q9 V, \. v6 j% y" a# q, Dstem(n,y);
( c2 @8 @' `6 Y' M/ A& \  Faxis([-4 4,0 5]);3 s( e+ ?5 Z5 m  W: e
title('移位后序列');3 |4 t* a/ x; ]% X1 [4 @- n
2 ^" q: p  J1 ?! m
3 q3 f5 j) P/ I6 j! l) B
结果图:
' H' I# T2 f9 ]* F ' y/ H( U7 G: j4 ?

! Q1 _+ A: p# u* I  s) ?7 H/ \- s7 x/ \

" Y# [! N( G3 e" F3 J5、序列折叠+ D" x# j& \: I& N5 U& V$ Z
通过折叠运算,使得采样值每个样本按照n=0翻转; @+ ~1 V4 J1 T2 b
自定义sigfold函数演示运行:
( w  g! y( F4 h4 u7 W& c" y
2 i8 o2 Z" ^4 Z% ^& t) A; Ffunction [y,n] = sigfold(x,n0)6 x+ p/ Q" [0 w2 K
%序列折叠运算
& [7 X# Z& Q/ w$ c& D: e- n%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)( G1 {9 k6 C7 t$ p- N( J& n
%y(n)={2 `8 J7 i# V  w0 v; Z, s- h8 `0 L+ w
   4 X3 s% G/ c3 e$ e* G
      x(-n)}4 c8 \! z: B) V6 M. {
y=fliplr(x);
! Y/ w3 x" ?6 y% a3 M$ q# En=-max(n0):-min(n0);  9 b( J# h; C" g7 N( g' c

  j& u7 t  g" y! q' ^5 R# _end
3 L. z: K: ]6 g5 X* |* v' ?$ v8 |" S: V! C! o/ ]6 `/ o6 c

& R! ^; Z2 w1 E' n5 u调用运行:
' N, c7 U) [1 l& L/ k0 |/ S) x8 e8 O$ @2 l
n1=[0 1 2 3];
0 _5 q' c7 H! i2 _x1=[1 2 3 4];7 e0 q' n( c* H' K! p, W
[y,n]=sigfold(x1,n1);
" v! W: _4 J9 t" d; |; j% c1 Z6 Qsubplot(121);
' Y' l! [) a8 h6 s5 L0 H7 }stem(n1,x1);. I: U. P% g( d$ f+ V3 f
axis([-4 4,0 5]);, K9 ~" ~* s6 K* `
title('x1序列');, @- E; S" h5 h0 W( z4 G
4 \1 |& S* {# ?, W+ M$ J0 ?
subplot(122);" `+ z( Z' Y$ v
stem(n,y);
  l# v2 g2 J/ e  o) t2 C" J1 _axis([-4 4,0 5]);
8 Y4 r0 l: M5 d0 ~5 ~title('折叠后序列');
. F- Q, Y" e0 b' z  E# B3 i0 y% T$ x- {
" c/ @$ ?5 R$ g5 `+ Q% u. j. `+ P

  D7 G: M& j7 a9 |: C结果图:" Q0 I' y) M; V
" E  [! n7 e4 D4 c- Q/ [

  Q7 `4 d' ?5 s  n5 e" y
! p& B8 x" q; I* V4 B# L2 R- i
- h1 d) p! B6 y( J- A总结
0 g7 t5 N  j' ]+ `4 \至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。! [7 y# |; F# M
  • 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-10-6 05:30 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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