实验内容
(1) f(t)=(2+e−t)u(t+1), (−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)');
|
仿真图

(2)$ f(t)=\cos (t) u(\sin (t)+0.3)$, (−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)');
|
仿真图

(3)离散信号 f[n]=(2−0.8n)u[n], 在自变量范围 (−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]');
|
仿真图

(4) 在多张子图上绘制以下信号 (提示, 使用 subplot 函数):
- f(t)=4sin(3t+2π), 自变量范围 (−5,5) ;
- 正弦序列 4∗sin(6πk), 自变量范围 (−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])
|
仿真图

(5) 在多张子图上绘制以下信号(提示, 使用 subplot 函数)
-
近似的冲激信号 δ(t) :
-
方波信号, 要求 x<0 时幅度为 ±1, 周期为 2 , 占空比为 30%;x≥0 时 周期为 1 , 占空比为 60% 。自变量取值范围 (−5,5) 。提示: 可采用 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('方波信号');
|
仿真图

(6) 已知信号 f1=u(t+3.5)−u(t−3.5),f2=tcos(πt) 。
-
在同一张图上绘制 f1(t)+f2(t) 和 f1(t)×f2(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)')
|
仿真图

-
在多张子图上绘制 f1(t)×f2(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)的微分结果');
|
仿真图
(7) 已知信号 f(t)=t×[u(t)−u(t−1)], 在多张子图上绘制 f(t−1),f(t+2), f(0.5t),f(2t) (使用 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)');
|
仿真图

思考题
-
什么是单位冲激信号?能够用 MATLAB 产生单位冲激信号吗?
单位冲激信号指t=0时,信号量恒为0,在t=0时信号量为无穷大,但是信号在时间上的积分为1.MATLAB不能产生真正的冲激信号,因为这是一种理想化模型,但是可以采用微积分思想模拟近似产生单位冲激信号.
-
MATLAB 中如何编写自定义函数?模块化有什么优缺点?
将自定义函数封装为另一个.m文件放在同一目录中,直接调用即可。
模块化的优点是代码可维护性高、减少代码冗余提高开发效率、代码架构清晰一目了然。
模块化的缺点是损耗性能,系统分层调用链长;不方便传递,需要装特定依赖。
-
diff 函数的功能是求数组元素之间的差分,如何用 diff 函数求连续函数的微分?
diff(f)将f视为函数值在某些域x上计算的向量,当把域x分到足够细就可以求微分了
实验收获与感想
通过本次实验我有如下一些收获:
- 熟悉了MATLAB的基本使用,学会了使用其产生基本信号与进行运算
- 进一步加深了对微积分思想的理解,学会利用MATLAB来模拟计算一些理想化模型
- 对于不同的信号借以MATLAB的辅助分析认识的更加清晰
此外,预习手册中有不少内容没有出现在实验中,但也应该理解并加以应用。尽管本实验只是对MATLAB的简单使用,但足以让我感受到MATLAB这一工具对于信号分析的巨大帮助,之后要勤加练习熟练使用来深化对于信号与系统的学习。
同时也感谢教学团队制作的详细的预习手册,对于自学来讲有很大的帮助。