实验内容

(1) f(t)=(2+et)u(t+1)f(t)=\left(2+e^{-t}\right) u(t+1), (2,4)(-2,4)

代码

引入预习手册中的Heaviside函数,直接编写函数即可

clear
t= -2:0.001:4;
k=1;a=-1;
f=(2+k*exp(a*t)).*Heaviside(t+1);
plot(t,f);
grid;xlabel('t');ylabel('f(t)');
title('f(t)=(2+e^-t)u(t+1)');

仿真图

1-1

(2)$ f(t)=\cos (t) u(\sin (t)+0.3)$, (10,10)(-10,10)

代码

clear
t= -10:0.001:10;
f=cos(t).*Heaviside(sin(t)+0.3);
plot(t,f);
grid;xlabel('t');ylabel('f(t)');
title('f(t)=cos(t)u(sin(t)+0.3)');

仿真图

1-2

(3)离散信号 f[n]=(20.8n)u[n]f[n]=(2-0.8 n) u[n], 在自变量范围 (2,4)(-2,4) 内绘图

代码

离散信号要用更改为生成阶跃序列的函数jyxl(),并使用stem绘制

clear
n= -2:1:4;
f=(2-0.8*n).*jyxl(n);
stem(n,f);
grid;xlabel('n');ylabel('f[n]');
title('f[n] = (2 - 0.8n)u[n]');

仿真图

1-3

(4) 在多张子图上绘制以下信号 (提示, 使用 subplot 函数):

  • f(t)=4sin(3t+π2)f(t)=4 \sin \left(3 t+\frac{\pi}{2}\right), 自变量范围 (5,5)(-5,5)
  • 正弦序列 4sin(π6k)4^* \sin \left(\frac{\pi}{6} k\right), 自变量范围 (15,15)(-15,15)

代码

clear
t= -5:0.001:5;
f=4*sin(3*t+pi/2);
subplot(2,1,1);
plot(t,f);
axis([-15, 15,-4,4])
grid;xlabel('t');ylabel('f(t)');
title('f(t)= 4sin(3t+pi/2)');

k= -15:0.001:15;
f=4*sin(pi/6*k);
subplot(2,1,2);
plot(k,f);
grid;xlabel('k');ylabel('f(k)');
title('f(k)= 4sin(pi*k/6)');
axis([-15, 15,-4,4])

仿真图

1-4

(5) 在多张子图上绘制以下信号(提示, 使用 subplot 函数)

  • 近似的冲激信号 δ(t)\delta(t)

  • 方波信号, 要求 x<0x<0 时幅度为 ±1\pm 1, 周期为 2 , 占空比为 30%;x030 \% ; x \geq 0 时 周期为 1 , 占空比为 60%60 \% 。自变量取值范围 (5,5)(-5,5) 。提示: 可采用 u(t)u(t) 函数辅助做出该信号。

代码

t0=-5;tf=5;dt=0.001;t1=0; 
t=[t0:dt:tf];st=length(t);
n1=floor((t1-t0)/dt);
x1=zeros(1,st);x1(n1)=1/dt;
subplot(2,1,1);
stairs(t,x1);
grid minor;axis([-5,5,-1,20]);title('近似的冲激信号');

x=-5:0.001:5;
f=square(pi*x,30).*Heaviside(-x)+square(2*pi*x,60).*Heaviside(x);
subplot(2,1,2);
plot(x, f);
grid minor;xlabel('t');ylabel('f(t)');
title('方波信号');

仿真图

1-5

