一、实验目的
1.掌握MATLAB语言的基本操作,学习基本的编程功能;
2.掌握MATLAB产生常用连续时间信号的编程方法;
3.学会用MATLAB进行信号基本运算的方法,了解信号运算对信号所起的作用。
二、实验仪器
装有MATLAB软件的微型计算机1台
三、实验原理
从严格意义上讲,MATLAB数值计算的方法并不能处理连续时间信号。然而,可用连续信号在等时间间隔点的取样值来近似表示连续信号,即当取样时间间隔足够小时,这些离散样值能够被MATLAB处理,并且能较好地近似表示连续信号。
MATLAB提供了大量生成基本信号的函数。比如常用的指数信号、正余弦信号等都是MATLAB的内部函数。为了表示连续时间信号,需定义某一时间或自变量的范围和取样时间间隔,然后调用该函数计算这些点的函数值,最后画出其波形图。
(1) 实指数信号:f(t)=Keat,式中K,a为实数。在MATLAB中可以利用exp()函数实现,其语句格式为:y=Kexp(at)。
如
,调用格式为 ft=Aexp(at) 程序是
t=0:0.01:10; %定义时间点
ft=A*exp(a*t); %计算这些点的函数值
plot(t,ft); %画图命令,用直线段连接函数值表示曲线
grid on; %在图上画方格
(2) 正弦信号:f(t)=Ksin(ωt+φ)或f(t)=Kcos(ωt+φ),其中K为振幅,ω是角频率;φ是初相位。在MATLAB中可以利用sin()或cos()函数实现,其语句格式为Ksin(ωt+phi),Kcos(ωt+phi)。
如
,调用格式为 ft=Asin(wt+phi)
```A=1; w=2*pi; phi=pi/6;
```
t=0:0.01:8; %定义时间点
ft=A*sin(w*t+phi); %计算这些点的函数值
plot(t,ft); %画图命令
grid on; %在图上画方格
(3) 单位冲击/阶跃信号:
单位冲击/阶跃信号在MATLAB中可以用比较赋值语句产生。MATLAB表达式“y = ( t==0 )”的含义就是t = 0时y =1,而当t ≠ 0时y =0。 MATLAB表达式“y = ( t >=0)”的含义就是t ≥ 0时y =1,而当t < 0时y =0。
以下为单位阶跃信号示例:
t=-1:0.01:5;
y=(t>=0);
plot(t,y);
grid on;
axis([-1,5,-0.5,1.5]);
在MATLAB中,将dirac函数定义为冲击信号函数,heaviside函数定义为阶跃信号函数。
(4) 复指数信号:f(t)=Kest =Ke(σ+jω)t= Keσtcos(ωt)+j Keσtsin(ωt),其中,s=σ+jω是复变量;σ、ω为实数。在MATLAB中可以利用exp()函数表示复指数信号,MATLAB中默认变量i为虚部单位,求取实部用real()函数,求取虚部用imag()函数,求取模用abs()函数,求取相角用angle()函数。
如f(t)=Ke****(σ+jω)t,调用格式为f=Kexp((σ+jω)*t)
t=0:0.01:3;
K=3; sigma=-1; omega=10;
f=K*exp((sigma +j*omega)*t);
subplot(2,2,1),plot(t,real(f)),title('实部')
subplot(2,2,3),plot(t,imag(f)),title('虚部')
subplot(2,2,2),plot(t,abs(f)),title('模')
subplot(2,2,4),plot(t,angle(f)),title('相角')
(5)矩形脉冲信号:在MATLAB中可用rectpuls()函数产生,其语句格式为y=rectpuls(t,width),该函数用于产生一个幅值为1、宽度为width、相对于t=0 点左右对称的矩形波信号。该函数的横坐标范围由向量t决定,是以t=0为中心向左右各展开width/2 的范围。width的默认值为1。
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;
周期性矩形波信号或方波在MATLAB中可用square函数产生,其语句格式为square(t,DUTY)。该函数用于产生一个周期为2π、幅值为1的周期性方波信号,其中,DUTY参数用来表示信号的占空比为DUTY%,即在一个周期内脉冲宽度(正值部分)与脉冲周期的比值,占空比默认值为0.5。
例如频率为30Hz 的周期性方波信号的MATLAB源程序如下:
t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);%DUTY=75(percent)
plot(t,y);axis([-0.0625 0.0625 -1.5 1.5]);
grid on;
(6)三角波脉冲信号:在MATLAB中,可以用tripuls()函数生成,其语句格式为ft=tripuls(t,width,skew),该函数用于产生幅度为1,宽度为width,且以0为中心左右各展开width/2大小,斜度为skew的三角波。width的默认值是1,skew的取值范围是-1~+1之间。一般最大幅度1出现在t=(width/2)*skew的横坐标位置,默认时skew=0,此时产生对称三角波。
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
grid on;
axis([-3,3,-0.5,1.5]);
周期性三角波信号在MATLAB中用sawtooth函数来表示,其调用形式为:
Y=sawtooth(t,WIDTH )
用以产生一个周期为2p、最大幅度为1、最小幅度为-1的周期性方波信号(锯齿波)信号,其中的WIDTH 参数表示最大幅度出现的位置:在一个周期内,信号从t =0 到WIDTH2p时,函数值是从-1到1 线性增加的,而从WIDTH**2p到2p时函数值又是从1到-1 线性递减的;在其他周期内依次类推。
例如周期性三角波信号的MATLAB源程序如下:
t=-5*pi:pi/10:5*pi;
x=sawtooth(t,0.5);
plot(t,x);axis([-16 16 -1.5 1.5]);
grid on;
信号基本运算是乘法、加法、尺度、反转、平移、微分、积分,实现方法有数值法和符号法。
(1)信号的乘法与加法
例如:已知f1(t)=sin(wt) , f2(t)=sin(8wt) , w=2π , 求f1(t)+f2(t)和f1(t)f2(t) 的波形图
w=2*pi;
t=0:0.01:3;
f1=sin(w*t);
f2=sin(8*w*t);
subplot(211)
plot(t,f1+1,':',t,f1-1,':',t,f1+f2)
grid on,title('f1(t)+f2(t))')
subplot(212)
plot(t,f1,':',t,-f1,':',t,f1.*f2)
grid on,title('f1(t)*f2(t)')
(2)信号自变量的变换
如前所述,MATLAB可以有两种方法来表示连续信号。用这两种方法均可实现连续信号的时域变换,但用符号运算的方法则较为简便。
*①**移位*
对于连续信号f(t),若有常数t0>0,延时信号f(t-t0)是将原信号沿正t轴方向平移时间t0,而f(t+t0)是将原信号沿负t轴方向移动时间t0。我们可用下面的命令来实现连续信号的平移及其结果可视化,其中f是用符号表达式表示的连续时间信号,t是符号变量,subs命令则将连续信号中的时间变量t用t-t0替换:
y=subs(f,t,t-t0);
ezplot(y)
*②**反折*
连续信号的反折,是指将信号以纵坐标为轴反折,即将信号f(t)中的自变量t换为-t。实现如下:
y=subs(f,t,-t);
ezplot(y)
*③**尺度变换*
连续信号的尺度变换,是指将信号的横坐标进行展宽或压缩变换,即将信号f(t)中的自变量t换为at,当a>1时,信号f(at)以原点为基准,沿横轴压缩到原来的1/a;当0<a<1时,就展宽至原来的1/a倍。实现如下:
y=subs(f,t,a*t);
ezplot(y)
*④**倒相*
连续信号的倒相是指将信号f(t)以横轴为对称轴对折得到-f(t)。实现如下:
y=-f;
ezplot(y)
对于以上的命令,可在画图命令之后加入坐标轴的调整的命令(即加入axis( )命令),以使画出的图形更清晰、直观。
例如:以f(t)为三角信号为例,求f(2t) , f(2-2t)
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
subplot(3,1,1);
plot(t,ft); grid on;
title ('f(t)');
ft1= tripuls(2*t,4,0.5);
subplot(3,1,2);
plot(t,ft1); grid on;
title ('f(2t)');
ft2= tripuls(2-2*t,4,0.5);
subplot(3,1,3);
plot(t,ft2); grid on;
title ('f(2-2t)');
(3)微分与积分
符号算法也可实现信号的运算,以信号的微积分运算为例说明符号算法应用。
微分的调用格式为 diff(function,’variable’,n)
积分的调用格式为 int(function,’variable’,a,b)
式中function表示要微分或积分的函数,variable表示运算变量,n表示求导阶数,默认值是求一阶导数,a是积分下限,b是积分上限,a、b默认是求不定积分。在符号运算中,若要调用它必须用sym定义后,才能实现。
例如:求一阶导数的例题,已知
,
clear
syms a x y1 y2 %定义符号变量a, x ,y1, y2
y1=sin(a*x^2); %符号函数y1
y2=x*sin(x)*log(x); %符号函数y2
dy1=diff(y1, 'x') %无分号消隐直接显示结果
dy2=diff(y2) %无分号消隐直接显示结果
例如:求积分的例题,
,
clear
syms a x y3 y4
y3=x^5-a*x^2+sqrt(x)/2;
y4=(x*exp(x))/(1+x)^2;
iy3=int(y3,'x')
iy4=int(y4,0,1)
四、实验内容
1. 验证实验原理中程序
(1) 实指数信号:
A=1; a=-0.4;
t=0:0.01:10; %定义时间点
ft=A*exp(a*t); %计算这些点的函数值
plot(t,ft); %画图命令,用直线段连接函数值表示曲线
grid on; %在图上画方格

