草庐IT

实验一 连续时间信号及其MATLAB实现

Culubo 2023-07-14 原文

浙江理工大学信号与系统实验

实验一 连续时间信号及其MATLAB实现

一、实验目的

1.掌握MATLAB语言的基本操作,学习基本的编程功能;

2.掌握MATLAB产生常用连续时间信号的编程方法;

3.学会用MATLAB进行信号基本运算的方法,了解信号运算对信号所起的作用。

二、实验仪器

装有MATLAB软件的微型计算机1台

三、实验原理

  1. 连续信号MATLAB实现原理

从严格意义上讲,MATLAB数值计算的方法并不能处理连续时间信号。然而,可用连续信号在等时间间隔点的取样值来近似表示连续信号,即当取样时间间隔足够小时,这些离散样值能够被MATLAB处理,并且能较好地近似表示连续信号。

MATLAB提供了大量生成基本信号的函数。比如常用的指数信号、正余弦信号等都是MATLAB的内部函数。为了表示连续时间信号,需定义某一时间或自变量的范围和取样时间间隔,然后调用该函数计算这些点的函数值,最后画出其波形图。

  1. 典型信号的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. 信号的基本运算

信号基本运算是乘法、加法、尺度、反转、平移、微分、积分,实现方法有数值法和符号法。

(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命令则将连续信号中的时间变量ttt0替换:

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;

五、 实验结论

  1. 再次熟悉了matlab的函数和基本操作,能流利的使用matlab进行函数的仿真模拟和运算。

  2. 熟悉了信号与系统仿真实验的大致内容和报告要求。

  3. 对信号与系统中的阶跃信号、冲激信号的图像和性质有了进一步了解。

后续还有好多实验还没来得及上传,可以点击这个链接自行下载: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)]

五、 实验结论

  1. 再次熟悉了matlab的函数和基本操作,能流利的使用matlab进行函数的仿真模拟和运算。

  2. 熟悉了信号与系统仿真实验的大致内容和报告要求。

  3. 对信号与系统中的阶跃信号、冲激信号的图像和性质有了进一步了解。

后续还有好多实验还没来得及上传,可以点击这个链接自行下载:https://wwd.lanzouq.com/ipnqk05t5v3e

有关实验一 连续时间信号及其MATLAB实现的更多相关文章

  1. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  2. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  3. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案: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

  4. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个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

  5. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    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

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  8. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  9. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  10. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

随机推荐