(6) 已知信号 f1=u(t+3.5)u(t3.5),f2=tcos(πt)f_1=u(t+3.5)-u(t-3.5), f_2=t \cos (\pi t)

  • 在同一张图上绘制 f1(t)+f2(t)f_1(t)+f_2(t)f1(t)×f2(t)f_1(t) \times f_2(t) 的波形 (使用 hold on 语句);

    代码

    t= -10:0.001:10;
    f1=Heaviside(t+3.5)-Heaviside(t-3.5);
    f2=t.*cos(pi*t);
    plot(t,f1+f2);
    hold on
    grid on;
    plot(t, f1.*f2);
    xlabel('t')
    legend('f1(t)+f2(t)','f1(t)*f2(t)')

    仿真图

    1-6-1

  • 在多张子图上绘制 f1(t)×f2(t)f_1(t) \times f_2(t) 的积分与微分结果 (使用 subplot 函数, 推 存使用 integral 函数而不是 quad 函数进行积分)。

    写这个的时候有些波折,一开始没有搞清楚integral的用法,经过一番努力搞清楚它需要接收一个句柄函数,然后返回数值积分(double型),这样就可以用它来模拟计算变上限积分(这样做可能有一些冗余,应该是有能够直接求积分的函数?暂时没有查到),其次是可以优化代码为将6—9行封装为一个脚本直接调用

    微分计算可以使用 diff 函数和语法 Y = diff(f)/h 求偏导数近似值,需要注意的是plot(x,y)函数中x与y的需要对应,第一个参数应变更为t(1:length(t)-1)

    代码

    t= -10:0.001:10;
    f1=Heaviside(t+3.5)-Heaviside(t-3.5);
    f2=t.*cos(pi*t);
    y=f1.*f2;

    g=@(t)( t.*cos(pi*t).*(((t+3.5)>=0)-((t-3.5)>=0)));
    for x=1:length(t)
    F(x)= integral(g,-10,t(x));
    end

    subplot(2,1,1);
    plot(t,F);
    grid on;xlabel('t');ylabel('F(t)');
    title('f1(t)*f2(t)的积分结果');

    subplot(2,1,2);
    plot(t(1:length(t)-1),diff(y)*1/dt);
    grid on;xlabel('t');ylabel('h(t)');
    title('f1(t)*f2(t)的微分结果');

    仿真图1-6-2

(7) 已知信号 f(t)=t×[u(t)u(t1)]f(t)=t \times[u(t)-u(t-1)], 在多张子图上绘制 f(t1),f(t+2)f(t-1), f(t+2), f(0.5t),f(2t)f(0.5 t), f(2 t) (使用 subplot 函数)。

代码

本题要求实现信号的尺度变换,按要求改变自变量即可

t=-5:0.01:5;
f2=(t+2).*(Heaviside(t+2)-Heaviside(t-1+2));
subplot(2,2,1);
plot(t, f2);
grid on;xlabel('t');ylabel('f(t+2)');axis([-3, 3 ,0, 1]);
title('f(t+2)');

f1=(t-1).*(Heaviside(t-1)-Heaviside(t-2));
subplot(2,2,2);
plot(t, f1);
grid on;xlabel('t');ylabel('f(t-1)');axis([-3, 3 ,0, 1]);
title('f(t-1)');

f3=0.5*t.*(Heaviside(0.5*t)-Heaviside(0.5*t-1));
subplot(2,2,3);
plot(t, f3);
grid on;xlabel('t');ylabel('f(0.5t)');axis([-3, 3 ,0, 1]);
title('f(0.5t)');

f4=2*t.*(Heaviside(2*t)-Heaviside(2*t-1));
subplot(2,2,4);
plot(t, f4);
grid on;xlabel('t');ylabel('f(2t)');axis([-3, 3 ,0, 1]);
title('f(2t)');

仿真图

1-7

思考题

  • 什么是单位冲激信号?能够用 MATLAB 产生单位冲激信号吗?

    单位冲激信号指t0t\neq 0时,信号量恒为0,在t=0t=0时信号量为无穷大,但是信号在时间上的积分为1.MATLAB不能产生真正的冲激信号,因为这是一种理想化模型,但是可以采用微积分思想模拟近似产生单位冲激信号.

  • MATLAB 中如何编写自定义函数?模块化有什么优缺点?

    将自定义函数封装为另一个.m文件放在同一目录中,直接调用即可。

    模块化的优点是代码可维护性高、减少代码冗余提高开发效率、代码架构清晰一目了然。

    模块化的缺点是损耗性能,系统分层调用链长;不方便传递,需要装特定依赖。

  • diff 函数的功能是求数组元素之间的差分,如何用 diff 函数求连续函数的微分?

    diff(f)将f视为函数值在某些域x上计算的向量,当把域x分到足够细就可以求微分了

实验收获与感想

通过本次实验我有如下一些收获:

  • 熟悉了MATLAB的基本使用,学会了使用其产生基本信号与进行运算
  • 进一步加深了对微积分思想的理解,学会利用MATLAB来模拟计算一些理想化模型
  • 对于不同的信号借以MATLAB的辅助分析认识的更加清晰

此外,预习手册中有不少内容没有出现在实验中,但也应该理解并加以应用。尽管本实验只是对MATLAB的简单使用,但足以让我感受到MATLAB这一工具对于信号分析的巨大帮助,之后要勤加练习熟练使用来深化对于信号与系统的学习。

同时也感谢教学团队制作的详细的预习手册,对于自学来讲有很大的帮助。