实验一:连续信号和离散信号的表示与卷积
一.实验目的
1. 学习MATLAB软件产生信号和实现信号的可视化 2. 学习和掌握连续和离散信号的时域表示方法 3. 学习和掌握连续信号和离散信号卷积方法
二.实验原理
1. 信号的表示方法
常用信号:
➢ 连续函数f(t)sint, f(t)Ae,Sa(t)atsint tn➢ 离散信号f(n)sin0n,f(n)e 奇异信号:
jw0n,f(n)au(n)
➢ 连续函数:冲激函数(t),阶跃函数u(t),斜坡函数R(t) ➢ 离散信号:冲激函数(n),阶跃函数u(n),斜坡函数R(n)
2.卷积
连续函数的卷积:g(t)离散函数的卷积:g(n)f1()f2(t)d
(nm)
mf(m)f12三.实验内容
1. 熟悉matlab工作环境
(1) 运行matlab.exe,进入matlab工作环境,如图(1)所示。
1
图1 matlab工作环境
(2) matlab工作环境由Command Window(命令窗口)、Current Direcroty(当前目录)、workspace
(工作空间)、command History(历史命令)和Editor(文件编辑器)5部分组成。其中所有文件的编辑和调试、运行在Editor编辑窗口下进行。程序的运行也可以在命令窗口进行。程序调试的信息显示在命令窗口。
(3) 程序文件的产生:点击菜单file下的New下的M_files,进入编辑器界面,如图2。
2
图2 M文件编辑器
(4) 在matlab软件中,程序分为脚本和函数文件,两者的差别在于函数文件有形参和返回的结
果,而脚本文件中的变量全部返回到工作空间。
在m文件编辑器下键入程序代码,保存程序文件(命名规则同C语言)。如果所定义的是函数文件,则要求函数名为M文件名。
例如指数函数定义格式 [t,y]=exp1_exp(t1,t2,dt,A,a)
(5)程序运行需要给定义的函数参数赋值。切换到命令窗口下运行
指数函数文件调用方式:[t,y]=exp1_exp(-10,10,0.1,3,-1,1)
2 连续和离散信号的时域表示方法
t(1)单边指数信号 y(t)Aeu(t);
function y=exp1_exp(t1,t2,dt,A,a,options)
%指数函数,其中t1,t2,dt分别为起始时间、终止时间和时间间隔 %A,a为常数 y(t)=Aexp(a*t)
%options参数等于1时为单边指数函数,其他时为双边指数函数 %函数调用的格式 y=exp1_exp(-10,10,0.1,3,-1,1) if options==1
t=0:dt:t2;%单边指数函数时间范围
3
else
t=t1:dt:t2;%双边指数函数时间范围 end
y=A*exp(a*t);%指数函数 plot(t,y)%画图 grid on
xlabel('t')%X轴坐标 ylabel('y(t)')%Y轴坐标 if options==1
title(' 单边指数信号')%标题 else
title(' 指数信号')%标题 end
实验要求:1)在同一张图上画出a>0,a=0,a<0时指数函数波形,如图3所示
指数信号252015y(t)1050-2-1.5-1-0.50t0.511.52
图3 指数函数
2)提示:在命令窗口设置hold on命令,可以在同一张图上画出多条曲线
(2) 单位冲激信号
function [t,y]=exp1_impulse(t1,t2,dt,t0)
%单位冲激信号,其中t1,t2,dt分别为起始时间、终止时间和时间间隔 %t0为冲激点
% 函数调用格式:[t,y]=exp1_impulse(-10,10,0.1,0);
4
t=t1:dt:t2; n=length(t); y=zeros(1,n);
y(1,(t0-t1)/dt+1)=1/dt; stairs(t,y); xlabel('t') ylabel('y(t)')
title('单位冲激信号')
实验要求:1)要求产生冲激点在X处的单位冲激函数,其中X为自己的学号中最后两位;(2)要求画出图形
(3)单位阶跃信号
function [t,y]=exp1_step(t1,t2,dt,t0)
%单位阶跃信号,其中t1,t2,dt分别为起始时间、终止时间和时间间隔 %t0为阶跃跳变点
% 函数调用格式:[t,y]=exp1_step(-10,10,0.1,3); tt1=t1:dt:t0; tt2=t0:dt:t2;
nn1=length(tt1);%length函数测量变量tt1长度 nn2=length(tt2);
y1=zeros(1,nn1);%产生1行,nn1列的零数据矩阵
y2=ones(1,nn2);;%产生1行,nn2列的数据矩阵,矩阵元素为1 t=[tt1 tt2]; y=[y1 y2]; plot(t,y) axis
xlabel('t') ylabel('y(t)')
title('单位阶跃信号y(t)') xy_axis=axis;
axis([xy_axis(1:2) 1.5*xy_axis(3:4)-0.1])
实验要求:1)要求产生阶跃跳变点在X处的单位阶跃函数,其中X为自己的学号中最后两位;(2)要求画出图形
(4)矩形脉冲信号
function [t,y]=exp1_rectimpulse(E,width,T1,T2,dt,T0)
%矩形脉冲信号,其中T1,T2,dt分别为起始时间、终止时间和时间间隔
5
%T0为阶跃跳变点
% 函数调用格式:[t,y]=exp1_rectimpulse(10,1,-10,10,0.1,2); t=T1:dt:T2;
y=E*rectpuls(t-T0,width); plot(t,y); xlabel('t') ylabel('y(t)')
title('矩形脉冲信号') xy_axis=axis;
axis([xy_axis(1:2) 1.5*xy_axis(3:4)-0.1])
实验要求:1)要求产生矩形脉冲幅值为X,脉宽为2,脉冲中心点为X的矩形脉冲信号,其中X为自己的学号中最后两位;(2)要求画出图形
(5)正弦信号
function [t,y]=exp1_sin(t1,t2,dt,A,w) %正弦信号,,其中t1,t2,dt分别为起始时间、终止时间和时间间隔 %A,W为幅度和角频率参数
% 函数调用格式:[t,y]=exp1_sin(-10,10,0.1,10,1); t=t1:dt:t2; y=A*sin(w*t); plot(t,y)
title('正弦信号') xlabel('t') ylabel('y(t)')
实验要求:1)要求产生矩形脉冲幅值为X,角频率为2的正弦信号,其中X为自己的学号中最后两位;(2)要求画出图形
(6)单位序列
function [n,y]=exp1_dimpluse(k1,k2,dt,k0)
%离散单位冲激信号,其中k1,k2,dt分别为起始时间、终止时间和时间间隔,dt要求为整数 %k0为冲激点
% 函数调用格式:[n,y]=exp1_dimpluse(-10,10,1,0); n=k1:dt:k2; nl=length(n); y=zeros(1,nl);
y(1,round((k0-k1)/dt)+1)=1; stem(n,y,'filled')
6
title('单位冲激序列')
实验要求:1)要求产生冲激点在X处的单位冲激函数,其中X为自己的学号中最后两位;2)要求画出图形
(7)单位阶跃序列
function [n,y]=exp1_dstep(k1,k2,k0)
%离散单位阶跃信号,其中k1,k2分别为起始时间、终止时间,默认时间间隔为1 %k0为阶跃跳变点
% 函数调用格式:[n,y]=exp1_dstep(-10,10,3); k=k1:-k0-1; kk=-k0:k2; n=length(k); nn=length(kk); u=zeros(1,n); uu=ones(1,nn); n=[k kk];y=[u uu]; stem(n,y,'filled')
title('单位阶跃序列')
实验要求:1)要求产生阶跃跳变点在X处的单位阶跃函数,其中X为自己的学号中最后两位;(2)要求画出图形
(8)单位矩形序列
function [n,y]=exp1_drectimpulse(k1,k2,k0,width,E)
%离散矩形脉冲信号,其中k1,k2分别为起始时间、终止时间,默认时间间隔为1 %E高度,width脉宽
% 函数调用格式:[n,y]=exp1_drectimpulse(-10,10,0,1,3); k=k1:k0-1;
kk=k0:width+k0; kkk=width+k0+1:k2 n=length(k); nn=length(kk); nnn=length(kkk); u=zeros(1,n); uu=E*ones(1,nn); uuu=zeros(1,nnn);
n=[kk k kkk];y=[uu u uuu]; stem(n,y,'filled')
7
title('单位矩形序列')
实验要求:1)要求产生矩形脉冲幅值为X,脉宽为2,脉冲中心点为X的矩形脉冲信号,其中X为自己的学号中最后两位;(2)要求画出图形
(9)指数序列
function exp1_dexp(c,a,k1,k2) %c: 指数序列的幅度 %a: 指数序列的底数
%k1: 绘制序列的起始序号 %k2: 绘制序列的终止序号 %c=1;a=2;k1=-2;k2=10; k=k1:k2; x=c*(a.^k); stem(k,x,'filled') hold on
plot([k1,k2],[0,0]) hold off
title('指数序列') xlabel('n') ylabel('f(n)')
(10)正弦序列
function exp1_dsin(A,w,k1,k2) %离散正弦信号,,其中k1,k2分别为起始时间、终止时间,默认时间间隔为1 %A,W为幅度和角频率参数
% 函数调用格式:exp1_dsin(5,0.25,-30,30); k=k1:k2;
stem(k,A*sin(k*w),'filled')
title('离散时间正弦序列f(n)=Asin(wn)') xlabel('n') ylabel('f(n)')
3 连续和离散信号的卷积表示方法 (1)连续时间信号卷积
function [f,k]=exp1_sconv(f1,f2,k1,k2,p) %计算连续信号卷积积分f(t)=f1(t)*f2(t) %f: 卷积积分f(t)对应的非零样值向量
8
%K: f(t)的对应时间向量 %f1: f1(t)的非零样值向量 %f2: f2(t)的非零样值向量
%K1: 序列f1(t)的对应时间向量 %K2: 序列f2(t)的对应时间向量 %p: 取样时间间隔 %调用格式:
% f1=0.5*(0:0.01:2);f2=0.5*(0:0.01:2);k1=0:0.01:2;k2=0:0.01:2;p=0.01; % [f,k]=exp1_sconv(f1,f2,k1,k2,p)
f=conv(f1,f2); %计算序列1与序列2的卷积和 f=f*p;
k0=k1(1)+k2(1); %计算序列f非零样值的起点位置 k3=length(f1)+length(f2)-2; %计算卷积和f非零样值得宽度 k=k0:p:k0+k3*p; %确定卷积和f非零样值的时间向量 subplot(3,1,1)
plot(k1,f1) %在子图1绘制f1(t)时域波形图; xlabel('t');ylabel('f1(t)');title('f1(t)') subplot(3,1,2)
plot(k2,f2); %在子图2绘制f2(t)时域波形图 xlabel('t');ylabel('f2(t)');title('f2(t)') subplot(3,1,3)
plot(k,f); %画卷积f(t)的时域波形 xlabel('t');ylabel('f(t)');title(' f(t)=f1(t)*f2(t)')
要求:教材P27, 已知f1(t)2eu(t),f2(t)u(t)u(t),求g(t)f1(t)*f2(t),并画图
t(2)离散时间信号卷积
function [f,k]=exp1_dconv(f1,f2,k1,k2) %The function of compute f=f1*f2
%f: 卷积和序列f(k)对应的非零样值向量 %k: 序列f(k)的对应序号向量 %f1: 序列f1(k)非零样值向量 %f2: 序列f2(k)非零样值向量 %k1: 序列f1(k)的对应序号向量 %k2: 序列f2(k)的对应序号向量 %调用例子:
%f1=[1,2,1];f2=ones(1,5);k1=[-1 0 1];k2=-2:2; %[f,k]=exp1_dconv(f1,f2,k1,k2)
9
f=conv(f1,f2) %计算序列f1与f2的卷积和f
k0=k1(1)+k2(1); %计算序列f非零样值的起点位置 k3=length(f1)+length(f2)-2; %计算卷积和f的非零样值的宽度 k=k0:k0+k3 %确定卷积和f非零样值得序号向量 subplot(3,1,1)
stem(k1,f1) %在子图1绘制序列f1(k)时域波形图 xlabel('n');ylabel('f1(n)') title('f1(n)') subplot(3,1,2)
stem(k2,f2) %在子图2绘制序列f2(k)时域波形图 xlabel('n');ylabel('f2(n)') title('f2(n)') subplot(3,1,3)
stem(k,f) %在子图3绘制序列f(k)时域波形图 xlabel('n');ylabel('f(n)')
title('f1(n)与f2(n)的卷积和f(n)')
要求:P42,已知f1(n)2u(n),f2(n)3u(n),求g(n)f1(n)*f2(n),并画图
四 实验要求:
1.按照实验指导书中的内容自己练习一遍;重新设置参数,例如:频率、周期、幅值、相位等,按实验指导书上的内容做一遍; 2.按照要求实现实验内容
3.熟悉MATLAB软件使用环境、启动及退出等;熟悉MATLAB软件的常用命令的使用; 4.实验预习报告和规范化地书写实验报告。
nn
10
因篇幅问题不能全部显示,请点此查看更多更全内容