admin 管理员组文章数量: 1086019
2024年3月27日发(作者:服务态度好的运维数据库)
MATLAB程序设计语言
实
验
报
告
专业及班级 ___________________
姓 名 ___________________
学 号 ___________________
日 期 ___________________
实验一 MATLAB的基本使用
一、 实验目的
1.了解MATALB程序设计语言的基本特点,熟悉MATLAB软件的运行环境;
2.掌握变量、函数等有关概念,掌握M文件的创建、保存、打开的方法,初步具备将
一般数学问题转化为对应计算机模型处理的能力;
3.掌握二维图形绘制的方法,并能用这些方法实现计算结果的可视化。
二、 MATLAB的基础知识
通过本课程的学习,应基本掌握以下的基础知识:
一. MATLAB简介
二. MATLAB的启动和退出
三. MATLAB使用界面简介
四. 帮助信息的获取
五. MATLAB的数值计算功能
六. 程序流程控制
七. M文件
八. 函数文件
九. MATLAB的可视化
三、上机练习
1. 仔细预习第二部分内容,关于MATLAB的基础知识。
2. 熟悉MATLAB环境,将第二部分所有的例子在计算机上练习一遍
123
987
3、已知矩阵
A456,B654
。求A*B,A .* B,比较二者结
789
321
果是否相同。并利用MATLAB的内部函数求矩阵A的大小、元素和、长度以及最大
值。
解
:
>> A=[1 2 3;4 5 6;7 8 9];
>> B=[9 8 7;6 5 4;3 2 1];
>> A*B
ans =
30 24 18
84 69 54
138 114 90
>> A.*B
ans =
9 16 21
24 25 24
21 16 9 两者结果不同
>> [m,n]=size(A)
m =
3
n =
3
>> b=sum(A)
b =
12 15 18
>> a=length(A)
a =
3
>>max(A)
ans =
7 8 9
4、Fibonacci数组的元素满足Fibonacci规则:
a
k2
1) 在命令窗口中完成;
2) 利用M文件完成;
3) 自己定义一个函数文件,并在命令窗口中调用该函数完成。
a
k
a
k1
,(k
1,2,
)
;且
a
1
a
2
1
。现要求该数组中第一个大于10000的元素。
解
>> a1=1;
>> a2=1;
>> b=0;
>> while b<10000
b=a1+a2;
a1=a2;
a2=b;
end
>> b
b =
10946
5.在同一个图形窗口的两个子窗口中分别画出
cos(
虚线)和
cos(x)
x)
(红色、
48
(蓝色、星号)的波形。要求有标题,x、y轴有标注。
解:
>> x=-10:0.1:10;
y1=cos((pi/4)*x);
subplot(2,2,1),plot(x,y1,'r:')
xlabel('x1')
ylabel('y1=cos((pi/4)*x)')
title('余弦函数')
>> x=-10:0.1:10;
y2=cos((pi/8)*x);
subplot(2,2,2),plot(x,y1,'b-.p')
xlabel('x2')
ylabel('y2=cos((pi/8)*x)')
title('余弦函数')
图形:
四、
1、
2、
3、
五、
简述本次实验的体会和建议。
思考题
在语句末加分号“;”和不加分号有什么区别?
M文件和函数文件有什么异同之处?
矩阵乘(*)和数组乘(.*)有何不同?
实验二 信号的表示及可视化
一、实验目的
1. 掌握连续信号的MATLAB表示方法(表达式及图形描述);
2. 掌握离散序列的MATLAB表示方法(表达式及图形描述);
二、实验原理
在MATLAB中通常用两种方法来表示信号,一种是向量表示信号,另一种则是用符号
运算的方法来表示信号。用适当的MATLAB语句表示出信号后,我们就可以利用MATLAB
的绘图命令绘出直观的信号波形。
(一.) 连续时间信号的表示及可视化
1. 向量表示法:对于连续时间信号f(t),我们可以用两个行向量f和t来表示,其中t
向量是形如t=t
1
:p:t
2
的MATLAB命令定义的时间范围向量,t
1
为信号起始时间,t
2
为终止时
间,p为时间间隔。向量f为连续信号f(t)在向量t所定义的时间点上的样值。
2. 符号运算表示法:如果信号可以用一个符号表达式来表示它,则我们可用ezplot命
令绘制出信号的波形。
3.常用连续信号的表示
1)单位阶跃信号
单位阶跃信号的定义为:
(t)
1t0
0t0
一种得到单位阶跃信号的方法是在MATLAB的Symbolic Math Toolbox中调用单位阶跃
函数Heaviside,这样可方便地表示出单位阶跃信号。但是,在用函数 ezplot实现其可视化
时,就出现一个问题:函数ezplot只能画出既存在于Symbolic Math工具箱中,又存在于总
MATLAB工具箱中的函数,而Heaviside函数仅存在Symbolic Math Toolbox中,因此,就
需要在自己的工作目录work下创建Heaviside的M文件,该文件如下:
function f=Heaviside(t)
f=(t>0); %t>0时f为1,否则为0
正确定义出该函数并保存运行后,就可调用该函数了。
(二.) 离散时间信号的表示及可视化
1.一般离散信号的表示:一般说来,离散时间信号用f(k)表示,其中变量k为整数,
代表离散的采样时间点。在MATLAB中,用一个向量f即可表示一个有限长度的序列。但
是,这样的向量并没有包含其对应的时间序号信息。所以,要完整地表示离散信号需要用两
个向量。
2.典型离散序列的表示
1)单位序列δ(k)
单位序列的定义为
(k)
1k0
0k0
function dwxulie(k1,k2,k0)
k=k1:k2;
n=length(k)
f=zeros(1,n)
f(1,-k0-k1+1)=1 %在k0时刻,信号赋值为1
stem(k,f,'filled')
axis([k1,k2,0,1.5])
title('单位序列δ(k)')
2)单位阶跃序列
单位阶跃序列
(k)
1k0
0k0
与单位序列类似,下面给出绘制单位阶跃序列ε(k+k
0
)的MATLAB子程序:
function jyxulie(k1,k2,k0)
k=k1:-k0-1;
kk=-k0:k2;
n=length(k);
nn=length(kk);
u=zeros(1,n); %k0前信号赋值为零
uu=ones(1,nn); %k0后信号赋值为一
stem(kk,uu,'filled')
hold on
stem(k,u,'filled')
hold off
axis([k1,k2,0,1.5])
title('单位阶跃序列')
三.上机练习
1.认真预习实验原理的内容,将所有例题在计算机上练习一遍。
2. 用MATLAB命令绘制单边指数信号e
-1.5 t
ε(t)在时间0 在(3.1,0.05)处标注’t’,利用axis调整坐标轴在一个合适的范围,便于观察波形。 头文件:function f=Heaviside(t) f=(t>0); 调用: >> y=sym('exp(-1.5*t)*Heaviside(t)');ezplot(y) >> text(3.1,exp(-1.5*3.1)*Heaviside(3.1),'leftarrowexp(-1.5*t)*Heaviside(t)=0.05') >> axis([0 5 -1 1]) 3. 绘制δ(t-2),-1 头文件: function chongji(t1,t2,t0) dt=0.01; t=t1:dt:t2; n=length(t); x=zeros(1,n); x(1,(-t0-t1)/dt+1)=1/dt; stairs(t,x); axis([t1,t2,0,1.2/dt]) title('单位冲激信号') 调用: chongji(-1,5,-2) 4. 绘制ε(k-3),-1≤k≤5及ε(k+1),-5≤k≤2。 头文件 function jyxulie(k1,k2,k0) k=k1:-k0-1; kk=-k0:k2; n=length(k); nn=length(kk); u=zeros(1,n); %k0前信号赋值为零 uu=ones(1,nn); %k0后信号赋值为一 stem(kk,uu,'filled') hold on stem(k,u,'filled') hold off axis([k1,k2,0,1.5]) title('单位阶跃序列') 调用 jyxulie(-1,5,-3) jyxulie(-5,2,1) 5. 考虑下面3个信号: f1(n)=cos(2πn/N)+2cos(3πn/N) f2(n)=2cos(2n/N)+2cos(3n/N) f3(n)=cos(2πn/N)+3cos(5πn/N) 假设对每个信号N=6。试确定上述信号是否是周期的。如果是,则确定信号的周期,并 画图表示出该信号的两个周期;如果不是周期的,在[0,4N]的范围内画出该信号,并说明 原因。 答:f1(n)=cos(2πn/N)+2cos(3πn/N)是周期的。周期为12 代码 >> n=0:24; >> subplot(2,2,1) >> stem(n,cos(n*2*pi/6)+2*cos(n*3*pi/6),'filled') f2(n)=2cos(2n/N)+2cos(3n/N) 非周期序列 f3(n)=cos(2πn/N)+3cos(5πn/N)周期序列 周期为60 代码 >> n=0:24; >> subplot(2,1,1) >> stem(n,2*cos(n*2/6)+2*cos(n*3/6),'filled') >> title('2*cos(n*2/6)+2*cos(n*3/6)') >> n=0:120; >> subplot(2,1,2) >> stem(n,cos(n*2*pi/6)+3*cos(pi*n*5/6),'filled') >> title('cos(n*2*pi/6)+3*cos(pi*n*5/6)') 四、思考题 1. 观察例2-1的执行结果,当把时间间隔p取得更小(例如为0.02)时,观察执行结 果,比较两结果用何不同,为什么? 2、例2-3中的hold on和hole off命令的作用是什么? 五、简述本次实验的体会和建议 实验三 信号的时域运算、时域变换及MATLAB实现 一、实验目的 1、 掌握信号时域运算的MATLAB实现方法。 2、 掌握信号时域变换的MATLAB实现方法 二、实验原理 信号的时域运算包括信号的相加、相乘,信号的时域变换包括信号的平移、反折、倒相 及信号的尺度变换 (一). 连续信号的时域运算与时域变换 如前所述,MATLAB可以有两种方法来表示连续信号。用这两种方法均可实现连续信 号的时域运算和变换,但用符号运算的方法则较为简便。 1. 相加 s=symadd(f1,f2)或s=f1+f2 ezplot(s) 2. 相乘 w=symmul(f1,f2)或w=f1*f2 ezplot(w) 3. 移位 y=subs(f,t,t-t0); ezplot(y) 4.反折 y=subs(f,t,-t); ezplot(y) 5. 尺度变换 y=subs(f,t,a*t); ezplot(y) 对于以上的命令,可在画图命令之后加入坐标轴的调整axis等命令,以使画出的图形 更清晰、直观。 (二.) 离散序列的时域运算及时域变化 对于离散序列来说,序列相加、相乘是将两序列对应时间序号的值逐项相加或相乘,平 移、反折及倒相变化与连续信号的定义完全相同,这里就不再赘述。但需要注意,与连续信 号不同的是,在MATLAB中,离散序列的时域运算和变换不能用符号运算来实现,而必须 用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相 乘,因而参加运算的两序列向量必须具有相同的维数。 1. 离散序列相加及其结果可视化的实现 在该函数中,将要进行相加运算的二序列向量通过补零的方式成为同维数的二序列向 量,因而在调用该函数时,要进行相加运算的二序列向量维数可以不同: function[f,k]=lsxj(f1,f2,k1,k2) %实现f(k)=f1(k)+f2(k), f1、f2、k1、k2是参加运算的二离散序列及其对应的时间序 列向量,f和k为返回的和序列及其的时间序列向量 k=min(min(k1),min(k2)):max(max(k1),max(k2)); %构造和序列的长度 s1=zeros(1,length(k));s2=s1; %初始化新向量 s1(find((k>=min(k1))&(k<=max(k1))==1))=f1; %将f1中在和序列范围内但又无 定义的点赋值为零 s2(find((k>=min(k2))&(k<=max(k2))==1))=f2; %将f2中在和序列范围内但又无 定义的点赋值为零 f=s1+s2; %两长度相等序列求和 stem(k,f,’filled’) axis([(min(min(k1),min(k2))-1),(max(max(k1),max(k2))+1),(min(f)-0.5),(max(f)+0.5)]) %坐标轴显示范围 三、上机练习 1、将实验原理中提到的例子在计算机上全部练习一遍; 1 4 (t1)4t0 2、已知信号 f(t) 10t2 ,画出 f(t)及f(2t4) 的波形; 0其它 解; 3. 已知两个连续信号 信号的波形: 1) f 3 (t) 3) 解; f 1 (t)t,0t1,f 2 (t)sin(2 t) ,用MATLAB绘出下列 f 1 (t)f 1 (t) 2) f 4 (t)[f 1 (t)f 1 (t)] f 5 (t)f 2 (t)f 3 (t) 4) f 6 (t)f 1 (t)f 2 (t) 4、离散序列 f(k){ ,0,1,2, 3 ,3,3,3,0, } ,用MATLAB绘出下列序列的波形。 1) 3) 解:(1) f(k2) (k) 2) f(k) f(k2) 4) f(k2) (k2) (2) (3) (4) 四、思考题 在对信号进行平移、反折和尺度变换时,运算顺序对结果是否有影响?在运算中应该 注意什么? 五、简述本次实验的体会和建议。 实验四 离散序列卷积和的MATLAB实现 一、实验目的 1. 掌握卷积和的计算机编程方法,利用MATLAB实现两个离散序列的卷积和; 2. 利用卷积和求离散系统的响应,观察、分析系统的时域特性。 二、实验原理 两个离散序列卷积和的定义为 f(k)f 1 (k)*f 2 (k) i f(i)f 1 2 (ki) (4.1) 定义式可以看作是:将序列 f 2 (i) 的时间轴反并将其移位 k 个样本,然后将移位后的 f 2 (ki) 乘以 f 1 (i) 并在 i 上将所得到的乘积序列相加。这种说法直接来自离散时间系统的 线性和时不变性质。信号 f 1 (k) 可以看成是由延时和加权脉冲的线性叠加所构成,因为一 个LTI系统能够用它对单个脉冲的响应来表示,那么一个LTI系统的输出就应该相对于系统 对构成 f 1 (k) 的每一个延时和加权脉冲的叠加。在数学上,这个结果就是卷积和。 f(k) 在离散信号与系统的分析过程中,我们有两个与卷积和相关的重要结论,这就是: 1) i f(i) (ki)f(k)* (k) ,即离散序列可分解为一系列幅 度由 f(k) 决定的单位序列 (k) 及其移位序列之和。 2)对线性时不变系统,设其输入序列为 f(k) ,单位响应为 h(k) ,其零状态响应为 y(k) ,则有: y(k) i f(i)h(ki)f(k)*h(k) 可见,离散序列卷积和的计算对进行离散信号与系统的分析具有非常重要的意义。 f 1 (k) 在区间 n 1 ~ n 2 非零, f 2 (k) 在区间 m 1 ~ m 2 非零,则 f 1 (k) 的时域宽 度为 L 1 n 2 n 1 1 , f 2 (k) 的时域宽度为 L 2 m 2 m 1 1 。由卷积和的定义可得, 序列 f(k)f 1 (k)*f 2 (k) 的时域宽度为 LL 1 L 2 1 ,且只在区间( n 1 + m 1 ) ~ n 1 + m 1 +( L 1 L 2 )- 2非零。因此,对于 f 1 (k) 和均为有限期间非零的情况,我们只 需要计算序列 f(k) 在区间( n 1 + m 1 )~ n 1 + m 1 +( L 1 L 2 )- 2的序列值,便可以表征 整个序列 f(k) 。 设序列 MATLAB的conv( )函数可以帮助我们快速求出两个离散序列的卷积和。conv( ) 函数的调用格式为: f=conv (f1,f2 ) f 1 (k) 的非零样值点的行向量, f2 为包含序列 f 2 (k) 的非零样值 点的行向量,向量f则返回序列 f(k)f 1 (k)*f 2 (k) 的所有非零样值点行向量。 其中 f1 为包含序列 f(k)f 1 (k)*f 2 (k) 的实用函数 dconv()程序,该程序在计算出卷积和 f(k) 的同时,还绘出序列 f 1 (k) 、 f 2 (k) 及 f(k) 的时域波形图,并返回 f(k) 的非零样值点的对应向量。 下面是利用MATLAB计算两离散序列卷积和 function [f,k]=dconv(f1,f2,k1,k2) %The function of computef=f1*f2 %f 卷积和序列f(k)对应的非零样值向量 %k 序列f(k)的对应序号向量 %f1 序列f1(k)非零样值向量 %f2 序列f2(k)非零样值向量 %k1 序列f1(k)的对应序号向量 %k2 序列f2(k)的对应序号向量 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(2,2,1); stem(k1,f1) %在子图1绘序列f1(k)的波形 title('f1(k)') xlabel('k') ylabel('f1(k)') subplot(2,2,2); stem(k2,f2) %在子图2绘序列f2(k)的波形 title('f1(k)') xlabel('k') ylabel('f2(k)') subplot(2,2,3); stem(k,f); %在子图3绘序列f(k)的波形 title('f1(k)与f2(k)的卷积和f(k)') xlabel('k') ylabel('f(k)') h=get(gca,'position'); h(3)=2.5*h(3); set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的2.5倍 三、上机练习 1、将实验原理中提到的例子在计算机上全部练习一遍。 2.己知某LTI离散系统,其单位响应h(k)=ε(k)-ε(k-4),求该系统在激励为f(k)= ε(k)- ε(k-3)时的零状态响应y(k),并绘出其时域波形图。 M函数 ① function [f,k]=dconv(f1,f2,k1,k2) %The function of computef=f1*f2 %f 卷积和序列f(k)对应的非零样值向量 %k 序列f(k)的对应序号向量 %f1 序列f1(k)非零样值向量 %f2 序列f2(k)非零样值向量 %k1 序列f1(k)的对应序号向量 %k2 序列f2(k)的对应序号向量 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(2,2,1); stem(k1,f1) %在子图1绘序列f1(k)的波形 title('f1(k)') xlabel('k') ylabel('f1(k)') subplot(2,2,2); stem(k2,f2) %在子图2绘序列f2(k)的波形 title('f1(k)') xlabel('k') ylabel('f2(k)') subplot(2,2,3); stem(k,f); %在子图3绘序列f(k)的波形 title('f1(k)与f2(k)的卷积和f(k)') xlabel('k') ylabel('f(k)') h=get(gca,'position'); h(3)=2.5*h(3); set(gca,'position',h) %将第三个子图的横坐标范围扩为原来的2.5倍 调用 >> h=[1,1,1,1,0]; >> k1=[0,1,2,3,4]; >> f=[1,1,1,0]; >> k2=[0,1,2,3]; >> [f,k]=dconv(h,f,k1,k2) 3.如果上题h(k)=ε(k),重作上题。(提示:时间序列无限长时,必须将其进行截断, 如只保留100个样值点) >> h=ones(1,50); >> f=[1,1,1,0]; >> f=conv(h,f) >> plot(f) 实验五 周期信号傅里叶级数 一、实验目的 1.用MATLAB实现周期信号傅里叶级数分解与综合。 2.利用MATLAB对周期信号进行频谱分析。 二、 实验原理 任何满足狄里赫里条件的周期信号,都可以表示成三角形式或指数形式的傅里叶级数 展开式。 f(t) (5.1) n Fe n jnt a 0 a n cos(nt) b n sin(nt) 2 nn a n (5.2) 2 2 f(t)cos(nt)dt,bf(t)sin(nt)dt n TT 一般来说,傅里叶级数有无限个非零值,即任何具有有限个间断点的周期信号都一定有 一个无限非零系数的傅里叶级数表示。但对数值计算来说,这是无法实现的。在实际应用中, 我们可以用有限项的傅里叶级数求和来逼近。即对有限项和: f(t) (5.3) nN Fe n N jnt N a 0 N a n cos(nt) b n sin(nt) 2 n1n1 当N值取得较大时,上式就是原周期信号 f(t) 的一个很好的近似。上式常称作截断傅里叶 级数表示。 三、上机练习 1、将例5-1在计算机上练习一遍,观察运行结果是否正确; 解; function [A_sym,B_sym]=CTFShchsym syms t n k x T=5;tao=0.2*T;a=0.5; if nargin<4;Nf=6;end if nargin<5;Nn=32;end x=time_fun_x(t); A0=2*int(x,t,-a,T-a)/T; As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a); Bs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a); A_sym(1)=double(vpa(A0,Nn)); for k=1:Nf A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); end if nargout==0 c=A_sym;disp(c) d=B_sym;disp(d) t=-8*a:0.01:T-a; f1=0.4/2+0.3742.*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5); f2=0.3027.*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5); f3=0.2018.*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5); f4=0.0935.*cos(2*pi*4*t/5)+0.*sin(2*pi*4*t/5); f5=-0.0624.*cos(2*pi*6*t/5)+0.*sin(2*pi*6*t/5); f6=f1+f2; f7=f6+f3; f8=f7+f4+f5; subplot(2,2,1) plot(t,f1),hold on y=time_fun_e(t) plot(t,y,'r:') title('周期矩形波的形成—基波') axis([-4,4.5,-0.5,1.3]) subplot(2,2,2) plot(t,f6),hold on y=time_fun_e(t) plot(t,y,'r:') title('周期矩形波的形成—基波+2次谐波') axis([-4,4.5,-0.5,1.3]) subplot(2,2,3) plot(t,f7),hold on y=time_fun_e(t) plot(t,y,'r:') title('基波+2次谐波+3次谐波') axis([-4,4.5,-0.5,1.3]) subplot(2,2,4) plot(t,f8),hold on y=time_fun_e(t) plot(t,y,'r:') title('基波+2次谐波+3次谐波+4次谐波+6次谐波') axis([-4,4.5,-0.5,1.3]) end function x=time_fun_x(t) h=1; x1=sym('Heaviside(t+0.5)')*h; x=x1-sym('Heaviside(t-0.5)')*h; function y=time_fun_e(t) a=0.5;T=5;h=1;tao=0.2*T;t=-8*a:0.01:T-a; e1=1/2+1/2.*sign(t+tao/2); e2=1/2+1/2.*sign(t-tao/2); y=h.*(e1-e2); 2、 修改例5-1,将周期信号分解为前10次谐波的叠加,观察运行结果,能得出什么结论? 解: function [A_sym,B_sym]=CTFShchsym1 syms t n k x T=5;tao=0.2*T;a=0.5; if nargin<4;Nf=9;end if nargin<5;Nn=32;end x=time_fun_x(t); A0=2*int(x,t,-a,T-a)/T; As=int(2*x*cos(2*pi*n*t/T)/T,t,-a,T-a); Bs=int(2*x*sin(2*pi*n*t/T)/T,t,-a,T-a); A_sym(1)=double(vpa(A0,Nn)); for k=1:Nf A_sym(k+1)=double(vpa(subs(As,n,k),Nn)); B_sym(k+1)=double(vpa(subs(Bs,n,k),Nn)); end if nargout==0 c=A_sym;disp(c) d=B_sym;disp(d) t=-8*a:0.01:T-a; f1=0.4/2+0.3742.*cos(2*pi*1*t/5)+0.*sin(2*pi*1*t/5); f2=0.3027.*cos(2*pi*2*t/5)+0.*sin(2*pi*2*t/5); f3=0.2018.*cos(2*pi*3*t/5)+0.*sin(2*pi*3*t/5); f4=0.0935.*cos(2*pi*4*t/5)+0.*sin(2*pi*4*t/5); f5=-0.0624.*cos(2*pi*6*t/5)+0.*sin(2*pi*6*t/5); f6=-0.0865.*cos(2*pi*7*t/5)+0.*sin(2*pi*7*t/5); f7=-0.0757.*cos(2*pi*8*t/5)+0.*sin(2*pi*8*t/5); f8=- 0.0416*cos(2*pi*9*t/5)+0.*sin(2*pi*9*t/5); f9=f1+f2; f10=f9+f3; f11=f10+f4+f5; f12=f11+f6; f13=f12+f7+f8; subplot(2,3,1) plot(t,f1),hold on y=time_fun_e(t) plot(t,y,'r:') title('周期矩形波的形成—基波') axis([-4,4.5,-0.5,1.3]) subplot(2,3,2) plot(t,f9),hold on y=time_fun_e(t) plot(t,y,'r:') title('周期矩形波的形成—基波+2次谐波') axis([-4,4.5,-0.5,1.3]) subplot(2,3,3) plot(t,f10),hold on y=time_fun_e(t) plot(t,y,'r:') title('基波+2次谐波+3次谐波') axis([-4,4.5,-0.5,1.3]) subplot(2,3,4) plot(t,f11),hold on y=time_fun_e(t) plot(t,y,'r:') title('基波+2次谐波+3次谐波+4次谐波+6次谐波') axis([-4,4.5,-0.5,1.3]) subplot(2,3,5) plot(t,f12),hold on y=time_fun_e(t) plot(t,y,'r:') title('基波+2次谐波+3次谐波+4次谐波+6次谐波+7次谐波') axis([-4,4.5,-0.5,1.3]) subplot(2,3,6) plot(t,f13),hold on y=time_fun_e(t) plot(t,y,'r:') title('基波+2次谐波+3次谐波+4次谐波+6次谐波+7次谐波+8次谐波+9次谐波') axis([-4,4.5,-0.5,1.3]) end function x=time_fun_x(t) h=1; x1=sym('Heaviside(t+0.5)')*h; x=x1-sym('Heaviside(t-0.5)')*h; function y=time_fun_e(t) a=0.5;T=5;h=1;tao=0.2*T;t=-8*a:0.01:T-a; e1=1/2+1/2.*sign(t+tao/2); e2=1/2+1/2.*sign(t-tao/2); y=h.*(e1-e2); 3、观察例5-1运行结果中脉冲宽度与频谱的关系 解:由图可见,由于周期相同,因而相邻谱线的间隔相同,脉冲跨度越窄,其频谱包络线第一个零点的频率越高, 即信号带宽越宽,频带内所含的分量越多。信号的频带宽度与脉冲宽度成反比。 4、观察例5-1运行结果中周期与频谱的关系 解:频谱包络线的零点所在位置不变,而当周期增长时,相邻谱线的间隔减小,频谱变密。如果周期无线增长, 相邻谱线的间隔将趋于零,周期信号的离散频谱就过渡为非周期信号的连续频谱。
版权声明:本文标题:matlab实验报告 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1711515489a597862.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论