信号与系统时域运算与卷积
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x3=(x1+x2)./2; subplot (2,2,3); stem (nl,x3); axis (ax); title ('(x[n]+x[-n])/2');
12
x4=(x1-x2)./2; ax(3:4)=[-0.5 0.5];
14
subplot (2,2,4); stem (nl,x4); axis (ax); title ('(x[n]-x[-n])/2');
22
实验二
信号的时域运算和卷积
2.2
x[−n] 1 0.8 0.6 0.4 0.2 0
实验原理
x[n] 1 0.8 0.6 0.4 0.2 0 −5 0 (x[n]+x[−n])/2 1 0.8 0.6 0.4 0.2 0 −5 0 5 −0.5 0 0.5 5
−5
0 (x[n]−x[−n])/2
4
% %
6
% %
8
if length (F1)~= length (K1)
10
end [KT I]= sort (K1);
12
K= sort (K2);
21
2.2
实验原理
实二
信号的时域运算和卷积
if (KT(1)<K(1) || KT( length (KT)) > K( length (K)) )
实验二
信号的时域运算和卷积
2.1 实验目的
1. 掌握信号时域运算的基本方法,用 MATLAB 函数实现信号的运算和波形变换; 2. 熟悉信号卷积的定义,掌握利用 MATLAB 进行卷积运算的方法; 3. 熟悉相关 MATLAB 函数的用法。
2.2 实验原理
信号是随时间(或其他自变量)变化的物理量,在数学上表示为时间 ( t 或其他 自变量)的函数。广义地讲,信号可分为模拟信号和离散信号。模拟信号的自变量 和信号都是连续的,通常用 x(t) 表示,而离散信号的自变量和信号都是离散的,通 常用 x [n] 表示(其中 n 为整数值并在时间上表示一些离散时刻) 。由于计算机给出 的数值的位数都是有限的,所以严格来说计算机是不能处理连续的模拟信号的。同 样对于 MATLAB,除非是使用符号运算工具箱(Symbolic toolbox),也是不能进行模 拟信号的运算的。不过,如果我们用足够小的时间间隔对 x(t) 进行抽样,而且保证 抽样值有足够的精度,那么模拟信号就可以用抽样得到的离散信号来近似地表示。 在信号和系统中,取决于信号的自变量连续与否,信号也分为连续时间信号和 离散时间信号。 1. 信号的基本运算 对于连续时间信号,信号的基本运算(不包括信号的卷积、相关等相对较复 杂的计算)包括信号的相加和相乘、微分和积分、以及时域变换(平移、反 褶和尺度变换)等。如 (a) 相加(减) : x (t) = x1 (t) ± x2 (t) 19
6
subplot (2,2,1); stem (nl,x1); axis (ax); title ('x[n]'); n=-n;
8
x2=ZeroPadSignal(x,n,nl); subplot (2,2,2); stem (nl,x2); axis (ax); title ('x[-n]');
10
10
xp=ZeroPadSignal(x,n,nl); subplot (3,1,1); stem (nl,x1p); title ('x_1[n]');
12
subplot (3,1,2); stem (nl,x2p); title ('x_2[n]'); subplot (3,1,3); stem (nl,xp); title ('x[n]=x_1[n]*x_2[n]');
∞ ∑ k=−∞
x [k] h [n − k]
2.2.1 信号运算的 MATLAB 实现
20
实验二
信号的时域运算和卷积
2.2
实验原理
离散时间序列的运算 对于一个离散时间信号序列 x [n],在 MATLAB 中可以用长度相同的两个行向 量来表示:一个表示自变量 n 的取值范围,另一个表示对应的序列的值。例如
n=-3:2; x=[3 2 1 0 1 2];
由于存储空间的限制,MATLAB 只能表示有限长的序列(对于无限长序列,可以截 取有限的部分进行分析) 。 用两个向量分别表示信号的自变量和函数值,带来的好处是可方便地对信号进 行自变量变换和相加、相乘等运算。例如自变量变换可通过简单的对自变量 n 的运 算得到,例如
14
subplot (3,1,2); stem (nl,x2); title ('$x_1[n]=x[n]-x[n-1]$','interpreter','latex');
23
2.2
实验原理
subplot (3,1,3); stem (nl,x3);
16
实验二
信号的时域运算和卷积
title ('$x_2[n]=\sum\limits_{k=-\infty}^n{x[k]}$','interpreter','latex');
function [F, K] = ZeroPadSignal(F1, K1, K2)
2
%ZeroPadSignal Zero padding a signal. % [F, K] = ZeroPadSignal(F1, K1, K2) F = ZeroPadSignal( F1, K1, K2 ) sorts the elements of K1 in ascending order, rearranges F1 accordingly , zero pads F1 to a range defined in K2, and returns signal F with sorted index K. error ('Lengths ␣of␣F1␣and␣K1␣ must ␣ agree.');
n1=n+1;
2
n2=-n;
] n2和x的组合) 可表示 x [n − 1] (n1和x的组合)和 x [−n( 。变换后自变量的取值范围 和(或)顺序将会发生变化。至于信号的相加、相乘等运算,如果两个离散时间序 列具有自变量取值范围,那么这两个序列的相加、相乘可直接通过对函数值向量的 相加和点乘来实现;如果两个离散时间序列的自变量取值范围不同,我们可通过补 零的方式使其具有相同的自变量取值范围再进行运算。例如序列 x1 = [1, 2, 3, 4, 5] 对应的 n 的范围是 n = −2 : 2,序列 x2 = [1, 2] 对应的范围是 n = −1 : 0,这时需要 x2 扩展为 x2 = [0, 1, 2, 0, 0],才能和 x1 进行相加、相乘运算。 为了实现不同自变量取值范围和顺序的信号的运算,我们不妨定义以下的函 数:
14
error ('Range ␣of␣K2␣ must ␣not␣ less ␣ than ␣ that ␣of␣K1.') end
16
Id= zeros (1, length (KT)); for J=1: length (KT)
18
Id(J)= find (K==KT(J)); end
20
F= zeros (1, length (K)); F(Id)=F1(I);
22
end
该函数可对信号序列进行排序,并且可以将序列扩展为指定的自变量取值范围。前 面所述的例子可以通过以下的脚本程序计算:
n1=-2:2; x1=[1 2 3 4 5];
2
n2=-1:0; x2=[1 2]; x2p=ZeroPadSignal(x2,n2,n1);
4
x=x1+x2p x=x1.*x2p
结果波形如图2.3所示。
x1[n] 1 0.5 0 −2 1 0.5 0 −2 2 1 0 −2
0
2
4
6 x2[n]
8
k=−∞
2. 卷积 卷积是分析线性时不变系统的基本方法之一。对于连续时间 LTI 系统,如果 系统对单位冲激响应为信号 h (t),则系统对输入信号 x (t) 的零状态响应为: ∫ y (t) = x (t) ∗ h (t) =
∞
−∞
x (τ) h (t − τ) dτ
对于离散时间系统,系统的零状态相应是输入信号 x [n] 和系统单位脉冲响应 h [n] 的卷积和: y [n] = x [n] ∗ h [n] =
clear ;
2
n
n1=0:10; x1=0.5.^n1; n2=1:5; x2=ones(1,5);
4
x= conv (x1,x2); n0=n1(1)+n2(1);
6
n=n0:(n0+ length (x)-1); nl=-1: max (n);
24
实验二
8
信号的时域运算和卷积
2.2
实验原理
x1p=ZeroPadSignal(x1,n1,nl); x2p=ZeroPadSignal(x2,n2,nl);
x[ n] 4 2 0 −6
−4
−2
0
2
4
6
8
x 1[ n ] = x [ n ] − x [ n − 1 ] 1 0 −1 −2 −6 −4 −2 0 x 2[ n ] = 20 10 0 −6 −4 −2 0 2 4 6 8 2
n
4 x[k ]
6
8
k =−∞
图 2.2 离散时间信号的差分和累加
离散时间序列的卷积和 我们知道用conv函数可计算两个向量的卷积(或者两个多项式的乘积) 。但要 完整地给出两个离散时间序列卷积和的结果,不仅要给出序列采样值卷积和的结 果,还需要确定所得到的结果序列所对应的自变量的取值范围。这其实是不难确定 的:如果两个序列的自变量 n 分别开始于 n1 和 n2 ,则它们的卷积开始于 n1 + n2 。 例如计算 x1 [n] = (0.5) u [n] 和 x2 [n] = u [n − 1] − u [n − 6] 的卷积,程序如下:
5
−5
0
5
图 2.1 信号的奇偶分解
离散时间序列的差分和累加 在 MATLAB 中差分可用diff函数实现,累加可用sum函数实现,或将采样值向 量逐项相加即可。例如以下的脚本可得图2.2:
clear ;
2
nl=-5:7; n=-3:4; x=[1 2 3 4 4 4 2 1];
4
x1=ZeroPadSignal(x,n,nl); ndiff=-4:7; xdiff= diff (x1);
2.2
实验原理 (b) 相乘: x (t) = x1 (t) x2 (t) (c) 时域变换: x (t) → x (a (t − t0 )) (d) 微分: x (t) → (e) 积分: x (t) → ∫t
dx(t) dt −∞
实验二
信号的时域运算和卷积
x (τ) dτ
对于离散时间序列,信号的基本运算包括相加和相乘、差分和累加、以及时 域变换等。由于离散时间序列在时间上的离散性(只在整数时间上有定义) , 其尺度变换的过程为抽取或内插零。例如 (a) 相加(减) : x [n] = x1 [n] ± x2 [n] (b) 相乘: x [n] = x1 [n] x2 [n] (c) 平移: x [n] → x [n − n0 ] (d) 反褶: x [n] → x [−n] (e) 抽取: x [n] → x1 [n] = x [Nn] x [n/N ] , n/N is an integer (f) 内插: x [n] → x1 [n] = 0, otherwise (g) 差分(后向) : x [n] → x [n] − x [n − 1] n ∑ (h) 累加: x [n] → x [k]
再如以下的脚本产生一个信号 x [n] = sin
(n+5)π ,自变量范围 8
n = [−5 : 3],我们将
其分解成偶函数和奇函数部分,输出结果如图2.1所示。
clear ;
2
ax=[-6 6 -0.1 1.1]; nl=-6:6;
4
n=-5:3; x= sin ( pi /8*(n+5)); x1=ZeroPadSignal(x,n,nl);
6
x2=ZeroPadSignal(xdiff,ndiff,nl); sum =0;
8
x3= zeros (1, length (nl)); for J=1: length (nl)
10
sum = sum +x1(J); x3(J)= sum ;
12
end subplot (3,1,1); stem (nl,x1); title ('$x[n]$','interpreter','latex');