实验1 信号的时域描述与运算
一、 实验目的
1、 掌握信号的MATLAB表示及其可视化方法。 2、 掌握信号基本时域运算的MATLAB实现方法。 3、 利用MATLAB分析常用信号,加深对信号时域的理解。
二、 实验原理
1、 连续时间的MATLAB表示
连续时间信号指的是在连续时间围有定义的信号,即除若干个不连续点外,在任何信号都有意义。在MATLAB中,连续时间信号可以用两种方法来表示,即向量表示法和符号对象表示法。
向量表示法:严格意义上来说,MATLAB并不能处理连续时间信号,都必须是用信号等时间间隔采样后的采样值来近似表示的,采样时间间隔足够小的时候,这些采样值就可以近似地表示出连续时间信号。 例如:>>t=0:0.01:10;
>>x=sin(t);
此时利用plot(t,x)命令即可绘制上述信号的时域波形。符号对象表示法:连续时间信号先用表达式表示出来,然后采用符号表达式来表示信号。 例如:>>sym t;
>>x=xin(t);
此时利用ezplot(x)命令即可绘制上述信号的时域波形。
常用的信号产生函数: 函数名 heaviside sin cos sinc exp 功能 单位阶跃响应 正弦函数 余弦函数 sinc函数 指数函数 函数名 Rectpuls Tripuls Square Sawtooth 功能 门函数 三角脉冲函数 周期方波 周期锯齿波或三角函数 2、 连续时间信号的时域运算
对连续时间信号的运算包括量信号想家、相乘、微分、积分以及位移反转、尺度变换(尺度伸缩)等
1) 相加和相乘
信号的相加和相乘指两个信号对应时刻的值相加和相乘,对于两个采用向量表示的可以直接使用算术运算的运算符“+”和“?”来计算,此时要求表示两信号的向量时间围和采样间隔相同,采用符号对象表示的两个信号,可以直接根据符号对象的运算规则运算。
2) 微分和积分
对于向量表示发表示的连续时间信号,可以用过数值计算的方法计算信号的微分和积分。这里由时间向量[t1,t2,…,tN]和采样值向量[x1,x2,…,xN]表示的连续信号的微分是利用差分来近似求取的。 MATLAB里用diff来计算差分x(k+1)-x(k)。
连续信号的定积分可以由MATLAB的quad函数实现,调用格式为 quad(‘functions_name’,a,b)其中,functions_name为被积函数名,a、b为积分区间。
对于符号对象表示的连续时间信号,MATLAB提供了diff函数和quad函数分别用于求微分和积分
3) 位移、反转、尺度变换
符号的位移:信号x(t)的自变量t更换为(t-t0),表示x(t)波形在t轴上整体移动,当t0>0整体右移,当t0<0整体左移。 信号的反转:信号x(t)的自变量t更换为-t,x(t)的波形相当于以t=0为轴反转过来。
信号的尺度变换:信号x(t)的自变量t更换为at,x(at)表示信号压缩(a>1)或拉伸(a<1)。
3、 离散时间信号的MATLAB表示
离散时间信号仅在一些离散时刻有定义。在MATLAB中离散时间信号需要使用两个向量来表示,其中一个向量用于表示离散的时间点,另一个向量用来表示这些时间点上的值。
stem函数用于沪指离散时间信号波形,为了与我们表示离散时间信号的习惯相同,在绘图时一般需要添加“filled”选项,以绘制实心的杆状图形。
4、 离散时间信号的时域运算
离散时间信号的相加相乘是将两个信号对应的时间上的值相加或相乘,可以直接使用算术运算的运算符“+”或“?”来计算。
离散时间信号的位移,则可看作是将表示时间的向量平移,而表示对应时间点上的值的向量不变。
离散时间信号的反转,则可看作是将表示时间的向量和表示对应时间点桑的值的向量以零为基准点,一纵轴为对称轴反折,向量的反折可以利用MATLAB的fliplr函数实现。
三、 实验容、实验结果以及实验中遇到的一些问题与解决
(1) 利用MATLAB绘制下列连续时间信号波形: ① X(t)=(② X(t)=③ X(t)=④ X(t)=
u(t) [u(t)-u(t-2)] [u(t+2)-u(t-2)] [u(t)-u(t-3)]
第一题的总代码如下:
syms t
x1=(1-exp(-0.5*t))*heaviside(t); %函数 subplot(221);ezplot(x1); %分块画图 xlabel('t');title('1(1) x(t)'); %标记 x2=cos(pi*t)*[heaviside(t)-heaviside(t-2)]; subplot(222);ezplot(x2);
xlabel('t');title('1(2) x(t)');
x3=abs(t)/2*cos(pi*t)*[heaviside(t+2)-heaviside(t-2)]; subplot(223);ezplot(x3);
xlabel('t');title('1(3) x(t)');
x4=exp(-t)*sin(2*pi*t)*[heaviside(t)-heaviside(t-3)]; subplot(224);ezplot(x4);
xlabel('t');title('1(4) x(t)');
第一题程序运行结果如下:
1(1) x(t)110.50.50-0.5002t1(3) x(t)10.50.50-0.5-2-10t12046-100.51t1(4) x(t)1.521(2) x(t)-0.501t23
(2) 利用MATLAB绘制下列连续时间信号波形: ① X(t)=u(n-3) ② X(t)=
u(n)
③ X(t)=n[u(n)-u(n-5)] ④
X(t)=
u(n)
第二题的总代码如下:
n=0:10;
x1=heaviside(n-3);
subplot(221);stem(n,x1,'filled'); xlabel('n');title('2(1) x(n)'); x2=(-1/2).^(n).*heaviside(n); subplot(222);stem(n,x2,'filled');