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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
' }" f# z3 R) a. j& [6 Q
文章目录
* o0 c( O8 r9 E
  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
  • 1、离散时间信号
  • 2、数字信号处理系统
  • 二、序列的基本运算
  • 1.序列相加
  • 2.序列相乘
  • 3、序列倍率
  • 4、序列移位
  • 5、序列折叠
  • 总结4 ~; G0 ?! M3 q

5 n3 F, d- i+ r. i; D. e1 T5 x  q' T9 Y7 J! _
前言* W% {4 Q# K4 i5 t  b  T
本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。& r9 K$ x5 A2 H# K9 S$ l. ^
- P, O9 d1 ~1 L/ [6 l6 B1 X3 m
提示:以下是本篇文章正文内容,下面MATLAB已亲测有效
+ W2 O3 _; T. `
- P4 t7 N5 \* X6 ^7 J, I2 \5 L2 f+ _# w一、什么是离散时间信号?4 i2 `- K% z' z8 t8 Q
1、离散时间信号
* U$ `5 \" O. L9 c- `信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。* x' G. q  S4 D
离散时间信号:时间为离散变量,幅度为连续变化的变量。' D. A' F6 N0 ~" l9 `) p# P% p1 C

7 }1 {: t9 j: K4 p6 e6 S; }2、数字信号处理系统3 R0 z) b& ]. {# _0 s) |4 s0 s
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。. U# i5 F; L* k& O+ U
' D4 b# K9 [& o

" x# U$ S( |* [: F- k8 j& ?  H# n& y
二、序列的基本运算
; i  U$ \+ _- _/ b; u6 N1.序列相加
; B5 [1 ]! P8 P, N序列相加是一个对应样本与样本之间的相加。! O6 D' R1 G' c4 I1 U* y* A# }
自定义sigadd函数演示运算:
8 d% m( k: f: V9 e% j
+ o+ V: E5 u: k* c9 q0 e$ zfunction [y,n] = sigadd(x1,n1,x2,n2): O' Y. ~- D. Z( {
%实现序列相加
% q  i' F# a; [8 M: O& f9 C% 实现y(n)=x1(n)+x2(n)3 m4 k4 `+ b8 w) n% {5 h8 J) z
% [y,n ]=sigadd(x1 ,n1,x2,n2)
8 Y9 e/ p+ l! O7 W: a; ~  Qn = min(min(n1),min(n2)):max(max(n1),max(n2));
1 m2 d" c1 @, o" X2 Jy1 = zeros(1,length(n));8 v5 H) _. f+ L& D4 v
y2=y1;
4 x2 y* U4 s# W0 E2 X, Q
( N& i, V) n3 |9 ^$ W$ h1 Qy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;/ E. L/ ?4 V5 u  \* C
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;) p1 N( _; Q# l* q. l3 g9 V9 v
" T/ y! U  [5 b6 I0 z/ }
y=y1+y2;
/ u! O0 ^" E% k# R/ B: D1 Y, ~# ]2 G6 g
end
$ v2 w7 z# O, g2 O6 M2 u
6 i8 l! E% ?/ }( N调用该函数
. n' q6 p9 d' V9 y
8 F% a% v4 P8 c+ }n1=[0 1 2 3];' @0 |: C, i# p2 D, n) N% W4 h
x1=[1 2 3 4];
* ]! b5 H% R: o- l( Q7 n# @' y! V/ T% Z
n2=[2 3 4 5];" n* I$ x1 H% r% x9 E' v, e
x2=[1 2 3 4];, e# A# N$ G) h3 ]* K; {' ~  G

# x' }4 d$ I7 W, X  Rsubplot(131);6 Y& E4 P, ~! e* I2 t
stem(n1,x1);" K3 ~1 b# ~0 T- v4 U. v( D
axis([-1 5,0 5]);$ P5 M. ?4 t6 u, l9 u1 k5 J, t" O; r
title('x1序列');/ Y, [; M  ]$ ?& i% P9 O

0 B: U+ u* L5 j$ }7 v* h# W/ Xsubplot(132);, r( E8 c  N4 I0 U- I- \+ D
stem(n2,x2);0 w$ J" Z6 M' d
axis([-1 6,0 5]);5 z* T4 G( [& Q( L
title('x2序列');# R( Z. b' X* [, S) _
& _& J, L" u2 F! T0 q; K1 [
[y,n]=sigadd(x1,n1,x2,n2);
) ^0 V& Z* v& o7 u  y3 D/ [) N3 ^" ~* s7 [7 r
subplot(133);
1 }/ a" ^$ `% _& k- I9 K, Ustem(n,y);6 _. N) n0 Z  \
axis([-1 6,0 8]);7 _% f& l( F+ R
title('相加后序列');
1 p, s$ E% c7 r, I( W3 d9 R+ P5 _% `1 g/ M; }# j

1 B$ c; Z5 X+ j9 k结果是正确的( P3 u6 ]6 a$ V& H
  z0 y1 m& v/ ^, e
5 B# p4 a7 P) h3 A0 i1 y

: \# L" C# Q$ r3 ^  w2.序列相乘3 [: \+ n3 y2 j0 ^9 n- I! e
序列相乘是对应采样点之间的相乘(点乘)4 [; Q# s" ~6 T2 d- M
自定义sigmuti函数演示运算:
: `: Q- Q2 ?/ r  h( |2 F3 k1 v7 s% @0 @3 E7 g* t
function [y,n] = sigmuti(x1,n1,x2,n2)
+ L' S5 N: K% B( y- F) G+ P% 实现y(n)=x1(n)*x2(n)8 g/ A& I/ t& G9 q8 D
% [y,n ]=sigmuti(x1 ,n1,x2,n2)
) d/ v. Q" B* c3 mn = min(min(n1),min(n2)):max(max(n1),max(n2));
& w. H: y% w, l8 Q3 qy1 = zeros(1,length(n));
6 P6 ^" S) n; G! u' P! Z8 [: Vy2=y1;9 ?4 q/ w3 P; J1 I7 S* Q  u
( P" j8 c2 t( t# k' I* a
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;1 r0 v3 K2 K1 h' g7 o5 v
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
6 B0 j$ ?0 X6 g+ C
4 l5 d% T$ z1 W$ `( O& t8 yy=y1.*y2;
# L- v5 N3 F# c% Vend
* b4 m- S/ y% c; d- L2 k, N
6 L# g8 X, `" e( h' O' x' ~- q" e) Y, T! N; `
调用该函数
: Q; z  m6 v& Q5 \# }) e" }$ V, h0 ?/ n4 n2 F5 G- @
n1=[0 1 2 3];+ L8 H) w1 y( j# z% I* B7 r6 H
x1=[1 2 3 4];
3 X5 D, |& }- Q  x& Q8 ]1 H
7 Y' l/ x" D+ s8 f" |- O$ ln2=[2 3 4 5];
* k3 \3 `: u2 J+ w1 px2=[1 2 3 4];
; W% [9 Q8 j( o" ?5 l# N. T+ W, U$ j! o5 s4 z% c1 r6 m
subplot(131);6 ~: h8 X# X, v
stem(n1,x1);, A0 m" j3 M9 m( y" |0 D* H
axis([-1 5,0 5]);
# l7 U- A5 x* a) ~7 L  K$ P5 otitle('x1序列');
9 D: k7 U3 g: H; t' K
0 X' @3 e( r2 i- \3 O" Dsubplot(132);
0 D( ~0 L' L0 V3 J# D1 Gstem(n2,x2);
% w' m: C" B" u" d# paxis([-1 6,0 5]);
# J2 g' K- s, ^+ Q4 E" {: [title('x2序列');
1 f! S# Q8 h  k+ c  H  N! G  m3 |6 {$ R" }
[y,n]=sigmuti(x1,n1,x2,n2);
0 l1 b& D* C  }( U
! g! o% c# ]  ?, X- U. W' {* }subplot(133);
: N5 k: S  ?1 V7 p8 H3 s6 C$ a3 Tstem(n,y);$ A+ c* {6 d6 j
axis([-1 6,0 10]);
  D% @/ P% r, K1 I9 gtitle('相乘后序列');  x( P" p$ i- R6 U+ V, t8 X

2 f; T# q7 u* B) k1 F* D& b1 B4 J2 ]; t- w% N  l1 t
结果图* k4 ?( |& c8 Q
7 k6 x( R2 _! ~) @. X; \$ m* w* H( ^
1 }" K9 o& L9 N9 V' z2 ~( w5 j
8 ~3 A$ a3 c, T" P
9 ~! c% V& j3 {8 Z( c7 {* i9 W' V; W

8 \- l# L% M, W" p3、序列倍率
0 M/ ?* [1 M, C( i这个运算很简单,每一个采样值都乘以倍数a就可以了。
' u8 p8 T$ r+ }0 |/ e! `& E自定义sigdouble函数演示运算:1 D% e5 F, d3 o
- A; \9 \. u0 e) v
function [y,n] = sigdouble(x1,n1,a)
* u& q, X1 p& W! l& h%sigdouble 序列倍率
- @+ k: [0 o9 ]$ }: ?%   在此运算中,
* s. L5 p8 }5 b: g' x! f# @% 每个采样值乘以一个常数a。
0 x3 T% m- u% H* D7 R4 k% ~% a{. f0 I- B4 ^2 I* ?6 \3 s
   3 a$ s9 h# k" L; U" u
      x(n)}= {+ C) z! {3 m6 E8 U8 n
   3 w+ I: _4 m; L5 u% H; L
      ax(n)}
& u( b; u; D$ J# v" O% c8 B% 在MATLAB中可用算术运算符“*”来实现倍率运算。  k0 f) t/ Y2 z" Q
n=n1;9 @9 p/ I' ^# ]* j, p% ^
y=a*x1;
5 m8 P0 o: ?: R, tend
' L' Y! y, e7 ^7 E& B* ?
  t. F. ?/ d) k' L% X+ c  J# `( K9 V9 q
调用运行
9 f3 N8 Z8 D( B! ^2 A5 m, f
. l) C, ]$ i! Zn1=[0 1 2 3];% }, a, x7 @) ?& [( ?, y3 @
x1=[1 2 3 4];4 J: ~( [! D; v# B3 s2 e
a=3;        %倍率1 r4 B8 B+ }! h) Y3 W, ^
[y,n]=sigdouble(x1,n1,a);- o: ^( b8 w9 _! G9 s1 _
subplot(121);
# y+ F# p3 t* X+ ]) h4 M' Hstem(n1,x1);
1 a4 D+ e9 }+ t2 Baxis([-1 5,0 5]);
: r8 R% D" q! k0 J* ltitle('x1序列');6 F! {/ g/ |) I) ~) D/ n7 L& o7 G9 M

$ F- r! A7 Z% G$ g7 A, \+ y& E+ bsubplot(122);
- k5 J+ J' V6 U' s/ `9 g! kstem(n,y);
/ l3 L( C0 V* |7 M" h+ ~) g4 qaxis([-1 5,0 13]);
2 k! E% h1 R$ s. Ktitle('倍率后序列');
7 V3 q- P" ^1 G9 B4 p
9 f( @4 d* m" y3 C6 v8 }* _0 x0 v. p6 K9 A
结果图6 B+ d9 ^9 `+ o' X) h3 B

" I; b% R5 e: T0 s- I# E
1 Z/ q8 t& I4 z0 i, I1 j% }' ^% Q( q6 o8 n- i
4、序列移位5 T/ I  N" W9 s5 ]9 ^) a1 I5 \6 |" R
通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。
" y6 \! O0 a( V# G- K) B移位后:y(n)={x(n-k)}. C- e* B: W% i; _+ q8 d* n
自定义sigfold函数演示运算:
; b3 l& P; j: h. k% ]' b4 l: d; h
  u2 {4 T5 E: [4 k9 ^# l: m6 N
4 T6 W* _3 w; gfunction [y,n] = sigshift(x,m,n0)
: R  A* s! c7 d2 w" ?7 b, v%实现y(n)=x(n-n0)
5 J$ I. P8 M2 e& N8 O5 D%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。
4 [/ Z7 U1 m3 S$ w6 a, T; f/ {0 k& X7 K
n=m+n0;5 b# G, H% B5 m6 M
y=x;4 }0 x6 ^' l/ m) A9 y
! o/ F, l( A* i# z8 f) |
2 V; s) U  n0 z: v
end# T6 U0 Z& Z/ A2 @9 b
+ [/ s9 _) n9 K

8 g/ M- G1 }5 O8 R调用运行:$ x$ w( ?0 a3 a9 m
: y8 P6 W. h* t) i7 W6 _
n1=[0 1 2 3];& T: G( Y) r; G3 H3 q0 E
x1=[1 2 3 4];6 S' N: H8 C8 q" q$ z, d" V
a=-3;        %向左平移3个单位$ Q) K9 T' q/ a& j1 V
[y,n]=sigshift(x1,n1,a);# a  K$ E7 d: H6 U7 n
subplot(121);$ E3 c& |; v7 `
stem(n1,x1);
+ _7 K8 y  S  E7 C5 ?- b" S% Qaxis([-4 4,0 5]);
& E8 b7 l2 e- X+ z5 C5 J  Ltitle('x1序列');
. u9 e! v6 y' L% G" t9 p2 H! ]7 H8 s1 K. ^9 p' L
subplot(122);
" {0 D/ S$ h. p% [1 u+ V, K1 Hstem(n,y);4 \# t8 x+ A& I' i- j
axis([-4 4,0 5]);
7 V8 J: T) X; p' dtitle('移位后序列');* e" t* \( U: s  k

$ \* t7 L# n0 n, k0 v. z8 r
! n) s; p9 |/ U# ^" F5 ?! C结果图:) A4 H. C! V1 L+ w. ]/ Z
: G. y7 G+ @+ E) a$ [
8 R5 i3 W$ ^. }' F$ C  g

' y4 l, T, M- Z4 h& c& u2 d' R, y4 z4 G' M; ]8 j4 X! B
5、序列折叠6 r9 W5 K6 F& a1 W# d# H% [7 D
通过折叠运算,使得采样值每个样本按照n=0翻转" D1 n6 q) g% y/ k# y+ k
自定义sigfold函数演示运行:
! g7 E" J, F2 H, {  \
1 B; y9 [& H" cfunction [y,n] = sigfold(x,n0). G: [7 f& h! ]% B/ k3 Q( x
%序列折叠运算
0 {. ^: Y" }: Q%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)
2 s7 H' ^6 _- I%y(n)={
7 P2 i! o2 l" ?$ \+ E  H   
1 t2 }- r6 G/ u) L3 y      x(-n)}
$ N% q# C  W) d  ~0 D% A8 @y=fliplr(x);
% f# z* \; O  P' ln=-max(n0):-min(n0);  ) o" f/ F! r2 n
8 t0 x$ O8 k- o5 v& @8 A
end
/ O0 H8 [2 U: H4 D5 y' k
' c8 l1 ~! m# _0 \4 T8 G% X/ W) s. S0 n; V# E  i$ R& P& z5 S
调用运行:: A9 H+ f8 v8 N: D0 a

$ W  k: j) p; g! |* pn1=[0 1 2 3];
/ q5 V, S- F: ox1=[1 2 3 4];: y# v& o9 \( _9 p0 i! k4 X
[y,n]=sigfold(x1,n1);% }# D! M# N9 k! P4 o4 [
subplot(121);& _+ Y6 J4 o  P
stem(n1,x1);
/ N1 j$ s3 [/ e& x# Y2 g' ~, haxis([-4 4,0 5]);' i, k; o' S$ ?0 Y1 E
title('x1序列');
& z$ x; R7 @* \0 g$ G4 t5 g
" x. G, T9 c6 K. m& _8 K7 Jsubplot(122);% B! M6 k1 t) }2 A
stem(n,y);
4 d3 L+ t; i  X2 Haxis([-4 4,0 5]);; \" R( v. |& D6 N& C: S9 ]
title('折叠后序列');
+ w% X0 f1 _$ H& _$ n; l
1 h2 s6 T% x3 O3 `- }  ]
# h* ]3 U# j2 a1 T! ~# F& F9 e; \( |1 G5 K* O3 D( g7 Q% ~" A
结果图:4 B9 G: y8 Y3 o! a8 p7 c2 O$ |

6 \" o" n# O" V/ K& C, w4 T
' f' M7 x1 D' l; ^5 @. r1 |- F2 l) [
. X6 u2 Z9 M% [4 h  S' Y& H2 u
总结
) ]" V2 n! w8 C( Q9 B' H# n至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。
. P  r3 ~* Q+ }
  • 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-31 19:46 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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