(2) 正弦信号:
A=1; w=2*pi; phi=pi/6;
t=0:0.01:8; %定义时间点
ft=A*sin(w*t+phi); %计算这些点的函数值
plot(t,ft); %画图命令
grid on; %在图上画方格

(3) 单位冲击/阶跃信号:
单位阶跃信号:
t=-1:0.01:5;
y=(t>=0);
plot(t,y);
grid on;
axis([-1,5,-0.5,1.5]);

(4) 复指数信号:
t=0:0.01:3;
K=3; sigma=-1; omega=10;
f=K*exp((sigma +j*omega)*t);
subplot(2,2,1),plot(t,real(f)),title('实部')
subplot(2,2,3),plot(t,imag(f)),title('虚部')
subplot(2,2,2),plot(t,abs(f)),title('模')
subplot(2,2,4),plot(t,angle(f)),title('相角')

(5)矩形脉冲信号:
t=-2:0.01:2;
width=1;
ft=2*rectpuls(t,width);
plot(t,ft)
grid on;

周期性方波信号:
t=-0.0625:0.0001:0.0625;
y=square(2*pi*30*t,75);%DUTY=75(percent)
plot(t,y);axis([-0.0625 0.0625 -1.5 1.5]);
grid on;

(6)三角波脉冲信号:
t=-3:0.01:3;
ft=tripuls(t,4,0.5);
plot(t,ft);
grid on;
axis([-3,3,-0.5,1.5]);

