|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
% ^0 E% K9 e: e/ w! j, }; Y) p h文章目录
! v0 E z6 j! O; w' [- 离散时间信号——序列的基本运算及matlab实现
- 前言
- 一、什么是离散时间信号?
- 1、离散时间信号
- 2、数字信号处理系统
- 二、序列的基本运算
- 1.序列相加
- 2.序列相乘
- 3、序列倍率
- 4、序列移位
- 5、序列折叠
- 总结
C9 F9 o% J$ d
6 _( p6 b4 r- E5 J F
' g0 S% O* ]2 Q8 A- q( j( W7 S前言
6 W' {; v: Y4 D" _/ V本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。9 c, A9 |9 O% z w0 `0 x0 u
+ C3 |0 c+ m+ b9 b! _) I提示:以下是本篇文章正文内容,下面MATLAB已亲测有效
) X5 i7 K! E4 S6 s6 }7 v) Q) n/ ~
一、什么是离散时间信号?, h" ? w% v$ i$ \3 _9 z
1、离散时间信号/ k! q1 L0 F, [/ ?
信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
" q `2 M: u. q# N a离散时间信号:时间为离散变量,幅度为连续变化的变量。3 T) @9 [" a, o. a4 H* `
5 ]% d9 _$ e/ Q Q2、数字信号处理系统" m' }9 q, `7 J6 A0 T
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。
M9 x C* ?! c2 p2 B. X) p
) C7 {- V8 N; Y+ I6 S/ F" E g
" Z9 r; _: q( O; H4 E4 e8 {
) v" ]! u* A0 I, F二、序列的基本运算& V, \' N9 H; B( B: e7 i
1.序列相加0 ?" a% ^/ o. P
序列相加是一个对应样本与样本之间的相加。
: F- M2 _( T+ A自定义sigadd函数演示运算:
3 F3 S) d+ D5 C! q! V9 [. ]4 l4 ~4 J. ~4 Q4 e- n4 l9 C
function [y,n] = sigadd(x1,n1,x2,n2)
) c4 i. u/ r% p1 y7 C9 W! C%实现序列相加; s8 u* B) M: H% T# M* G2 a) t" W
% 实现y(n)=x1(n)+x2(n)% p! [, H* I8 \: Y8 p7 ?
% [y,n ]=sigadd(x1 ,n1,x2,n2)
. F6 `. c2 Z/ ~3 R9 K& M4 Hn = min(min(n1),min(n2)):max(max(n1),max(n2));3 ?/ E1 f& H- w* n! j: S
y1 = zeros(1,length(n));
0 I: b [2 ]1 U- a% m! ~" wy2=y1;% [* D. K$ l: j, C, b$ g
: U$ D; [5 B) Z6 t& G7 Y) `' p
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;" e/ e v; x# I3 H; Z2 p) t
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;# ]* A2 v! Z( a0 Q% ?. d
# L- n( T/ \3 G2 W. d2 |y=y1+y2;7 |0 X5 t- s, ]+ ~5 Z" I
# k9 W, y$ x( u" H- d( ~: P
end& q" f r# i% }5 T8 E0 E B
: e) z" L/ d2 L: e+ k
调用该函数! Y5 p3 B! n% W2 I& n
% f' M6 j6 N8 }: z; c: V3 K' Q
n1=[0 1 2 3];+ i" Y9 v$ c+ \/ ?
x1=[1 2 3 4];
! p6 ~6 w- T. c. M/ W
) ^; C$ ]/ m0 kn2=[2 3 4 5];
$ h. x0 y2 E6 v1 J: ]: lx2=[1 2 3 4];
' _4 G4 W) A9 J) U" b/ u4 T
, V0 ^) H* J8 csubplot(131);
5 I7 O/ D. S# `, Y* Dstem(n1,x1);
% C9 a/ W' Y p$ C) N/ w" Eaxis([-1 5,0 5]);% o4 Y. U, x* ?8 ]3 N
title('x1序列');$ q5 p4 F: t. Q1 g7 i
H) U# Q2 Q, Asubplot(132);. {3 S9 W$ ?1 ]- W
stem(n2,x2);
% g6 c* Q T0 V9 F1 V6 R3 l) m [0 Xaxis([-1 6,0 5]);
$ i) u: ]. }% q% b2 R* O5 ytitle('x2序列');0 Y9 @5 Q* |& C- ^
4 z; {* d2 J2 ~3 Z2 O5 p/ ]
[y,n]=sigadd(x1,n1,x2,n2);
. Z) j; t, {) k8 P1 s! ?# V) M3 L) n8 o" B( C4 M1 T/ |
subplot(133);
, F% m1 x) }" b5 b4 L4 A% R2 ?stem(n,y);1 Q- Y) l$ A& N
axis([-1 6,0 8]);
: F+ ^$ x0 w2 p$ g8 ?! }, htitle('相加后序列');
$ E2 C/ w3 x w6 A; _5 ]' Q( W/ o9 w/ Z' T- a: G( P$ V/ q3 |2 f! C7 A6 A* j
+ v. p- G4 R* ^) D4 E& E# w9 _
结果是正确的# F0 r$ T* N3 K
5 `' a+ T% b- e w0 @9 z: g8 y* {) j
! y" b" {5 r* \ Z$ ~
5 x- e/ h# A6 c# N- N" s) t
2.序列相乘 f5 D$ n, e- n. V; ]& Y. Q
序列相乘是对应采样点之间的相乘(点乘)
$ X- W2 d8 Y0 n- w9 B9 V自定义sigmuti函数演示运算:
3 O9 u+ I" m R l6 ?/ |5 k+ \/ `; q1 R4 E
function [y,n] = sigmuti(x1,n1,x2,n2), g2 C" W7 i1 N* |
% 实现y(n)=x1(n)*x2(n)
' T; x7 N/ ^# t9 }% [y,n ]=sigmuti(x1 ,n1,x2,n2)- r# g; d) j8 C
n = min(min(n1),min(n2)):max(max(n1),max(n2));
8 r" O R4 o) t- N1 Q2 ly1 = zeros(1,length(n));0 U; q8 a5 _7 Y0 h; C
y2=y1;
7 F+ ^, u) G( U4 {, C4 J
3 Q6 D8 n5 J; R, Ty1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
b. C+ U" A0 k# Ny2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
0 X. N2 a) z5 x. K( t' ~: R
. N6 y6 ? E; ey=y1.*y2;
4 P/ i8 Y$ H" |+ Y; s- _7 B' Zend C; W9 d/ d7 a/ G( Q
2 g, [+ i8 }1 P/ `& z
, X% m0 F- m# L; Z
调用该函数
* p' H/ o) l8 W" j) D" r6 v3 o2 S5 [/ d4 w' D
n1=[0 1 2 3];- S4 ]% }* I$ {& w6 Z
x1=[1 2 3 4];
4 P& X% X! a3 Q6 h: U
1 F3 J9 i" _8 `) Yn2=[2 3 4 5];
: g2 }( W1 l2 _x2=[1 2 3 4];
( V% I1 p' Z. j7 H# x6 f
: ^$ e2 E( G# h5 n9 F7 D. asubplot(131);
5 x* \4 P3 l( h1 {* K- mstem(n1,x1);+ G% g3 r+ ~/ Z. t$ E6 X/ e4 M
axis([-1 5,0 5]);# f) K: W* K% r
title('x1序列');* f8 R( d8 ]' u; }* K
7 Y% u( H9 p2 N0 N/ s$ p/ `. S& esubplot(132);- E( j8 i- l- { s" v9 V# b
stem(n2,x2);
6 X$ S9 _; z$ U! Zaxis([-1 6,0 5]);' N8 x& {/ b" y0 a0 \8 V1 T
title('x2序列');
, M" w+ l. D- b0 O {" A3 i
" ^9 K( V- }% X; _[y,n]=sigmuti(x1,n1,x2,n2);
. ? X3 _ X) h/ \. [2 V7 M2 i$ ~& n% K9 m! ?7 b* s0 K
subplot(133);7 G1 H5 l4 P: _
stem(n,y);
0 U3 H& s/ ]8 Z5 X# zaxis([-1 6,0 10]);! G! [1 D& y$ a: L9 m6 r/ ?* m a
title('相乘后序列');
! \. t( q& E n* C3 ^1 X0 `4 r6 O! [# @$ j! k, ] G, [$ g
5 C, q1 c# \- k2 Y! ]2 A* I
结果图2 y9 R- R( s/ d3 v( l
8 n1 J' |! \, x
: y3 u9 C2 h7 ^- [. T
2 N, ~- A; p0 f
3 B" T) @) x4 Q* F' Q/ |& P
8 N1 i2 s2 p M5 K: K4 r4 @3、序列倍率
$ z; F8 _6 k" {) W4 U6 e( T这个运算很简单,每一个采样值都乘以倍数a就可以了。
- m- [2 ?2 }* w, m5 b: {自定义sigdouble函数演示运算:- q& J9 y5 }" D2 U- J; ?
3 s. W& _% R9 U! F4 A
function [y,n] = sigdouble(x1,n1,a)4 ~. l' O L* q* p( a4 K4 b
%sigdouble 序列倍率
, x7 e# c7 F; k. a$ y* T) c' F8 o7 U% 在此运算中,8 {/ y, S. l2 x8 ~8 h+ u
% 每个采样值乘以一个常数a。. x& t7 [7 K( N Z/ s- |( o1 O( d0 i
% a{
8 U- B5 S5 f5 k1 g" |3 c" f' S- y6 E / W$ X$ d. x( X1 H
x(n)}= {
, S( L1 A: ^* E% X( ?. O
0 \+ H3 g& k* S6 f" n4 \ ax(n)}! M+ |) H. L3 q
% 在MATLAB中可用算术运算符“*”来实现倍率运算。
+ j) k, _, R9 X! Dn=n1;& N5 r: F; {' }
y=a*x1;
* ]* J ?6 _; V* u5 Send+ X6 N% v9 n! @4 e
2 u, H) A& b, ?& @1 C& D/ S' y# A
9 z9 A) ^7 O$ i9 `. T调用运行
, \# j0 g9 R% D$ E5 S- A! O5 E& ~' ~- U8 s$ r7 u
n1=[0 1 2 3];
7 m* j" L. G$ Ix1=[1 2 3 4];
6 r& V5 U1 H) d8 o% p$ o% Qa=3; %倍率
: [& F- z8 N) t; \( x& ?[y,n]=sigdouble(x1,n1,a);7 W b8 _8 V! h* X
subplot(121);
; {2 s! ]) L- _+ N/ ~6 Ystem(n1,x1);1 \1 U# C7 [; p! O0 a) Q) a# U
axis([-1 5,0 5]);
( Q, }' D. e8 \0 Y$ ?* ktitle('x1序列');7 K g! p# O+ g: T' K+ i
. {* c% x6 g. e+ H0 E
subplot(122);% m# m( s* l4 f* C/ P
stem(n,y);. _- ^( t0 K$ E
axis([-1 5,0 13]);( C3 D) z+ S( n9 A, u1 Q0 u1 Y
title('倍率后序列');
( ?7 R7 O9 L' Y8 _6 R& B* y3 ^/ Y4 P) y# i) `
/ T* q% w/ e; z( \
结果图
: ?, {0 B. j$ U7 }8 ^$ v. r
1 L2 N" |$ ^) W) A. K7 ~+ g& x) t9 q5 e; s K# p5 |
+ R* S6 ?$ K. v* z. P0 o1 g4、序列移位
* Z5 C; X* g& F# g; t2 s通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。8 K0 |, a( _* n" O% U7 C/ A1 T
移位后:y(n)={x(n-k)}/ K4 e5 _5 |6 a
自定义sigfold函数演示运算:8 G& A( N. n5 |; @
+ m( {, D0 p+ D. ^) i; x) X3 z5 _8 \2 r" _9 N* \) i
function [y,n] = sigshift(x,m,n0)" b S0 l! {% ?" s
%实现y(n)=x(n-n0)
* S( M4 i2 o, [! W- j/ A2 |1 O%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。$ L8 g9 V% A- k7 @0 ?% m
. }4 o( g: {) ]* Xn=m+n0;' ^& l8 Q. l" B2 C
y=x;
0 T6 i/ k# o- p4 n R% w1 q& p: D4 d9 N: C
) D6 k/ X$ L2 w& N% S: eend
# m s' ]0 ^7 E, q5 s( a a0 `1 I8 a" [* m, q
# u! e% `& x! K/ o/ |
调用运行:
( M$ s" e3 \6 k1 T# ^' P& E X& {) ~% L
n1=[0 1 2 3];
; n5 K% H0 e* |1 A# Z" r6 v5 G% ox1=[1 2 3 4];# Q6 q2 e# `* [6 `" \6 t
a=-3; %向左平移3个单位3 F% K( B1 {6 H3 n% B% c. n o
[y,n]=sigshift(x1,n1,a);) A# D' T- q, S7 c
subplot(121);
& j1 O% ]$ p ^" u; O8 r# Mstem(n1,x1);) P) R$ ]; A5 @5 a% I$ |" U) h6 ~) s
axis([-4 4,0 5]);
1 n3 N2 y5 Q- \# n6 O v6 m1 Ntitle('x1序列');3 _: t( `+ H Q0 e- B9 o. d
3 |& y% @8 e" f3 w; d
subplot(122);
4 V0 b: |% i5 astem(n,y);3 E% ?6 p. m- L4 W, V4 R8 s, q$ y9 j
axis([-4 4,0 5]);
' l, @8 n5 U) ~3 @' Ctitle('移位后序列');
m- B* t$ n! }2 [7 c
9 p6 b, }5 u+ G/ p0 l
) K8 ~# ]! F, L6 s( d结果图:
8 A. |1 }2 O2 Y5 a# \1 A! D
6 u/ @# v8 r# r% _5 N
# r, S0 `9 a: G9 M* Q
3 I& A: [5 A4 |' W$ }0 P
& t( S4 O/ H" b! G X6 Z5、序列折叠0 b4 s; }$ q! G. q" _) E
通过折叠运算,使得采样值每个样本按照n=0翻转
! Q+ H7 y& ^$ c2 I自定义sigfold函数演示运行:, Y* W4 i3 N: z' X" J
; Y; @" ~8 }: i. O" sfunction [y,n] = sigfold(x,n0); u5 y4 K# Z6 F; m% b: L
%序列折叠运算
: G& W0 s0 _3 T( ~: f; o%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)
: v( x) l: w4 y% g# O; M5 t%y(n)={
% d, x! J( b7 T& S" h) V! y 0 J' U" l# X z9 N# v
x(-n)}, H+ \, g2 n6 [1 _( O3 c0 s5 d/ Z
y=fliplr(x);
% F% U& h U, y6 O. ?( Cn=-max(n0):-min(n0);
1 U( P+ [# B2 I" F
# Z) ]; R; F4 i$ g" Z% K' dend" k9 i- E. h& X/ C/ [, i7 h9 A( }0 O
" P# W% M! G, Q g- E8 f
7 Y7 }+ q% i, S+ p. y+ [调用运行:
5 s8 R, }% u2 X) F5 r, ]/ ^+ W& D3 A9 b7 ~% W4 ?4 R
n1=[0 1 2 3];
. b4 o6 r/ Q2 e# i% a* fx1=[1 2 3 4];
0 g d' \% _7 k6 i[y,n]=sigfold(x1,n1);
% y0 m- s( b3 U1 y, a# csubplot(121);
8 _8 |- d& A/ g! H+ E" G b. X0 ]" Rstem(n1,x1);6 B9 \2 f0 [9 R) \
axis([-4 4,0 5]);
T! x! w) h2 ^! Gtitle('x1序列');: W" \9 w; p0 h) k- c0 k
" m/ w/ k u5 |subplot(122);
2 n; z9 f8 Y [0 G/ ?1 Sstem(n,y);
" {! W8 F4 d; h( M/ k+ u: Saxis([-4 4,0 5]);. F8 r/ J* C q& Q+ E
title('折叠后序列');- l6 s! L1 B, p+ m7 s6 a# _' r
3 t4 U% v/ B9 ^4 O4 k& G
# A0 p3 `$ Z" |5 e
) Y3 }: A( U" K- F结果图:
! L( Q, z: z8 s4 m( v: b
9 ~2 @( W0 P/ a( j( e) B( l
+ V3 G! G' s0 z* A' G2 U8 \ _& Z" ]5 h. [1 b1 |8 Y3 z
5 U/ o7 q( j8 z1 n' v4 u
总结
+ {; U; ^- t# i! o& J4 _至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。
- J) s1 }4 [7 P& c |
|