|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
4 V+ _& ]: p( a$ n0 h
文章目录
- C% o s, F/ \0 P- 离散时间信号——序列的基本运算及matlab实现
- 前言
- 一、什么是离散时间信号?
- 1、离散时间信号
- 2、数字信号处理系统
- 二、序列的基本运算
- 1.序列相加
- 2.序列相乘
- 3、序列倍率
- 4、序列移位
- 5、序列折叠
- 总结% ~# G$ V, S# w3 \* s! C$ K
. m: f7 y7 \+ @% j* G, D
2 y7 Q2 z; {& j前言
9 F Q; L4 t1 C: v* E T本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。* T/ Y' b5 z7 C6 P2 i4 |
8 Z6 v* f T9 p- m; X( q' a提示:以下是本篇文章正文内容,下面MATLAB已亲测有效! N4 p M5 W& Q! e* O# ~
7 k- ~& B4 }, J0 @
一、什么是离散时间信号?
" H6 |, d+ ]: E! R1、离散时间信号0 D0 ]; ?, j9 F3 o4 \
信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
4 `+ y$ m! M: N! d0 ~离散时间信号:时间为离散变量,幅度为连续变化的变量。8 q) B9 t' v8 ?, l6 H4 h
( v1 ]' m7 _4 |( _) r0 J# w
2、数字信号处理系统 S( U6 y1 ^' u4 y
数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。
: e f6 `( C7 y& k$ B
; X9 a R' t( t6 W$ H" t6 M
/ Q, |4 A4 V X9 S# ]1 z5 n0 ~+ H# ^
& M8 u% V/ i: X$ t
二、序列的基本运算
6 Y) P4 J+ h0 k9 G# y1.序列相加% _0 W' v% u* ?
序列相加是一个对应样本与样本之间的相加。
! C! }/ ?) k. M4 z* c自定义sigadd函数演示运算:
, M! C4 s+ q$ K1 _- C7 z# C9 ?2 E4 ?+ Q+ i) c) F3 q
function [y,n] = sigadd(x1,n1,x2,n2)
! b* z# y8 l$ z1 l%实现序列相加
7 K+ S- ~% Y6 s! i8 ]% 实现y(n)=x1(n)+x2(n)
! J: T; w. Q5 D' S8 U1 V% [y,n ]=sigadd(x1 ,n1,x2,n2)% j# c! k. y& R- ?$ f' w. {, P
n = min(min(n1),min(n2)):max(max(n1),max(n2));/ }2 l% }- h7 m' X7 D
y1 = zeros(1,length(n));* C( H9 b# @' R* l" X
y2=y1;
+ k# _- S6 Q& Q4 \. e6 q+ _* ~" X) A
6 e% @3 Q+ y; ^ m# t3 cy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
. t& w, N+ z5 O _' @. D- ~! ^" a/ _2 Fy2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;: y2 _& B! n9 X% A. d$ `4 j
# H+ T4 r I2 L4 \y=y1+y2;/ o9 ~0 ~; I/ E
9 |5 q- U& T( k, ^% ^* e
end2 g9 e* W1 Y! I: [/ l
q1 f$ j) J+ c+ A" C: ~8 w0 J* s1 p调用该函数3 `" i7 X/ _7 n, ]
^( M- X/ l* on1=[0 1 2 3];
8 C/ R4 ?& t$ \& u# X Bx1=[1 2 3 4];
8 U$ [& X/ H6 v6 M8 F( h0 l
( B& b3 \7 d* K+ T. ln2=[2 3 4 5];
( P& _8 w8 c2 l' K, Z% `) `x2=[1 2 3 4];5 y4 w+ y1 n0 k2 \1 _% r u& V5 H
# q9 U F) o6 ^* M1 Msubplot(131);
9 }. J: l8 I' \9 N# M. I2 W, O! [stem(n1,x1);2 E1 R! v D0 J) a/ q, n4 x
axis([-1 5,0 5]);/ Q1 j9 \: `: `5 l9 x4 {
title('x1序列');5 f$ Z- U+ i. `9 g1 ?7 m
) Q7 a& m& F8 M' ?8 tsubplot(132);$ y4 L: |; G0 b- v3 ~" y$ J* o
stem(n2,x2);* v9 Q& b( D4 d5 q
axis([-1 6,0 5]);4 X5 h x }* l: y
title('x2序列');% A/ r/ ], m- F
+ o% f* V9 ]% i5 j
[y,n]=sigadd(x1,n1,x2,n2);) O- G/ y: ~9 }, `5 O
$ U+ B; t8 j$ U+ {0 ^8 p
subplot(133);
! j9 i2 m$ s! ^7 F& V: j5 g/ Estem(n,y);, p2 y2 Z% a/ _+ h8 b4 e4 r
axis([-1 6,0 8]);9 X) b; u6 M0 {$ ~2 \' e
title('相加后序列');: o7 O' p* a- Y A5 \/ I- J( R
2 V' ^ V+ l& z7 P* Y% H) t
+ D+ W! L9 `2 ~/ X9 A8 L& D4 x结果是正确的* l7 U4 Z2 x9 j; Y/ b
. x5 \/ `3 W# L
; b4 s- G0 o7 E/ F$ _) r, e. w( ]4 k) [
2.序列相乘
3 _& |! P3 _0 a" P) D序列相乘是对应采样点之间的相乘(点乘)6 x& l4 b, t" Q" a0 j/ `
自定义sigmuti函数演示运算:( _6 V4 `1 m! N8 ^; b
0 K/ C0 d: A Y: sfunction [y,n] = sigmuti(x1,n1,x2,n2)
" `, L. y$ E6 w2 g% c& u/ p% 实现y(n)=x1(n)*x2(n)
' p3 \. u9 d; P, u% [y,n ]=sigmuti(x1 ,n1,x2,n2)
% s' y O, r0 zn = min(min(n1),min(n2)):max(max(n1),max(n2));
9 ]- @ j' H4 B g' x$ n' g9 i t' cy1 = zeros(1,length(n));% ~' r1 K9 E* Z, ~) u$ p
y2=y1;* z& R, X: U. B# w& U2 b
9 t! @: K5 i! O3 K6 Vy1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
6 K7 w e3 n1 M$ M- Qy2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;$ b( i7 l9 |$ h& b" _# |# t
% P% O& z6 Q0 Ty=y1.*y2;8 ?/ P2 P: M( Y) t" i
end$ @# W. l8 u3 u$ F. l7 k
( C: c: G) ?* w* U: C
. X E9 b4 z4 I$ C, V' n' }- V调用该函数
4 A& T5 m& `& L
2 x* M) c5 r" b% u; xn1=[0 1 2 3];8 ^, L3 `! z+ P% o
x1=[1 2 3 4];
9 X+ r# {# `: e) `* u1 ~) X0 P; P* M G/ U" _
n2=[2 3 4 5];
# s2 r# M* Q% U! p7 qx2=[1 2 3 4];
" y1 B& ^1 V( Z' R% o1 U
; H" }! Q6 ]& J* ^3 X6 r, k, dsubplot(131);+ S, e- j1 l) F3 h* u! R& Z
stem(n1,x1);
v' R3 q2 u( daxis([-1 5,0 5]);
$ d3 ~' t7 N& g* h* l1 C( @4 Z8 ztitle('x1序列');
. s8 m3 G7 H, ^3 h" z; D, a, B) v( X( J' b
subplot(132);
- L/ S9 T5 e# y2 p: c% ^1 T+ ostem(n2,x2);% j& Y, \ _4 p# B
axis([-1 6,0 5]);4 a- Z! z7 Y! v) e7 u
title('x2序列');& q: V, q+ j! ^% o
5 M$ A, |$ H y3 t[y,n]=sigmuti(x1,n1,x2,n2);5 A+ l! p. C6 H/ `+ D! d3 Z, \
T* W# j* l+ W V f
subplot(133);
+ V' `, l. R; W- h+ o* xstem(n,y);
- y- \7 X% r- s* C3 ^" Vaxis([-1 6,0 10]);
H' u3 O' y6 ]' l a. N" Wtitle('相乘后序列');0 o+ A- A1 \8 M) x* t
I0 X) J! @" K+ X+ {
/ q6 d; {9 }2 D4 G) E/ a4 h结果图; V! S& |- o7 H: p
/ {: M6 F& ^. w9 q F
% |# r( z+ F) I! c& F; Z' R& o
! F4 i7 v6 ?5 b7 x: M% W3 Y/ O5 P3 D3 W) n* F. \
$ f- @; d' p8 U
3、序列倍率9 b! U$ m; p; V8 o5 v
这个运算很简单,每一个采样值都乘以倍数a就可以了。$ V7 U8 k# a- _% g$ q
自定义sigdouble函数演示运算:" |" x; O, ?# l4 b- R1 ^" |3 }- o
+ n; c3 [% r5 `+ H1 s
function [y,n] = sigdouble(x1,n1,a)1 r, H5 h! p/ v. b# m" B
%sigdouble 序列倍率
3 S, }# R4 F# c0 E7 Y% 在此运算中,
6 l1 H Z/ ?" J( q% 每个采样值乘以一个常数a。* t; G v! p9 w# i
% a{7 U, b2 i7 O4 S$ m( Q( z! Y
/ Z) k+ x( r7 L7 w7 D
x(n)}= {
0 x1 \; l/ e9 e 9 }* n! j, v5 K1 f! \ B
ax(n)}
" g2 J5 m9 g& Z0 s6 ~) Y/ F% 在MATLAB中可用算术运算符“*”来实现倍率运算。' T) m- a5 F/ W& m
n=n1;
5 w' Z! C% ?) z7 q$ O6 I1 Ky=a*x1;
) h9 t$ j+ j- y7 mend8 |6 ]( D3 o$ Q% s, U
6 O* F. m; `" H: ]6 ^( I5 H
! X5 G9 H/ j& W. Z* P( B: A" o
调用运行
?+ K F7 E. @+ t* E. f2 A( n- c: B b8 X. Z( \. D$ D/ `$ @% @
n1=[0 1 2 3];; ^6 z k0 [: T, x
x1=[1 2 3 4];
* {6 `; I; n& E; d, j3 ua=3; %倍率' l1 L; i4 v) E# M. J
[y,n]=sigdouble(x1,n1,a);
6 h; k+ q0 k7 C2 o; S* ?subplot(121);, T2 |* W8 P" L; G, [
stem(n1,x1);* I4 P% y6 g1 N, {+ [ ^& \$ J
axis([-1 5,0 5]);
l9 f% Y' V8 Qtitle('x1序列');/ a0 G: k" {2 b2 \' E+ w" ]. ~9 l
: M8 K: b1 f7 W* V3 M0 Y* v; Z# h0 xsubplot(122);/ e" j# X6 b# c
stem(n,y);5 c+ j' Q8 o) n* ~
axis([-1 5,0 13]);
# L! E1 v! y! Z: J! E# [1 ptitle('倍率后序列');
" G5 w( k m" s# I+ U/ m5 E6 f+ W+ |+ G9 |5 T' N& U
, B( B5 T: o' g9 w6 i$ P7 A6 p& s结果图9 L+ m" C* d3 ?% N
) [" w( e7 P8 J7 a
9 ^1 T3 v; e4 c% i5 x' f& z$ c6 h1 [; ^+ u# e6 Y+ W
4、序列移位
' E7 Z5 n) B/ }# \4 n) S通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。
p: Q$ c" D) t B移位后:y(n)={x(n-k)}
2 z0 p% S& U: g" v o自定义sigfold函数演示运算:
! h" q7 W8 j/ i8 { l& S
5 D. v" c1 O; o; Z e
7 l" y. O0 {4 N; }; K tfunction [y,n] = sigshift(x,m,n0)
9 D' E& g6 A5 \- y# y%实现y(n)=x(n-n0)
4 \' _% Z- A# o8 E f%移位--在此运算中,x (n)的每一个样本都移动n0个周期,移位后的序列y (n)如下。; O" r, t/ J; P# f {1 k. [' X
6 A" Z" h9 @! X* G an=m+n0;
7 z! R |0 o1 k: ~y=x;
8 ^6 |+ F- ]: Q, p: ~( u1 Q1 b" f; V H* A+ E
8 f. y* R% H1 D
end* D8 r# Z. v( ^
( a4 `4 F" Z/ G, _) n7 G
+ t \ T9 b: @; n- C调用运行:+ j2 Z" a3 V2 ]% B4 @: F
, K. k* a7 I' X. h5 }2 t# W7 P6 Mn1=[0 1 2 3]; R% K# n/ V2 Y) v* u3 l6 h
x1=[1 2 3 4];
8 u) p. \0 D, A! n3 A; [& ca=-3; %向左平移3个单位
0 f1 U- g# n+ `7 K/ P6 A9 Q7 B[y,n]=sigshift(x1,n1,a);
7 U7 u+ L, a3 y3 [5 z: O+ Z0 Qsubplot(121);
, m8 S- Y( l$ ^8 t3 {stem(n1,x1);
6 g, ^* B. O- O* c! ?axis([-4 4,0 5]);+ i3 }+ {5 e+ h0 ~
title('x1序列');' g7 ?( i+ B: H4 l0 }/ f3 K
7 Z* `: G* R5 r' r# S3 j
subplot(122);, G, G$ V& ~; }" u: @; n& }
stem(n,y);5 C- E( L6 v m. C1 l
axis([-4 4,0 5]);
* D; S1 O! W) g8 e2 J9 b# d# ptitle('移位后序列');* ]- ?+ n) u. m: F' T
0 R$ ?: l! L* x
4 a3 F( l! X% X结果图:
! K5 J- M. x9 {% `( j6 H9 k& F
0 N6 V1 G8 S4 i
) R, _7 B* w+ b: ~7 ?+ U6 E# |4 N( q2 N& v- M
% z O$ K5 c& ]6 P5、序列折叠& Y5 s8 b7 `. n- R0 z2 t6 b
通过折叠运算,使得采样值每个样本按照n=0翻转) p, F- H+ g# \' J4 O X2 r
自定义sigfold函数演示运行:) |% I. s ~& U" Y" H
, Z6 z' |" F: W2 ~! @" f3 Pfunction [y,n] = sigfold(x,n0)
\# o I- y8 J0 D8 S% Z ?! H5 \%序列折叠运算& \1 T# y: w4 ?- i9 ^6 r T Q# K
%在此运算中,x (n)的每个样本都对n= o翻转,得到一个折叠后的序列y(n)
$ X0 R0 ]' m" G; i%y(n)={
# b! ^0 q& b) i
% ~+ d9 G7 t$ ~5 g: y$ h" ? x(-n)}. b4 S0 q0 i: ]2 m' s
y=fliplr(x);, Y" o# @. b7 ?" o% ]( a) P) P
n=-max(n0):-min(n0); ( ?" P5 T& ^3 \; W$ `: Y2 l
+ N1 ~" t' I* x/ o; l- y- s3 J5 Z& I
end
7 `( f* i, K2 x% K& a- \7 S* E' G# V! D1 v( s' H$ [+ P5 j5 L4 h
& @' q6 I. g& ~ v2 W调用运行:
8 \- E* {4 L1 F c
7 C. r6 {- K; w: C8 r [# ]; P/ En1=[0 1 2 3];
[! X( _, X5 Sx1=[1 2 3 4];5 j, w* J O5 V1 i& V' q; Z( k
[y,n]=sigfold(x1,n1);
2 I& n- \$ O/ `9 U$ s$ \. x6 psubplot(121);) H# q$ ?* B- {* G I. c( Z4 V0 Q3 n
stem(n1,x1);& \8 z: O5 R8 t* |& \. J
axis([-4 4,0 5]);8 D! U+ C7 X* K \, o
title('x1序列');
E. v: N: k, a* }) A6 s; j# S. J9 F% M4 t6 H3 j
subplot(122);
0 |1 Z2 `, N) ]/ i. u& {- Mstem(n,y);
1 `) L5 }) b$ y( _axis([-4 4,0 5]);/ w1 q2 ^+ l1 z0 H5 H, \
title('折叠后序列');9 J' i j O+ n$ G" S
0 H% {) o$ q- T: p. `7 m1 D
& ?& K) T$ {- ]" h( r! n* Q# G
, z% d( p0 M% c! G# W7 H8 m结果图:2 y8 C0 k. Y, J- m* m7 P# \4 I
; c3 ~1 ^: Z/ z8 w
+ e4 I) P$ A9 R8 V
! p! m9 ~! d& |) a% Q* x4 ^, e: Q. Q- b
总结( n8 E0 x* a4 X L
至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。
P! E6 d% e6 c/ \: K+ O0 p |
|