周期性三角波信号:
t=-5*pi:pi/10:5*pi;
x=sawtooth(t,0.5);
plot(t,x);axis([-16 16 -1.5 1.5]);
grid on;

(7)信号的乘法与加法
已知f1(t)=sin(wt) , f2(t)=sin(8wt) , w=2π , 求f1(t)+f2(t)和f1(t)f2(t) 的波形图
w=2*pi;
t=0:0.01:3;
f1=sin(w*t);
f2=sin(8*w*t);
subplot(211)
plot(t,f1+1,':',t,f1-1,':',t,f1+f2)
grid on,title('f1(t)+f2(t))')
subplot(212)
plot(t,f1,':',t,-f1,':',t,f1.*f2)
grid on,title('f1(t)*f2(t)')

(8)信号自变量的变换
f(t)为三角信号,f(2t) , f(2-2t)
t=-3:0.001:3;
ft=tripuls(t,4,0.5);
subplot(3,1,1);
plot(t,ft); grid on;
title ('f(t)');
ft1= tripuls(2*t,4,0.5);
subplot(3,1,2);
plot(t,ft1); grid on;
title ('f(2t)');
ft2= tripuls(2-2*t,4,0.5);
subplot(3,1,3);
plot(t,ft2); grid on;
title ('f(2-2t)');

(9)微分与积分
已知
,
clear
syms a x y1 y2 %定义符号变量a, x ,y1, y2
y1=sin(a*x^2); %符号函数y1
y2=x*sin(x)*log(x); %符号函数y2
dy1=diff(y1, 'x') %无分号消隐直接显示结果
dy2=diff(y2) %无分号消隐直接显示结果

求积分
,
clear
syms a x y3 y4
y3=x^5-a*x^2+sqrt(x)/2;
y4=(x*exp(x))/(1+x)^2;
iy3=int(y3,'x')
iy4=int(y4,0,1)

2. 画出信号波形
(1)

(2)

(3)产生幅度为1、周期为1、占空比为0.5的周期矩形信号

3. 已知
,作出
、
、
的微分、
的积分、
、
的波形。
定义函数:
function y=myfun1(x)
y=x.*(x>0 & x<1)+(-1).*(x>1 & x<2)+0.*(x<=0 & x >=2);
end
t=-4:0.1:4;
f=myfun1(t);
f1=f+f;
f2=f.*f;
f3=diff (f);
for u=1:length (t);
f4(u)=quad('f',0,t(u));
end
f5=myfun1(3-4*t);f6=myfun1(1-0.667*t);
subplot (211);plot (t,f1,'Linewidth',2);title('f (t)+f (t)');
ylabel('y(t)');xlabel('t');xlim([-0.1,4]);ylim([-2,3]);
grid on;
subplot (212);plot (t,f2,'Linewidth',2);title('f (t).*f (t)');
ylabel('y(t)');xlabel('t');xlim([-0.1,4]);ylim([-2,3]);
grid on;

figure;
subplot(211);plot(t(1:80),f3,'Linewidth',2);
title('f (t)的积分'); ylabel('y(t)');xlabel('t');
grid on;
subplot(212);plot(t,f4,'Linewidth',2);
title ('f (x)的微分'); ylabel('y(t)');xlabel('t');grid on;

figure;
subplot (2,1,1);plot (t,f5,'Linewidth',2);title ('f (3-4t)');
ylabel('y(t)');xlabel('t');
grid on;
subplot (2,1,2);plot (t,f6,'Linewidth',2);title('f (1-1.5t)');
ylabel('y(t)');xlabel('t');
grid on;

五、 实验结论
再次熟悉了matlab的函数和基本操作,能流利的使用matlab进行函数的仿真模拟和运算。
熟悉了信号与系统仿真实验的大致内容和报告要求。
对信号与系统中的阶跃信号、冲激信号的图像和性质有了进一步了解。
后续还有好多实验还没来得及上传,可以点击这个链接自行下载:https://wwd.lanzouq.com/ipnqk05t5v3e
);
title (‘f (x)的微分’); ylabel(‘y(t)’);xlabel(‘t’);grid on;
[外链图片转存中...(img-zNn7oVUR-1654166607278)]
```matlab
figure;
subplot (2,1,1);plot (t,f5,'Linewidth',2);title ('f (3-4t)');
ylabel('y(t)');xlabel('t');
grid on;
subplot (2,1,2);plot (t,f6,'Linewidth',2);title('f (1-1.5t)');
ylabel('y(t)');xlabel('t');
grid on;
[外链图片转存中…(img-qeIgkYYp-1654166607279)]
五、 实验结论
再次熟悉了matlab的函数和基本操作,能流利的使用matlab进行函数的仿真模拟和运算。
熟悉了信号与系统仿真实验的大致内容和报告要求。
对信号与系统中的阶跃信号、冲激信号的图像和性质有了进一步了解。
后续还有好多实验还没来得及上传,可以点击这个链接自行下载:https://wwd.lanzouq.com/ipnqk05t5v3e
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO
遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时