信号与系统课程实验报告: 连续信号及其傅里叶变换的编程

news2024/11/15 11:01:43

一、实验目的

  1. 认识并熟悉Matlab软件的使用,并能利用其进行编程
  2. 利用Matlab实现连续信号的表示
  3. 掌握数值法和符号法进行编程
  4. 实现连续周期信号的傅里叶级数求解编程算法
  5. 实现连续信号的傅里叶变换求解编程算法
  6. 理解Matlab代码的具体意义并熟练使用
  7. 利用Matlab对LTI系统的频率特性进行分析

 

二、实验内容

  1. 正弦信号的Matlab编程及波形表示方法
  2. 抽样信号的Matlab编程及波形表示方法
  3. 复指数信号的Matlab的编程及波形方法
  4. 连续周期信号的傅立叶变换的编程及波形表示方法
  5. 连续信号的傅里叶变换的编程及波形表示方法
  6. 利用Matlab分析LTI系统的频率特性

 

三、实验原理

1.连续信号的MATLAB表示

自变量在整个连续区间内都有定义的信号,称为连续时间信号,简称连续信号。从严格意义上来讲,MATLAB数值计算的方法并不能处理连续信号。然而,可以利用连续信号在等时间间隔点的取样值来近似表示连续信号,即当取样时间间隔足够小时,这些离散样值能被MATLAB所处理,并且能够较好地近似表示连续信号。

2.Matlab提供了大量生成基本信号的函数

如:

(1)指数信号:K*exp(a*t)

(2)正弦信号:K*sin(w*t+phi)和K*cos(w*t+phi)

(3)复指数信号:K*exp((a+i*b)*t)

(4)抽样信号:sin(t*pi)

(5)矩形脉冲信号:rectpuls(t,width)

(6)周期矩形脉冲信号:square(t,DUTY),其中DUTY参数表示信号的占空比DUTY%,即在一个周期脉冲宽度(正值部分)与脉冲周期的比值。占空比默认为0.5。

(7)三角波脉冲信号:tripuls(t, width, skew),其中skew取值范围在-1~+1之间。

(8)周期三角波信号:sawtooth(t, width)

3.Matlab中提供了常用的图形控制函数

1)利用clc, dir(ls), help, clear, format,

hold, clf控制命令的使用和M文件编辑/调试器使用操作;

2)主函数函数的创建和子程序的调用;

3)plot,subplot, grid on, figure, xlabel,ylabel,title,hold,title,Legend,绘图函数使用;

axis([xmin,xmax,ymin,ymax]):图型显示区域控制函数,其中xmin为横轴的显示起点,xmax为横轴的显示终点,ymin为纵轴的显示起点,ymax为纵轴的显示终点。

有时,为了使图形具有可读性,需要在所绘制的图形中,加上一些网格线来反映信号的幅度大小。MATLAB中的grid on/grid off可以实现在你的图形中加网格线。

grid on:在图形中加网格线。

grid off:取消图形中的网格线。

function y = delta(t)

dt = 0.01;

y = (u(t)-u(t-dt))/dt;

产生单位阶跃信号的扩展函数为:

% Unit step function

function y = u(t)

y = (t>=0); % y = 1 for t > 0, else y = 0

四、实验仪器

  1. macOS(带有虚拟机)
  2. Matlab软件

 

五、连续信号的编程实验代码及结果

1.正弦信号的Matlab编程及波形表示方法

(1)由于正弦信号在Matlab中用sin函数表示,于是调用格式:

ft=A*sin(w*t+phi)

(2)Matlab编程代码如下:

A=3; w=0.5*pi; phi=0;

t=0:0.01:8;

ft=A*sin(w*t+phi);

plot(t,ft);

grid on;

(3)正弦信号波形

 

2.抽样信号的Matlab编程

(1)抽样信号Sa(t)=sin(t)/t在Matlab中用sinc函数表示名,调用格式为:

Ft=sinc(t/pi)

(2)Matlab编程代码

t=-3*pi:pi/100:3*pi;

ft=sinc(t/pi);

plot(t,ft);

grid on;

axis([-10,10,-0.5,1.2]);    %定义画图范围,横轴,纵轴

title('抽样信号')         %定义图的标题名字

(3)抽样信号波形

3.复指数的Matlab编程及波形表示方法

(1)在Matlab中,复指数信号的调用格式为exp((a+j*w)*t)

(2)Matlab编程代码

t=0:0.01:5;

a=0.5;

w=8;

X= 2*exp((a+j*w)*t);

Xr=real(X);         %取实部   

Xi=imag(X);        %取虚部

Xa=abs(X);        %取模

Xn=angle(X);        %取相位

subplot(2,2,1),plot(t,Xr),axis([0,5,-(max(Xa)+0.5),max(Xa)+0.5]),title('real');

subplot(2,2,3),plot(t,Xi),axis([0,5,-(max(Xa)+0.5),max(Xa)+0.5]),title('imag');

subplot(2,2,2), plot(t,Xa),axis([0,5,0,max(Xa)+1]),title('abs');

subplot(2,2,4),plot(t,Xn),axis([0,5,-(max(Xn)+1),max(Xn)+1]),title('angle');

(3)复指数信号波形

 

4.连续周期信号的傅里叶级数的编程及表示方法

  1. 连续周期信号的傅里叶级数

三角函数形式的傅里叶级数:

指数形式的傅里叶级数:

 

(2)Matlab编程代码

syms t n y

T=10;                                                   %设置周期

tao=1;     %设置脉宽

Nn=16; %输出数据位数为16

Nf=30; %谐波次数30

y=1; %主周期波形

a0=2*int(y,t,-tao/2,tao/2)/T; %直流分量

as=int(2*y*cos(2*pi*n*t/T)/T,t,-tao/2,tao/2); %余弦项系数

bs=int(2*y*sin(2*pi*n*t/T)/T,t,-tao/2,tao/2); %正弦项系数

an(1)=double(vpa(a0,Nn));

for k=1:Nf

    an(k+1)=double(vpa(subs(as,n,k),Nn));

    bn(k+1)=double(vpa(subs(bs,n,k),Nn));

end %符号量转数值量

cn=sqrt(an.*an+bn.*bn); %幅度谱

for i=0:Nf

    if an(i+1)>=0

        phase(i+1)=0;

    else

        phase(i+1)=pi;

    end

end %相位谱

subplot(211);

k=0:Nf;

stem(k,cn);

subplot(212)

stem(k,phase);


(3)波形表示:幅度谱与相位谱

六、连续信号傅里叶变换的编程实验

 

1.傅里叶变换及其逆变换表达式

 

2.傅里叶变换的Matlab求解

Matlab的symbolic Math Toolbox提供了直接求解傅立叶变换及其逆变换的函数fourier()及ifourier(),两者的调用格式如下:

(1)Fourier 变换的调用格式

F=fourier(f):它是符号函数f的fourier变换默认返回是关于w的函数。

F=fourier(f,v):它返回函数F是关于符号对象v的函数,而不是默认的w,即

(2)Fourier逆变换的调用格式

f=ifourier(F):它是符号函数F的fourier逆变换,默认的独立变量为w,默认返回是关于x的函数。

f=ifourier(f,u):它的返回函数f是u的函数,而不是默认的x.

注意:在调用函数fourier()及ifourier()之前,要用syms命令对所用到的变量(如t,u,v,w)进行说明,即将这些变量说明成符号变量。

3.具体连续信号Matlab编程代码及波形

(1)求解f(t)=exp(-6|t|)的傅里叶变换

syms t

f=exp(-2*abs(t))

F=fourier(f)

F=4/(4+w^2)

运算结果如下:

0.0588

 

(2)求解单边指数信号f(t)=exp(-6t)*u(t)的傅里叶变换

具体代码:

syms t phase im re

%f=exp(-6*t)*sym(‘Heaviside(t)’);   % Heaviside(t)第一个字母要小写

f= exp(-6*t)* heaviside(t);   % Heaviside(t)第一个字母要小写

F=fourier(f);

% im=image(F); %计算F的实部

im=imag(F); %计算F的实部

re=real(F); %计算F的虚部

phase=atan(im/re); %计算相位

subplot(211);

ezplot(abs(F)); %绘制幅度谱

subplot(212);

ezplot(phase); %绘制相位谱

 

幅度谱与相位谱如下

 

4.利用Matlab分析LTI系统的频率特性

当系统的频率响应H(jw)是jw的有理多项式时,有

 

MATLAB信号处理工具箱提供的freqs函数可直接计算系统的频率响应的数值解。

其调用格式如下

H=freqs(b,a,w)

其中,a和b分别是H(jw)的分母和分子多项式的系数向量,w为形如w1:p:w2的向量,定义系统频率响应的频率范围,w1为频率起始值,w2为频率终止值,p为频率取样间隔。

H返回w所定义的频率点上,系统频率响应的样值。

(1)三阶归一化的butterworth 低通滤波器的频率响应为

 

画出系统的幅度响应和相位响应

I具体代码

w=0:0.025:5;

b=[1];a=[1,2,2,1];

H=freqs(b,a,w)

subplot(2,1,1);

plot(w,abs(H));grid;

xlabel('\omega(rad/s)');

ylabel('|H(j\omega)|');

title('H(jw)的幅频特性');

subplot(2,1,2);

plot(w,angle (H));grid;

xlabel('\omega(rad/s)');

ylabel('\phi(\omega)');

title('H(jw)的相频特性');


幅频特性与相频特性

 

七、实验心得及体会

  1. 本次实验是首次利用Matlab软件进行代码的编写及波形的绘制,为了能更高效更有目的性地完成本次实验,在进行实验前花了一段时间利用网上的Matlab教程完成了Matlab的入门学习。学习的主要内容有Matlab界面介绍、基础编程操作、路径管理、绘图操作等等。
  2. 通过此次实验学会了使用Matlab代码表示连续信号的方法、掌握了数值法和符号法进行编程以及各种波形的表示方法。最后理解了Matlab代码的具体意义并能够熟练运用。
  3. 从实验开始,到最后结束,出现的最多的问题就是对软件操作的不熟练,最开始是体现在文件的新建方面。
  4. 在编写代码时,时常未注意到中文符号和英文符号,导致调试系统时出现报错,又或者是在代码中无意添加了中文,如下样式

(1)在编写时由于参数设置的不精确,使波形一直都未出现,在多次调试后,波形才如愿得到。

(2)经过反复对代码的摸索、编写、改动,在实验中熟练掌握了Matlab函数的用法,对其也有了更深的理解。

(3)编写代码的时候必须细心。实验中在编写傅立叶变换的代码时,由于搞混了每个函数的作用区间,导致迟迟没有波形图出现,后经过多次调试才发现问题的根源。

(4)学习信号与系统的过程中,对于幅频特性和相频特性的理解一直都比较模糊。通过此次实验,编写具体代码得到相关信号的幅频特性和相频特性图,并进行对比学习,我觉得对这部分的知识有了更深的认识!

八、实验总结

通过本次实验,我学习到并熟练掌握了利用Matlab进行编程的方法,并能够进行连续信号及其傅里叶变换的编程及绘制。在实验的过程中,通过对波形的观察,更加深入地理解正弦函数、抽样函数和复指数函数的实质。在第4、5个分实验中,进行了对连续周期函数傅立叶级数的计算和对连续函数傅立叶变换的求解,此过程让我对课本上关于幅度谱和相位谱的理解更为深刻,最后一个实验中,利用Matlab对LTI系统的频率特性进行分析,通过编写代码,函数傅立叶变换的幅频特性和相频特性直接呈现出来,清晰明了!

2023-02-11

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/739610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven依赖管理(核心)

依赖配置 依赖&#xff1a;指当前项目运行所需要的jar包&#xff0c;一个项目可以引入多个依赖配置&#xff1a; 在pom.xml中编写<dependencies>标签在<dependencies>标签中使用<dependency>引入坐标定义坐标的groupId、artifacId、version点击刷新按钮&…

二叉树层序遍历

目录 一、什么是层序遍历 二、层序遍历的实现 三、判断一棵树是否为完全二叉树 总结&#xff1a; 学习二叉树结构&#xff0c;最简单的就是遍历。 所谓二叉树遍历就是按照某种规则对二叉树中的节点进行相应操作&#xff0c;每个节点值操作一次。 遍历是二叉树的重要运算之…

深入篇【C++】手搓模拟实现string类(详细剖析常见的各接口):【400行代码实现】

深入篇【C】手搓模拟实现string类(包含常见的各接口&#xff09;&#xff1a;【400行代码实现】 【string类模拟实现完整代码】Ⅰ.构造/析构1.string()2.operator3.~string() Ⅱ.访问遍历1.operator[]2.iterator3.范围for Ⅲ.增操作1.push_back()2.append()3.operator4.insert(…

Harbor未授权创建管理员

人处在幸福与不幸交织的矛盾之中&#xff0c;反而使内心有一种更为深刻的痛苦&#xff0c;看来近在眼前的幸福而实际上又远得相当渺茫&#xff0c;海市蜃楼。放不得抓不住。 漏洞描述 近日&#xff0c;镜像仓库Harbor爆出任意管理员注册漏洞&#xff0c;攻击者在请求中构造特…

eNSP-VLAN多端口成员模式+DHCP

VLAN多端口成员模式DHCP 文章目录 VLAN多端口成员模式DHCP一、题目要求二、题目分析三、拓扑结构四、基本配置五、测试验证1.网段测试2.访问测试 一、题目要求 1、PC1和pc3所在接口为Access接口&#xff0c;PC2/4/5/6处于同一网段&#xff0c;其中PC2可以访问PC4/5/6&#xff…

Webkit内核探究——Webkit CSS实现

文章目录 前言1、CSS是什么2、CSS实现模型3、CSS默认样式表4、CSS解析5、CSS如何作用于Render Tree 前言 CSS在Webkit中的实现属于相对独立的一个模块&#xff0c;注意这里说的是相对。 CSS在Webkit中的作用自然是不言而喻的&#xff0c;在Web早期&#xff0c;文档的结构和样…

【运维工程师学习五】数据库

【运维工程师学习五】数据库 1、常用的关系型数据库2、C/S结构3、MariaDB图形客户端4、安装MariaDB5、启动MariaDB及验证启动是否成功6、验证启动——端口7、验证启动——进程8、MariaDB配置文件路径主配置文件解读&#xff1a; 9、MariaDB的配置选项10、MariaDB客户端连接1、在…

Windows下 Oracle 12c 安装保姆级图文详解

Windows下 Oracle 12c 安装步骤如下&#xff1a; 1、将压缩包“winx64_12c_database_1of2.zip“和“winx64_12c_database_2of2.zip”解压到同一目录“database”目录。 2、双击“database”目录下的“setup.exe"&#xff0c;软件会加载并初步校验系统是否可以达到了数据…

华为云出品《深入理解高并发编程:Java线程池核心技术》电子书发布

系统拆解线程池核心源码的开源小册 透过源码看清线程池背后的设计和思路 详细解析AQS并发工具类 点击下方链接进入官网&#xff0c;右上角搜索框搜索“《深入理解高并发编程&#xff1a;Java线程池核心技术》” 即可获取下载。 https://auth.huaweicloud.com/authui/login…

01-线性表 (数据结构和算法)

要点&#xff1a; 程序 数据结构 算法 一、数据结构的概述 程序 数据结构 算法 数据结构&#xff1a;计算机存储、组织数据的方式 算法&#xff1a;处理数据的方式 1.1 基本概念和术语 1、数据 数据&#xff08;data&#xff09;&#xff1a;所有能够输入到计算机中…

【Method】稀疏与压缩感知 | 图像稀疏性及压缩感知方法白话讲解

【Method】稀疏与压缩感知 | 图像稀疏性及压缩感知方法白话讲解 文章目录 【Method】稀疏与压缩感知 | 图像稀疏性及压缩感知方法白话讲解1. 为什么图像是可压缩的&#xff1a;图像空间的广阔2. 什么是Sparsity&#xff1f;3.压缩感知&#xff1a;简介4.压缩感知&#xff1a;数…

matlab学习指南(3):最全MATLAB工具箱Toolbox下载地址大汇总

&#x1f305;*&#x1f539;** φ(゜▽゜*)♪ **&#x1f539;*&#x1f305; 欢迎来到馒头侠的博客&#xff0c;该类目主要讲数学建模的知识&#xff0c;大家一起学习&#xff0c;联系最后的横幅&#xff01; 喜欢的朋友可以关注下&#xff0c;私信下次更新不迷路&#xff0…

火车头采集器AI伪原创【php源码】

本文介绍火车头采集器AI伪原创&#xff0c;对于新媒体从业者来说&#xff0c;会写文章是最基本的职业技能&#xff0c;而伪原创是我们经常使用的技能。今天我要讲的是SEO标兵如何在伪原创上创作文章。 首先&#xff0c;原创性永远是最好的&#xff0c;更受读者欢迎。伪原创的出…

Microsoft Dynamics 365:VS2019引用BC发布的SOAP服务

1、搜索网页服务 2、点击新建 3、选择对象类型&#xff1a;页面、单元、查询&#xff0c;输入ID&#xff0c;勾选即可发布服务 4、复制SOAP URL到浏览器里看看是否可以访问&#xff0c;这样就OK的 5、 右键添加服务引用 6、选择高级 7、添加web引用 8、服务地址粘贴进去查找服…

云原生监控——VictoriaMetrics

1.简介 VictoriaMetrics是一个快速高效且可扩展的监控解决方案和时序数据库&#xff0c;可以作为Prometheus的长期远端存储&#xff0c;具备的特性有&#xff1a; 支持prometheus查询api&#xff0c;同时实现了一个metricsql 查询语言支持全局查询视图&#xff0c;支持多prom…

uniapp引用leaflet地图实现方案

最近在做uniapp实现的移动端app&#xff0c;其中一些模块需要gis地图&#xff0c;在最开始的时候我尝试了使用uniapp官方自带的map组件&#xff0c;但是非常不好用。 后来又引用了mars2d来实现&#xff0c;但是发现这种引用方式会出现一个bug&#xff0c;在浏览器当中使用的时候…

Blueprint —— 入门笔记

蓝图比C性能较慢&#xff1b; 蓝图起作用需在场景中创建实例&#xff1b; 在Event Graph内 按住右键&#xff0c;平移界面&#xff1b;滚动滚轮&#xff0c;缩放界面&#xff1b;按住左键节点&#xff0c;移动节点&#xff1b;右击&#xff0c;显示节点对话框&#xff1b;按住…

外部存储器接口(EMIF)

1 接口信号与控制寄存器 EMIF(External Memory Interface)外部存储器接口为DSP芯片与众多外部设备之间提供一种连接方式&#xff0c;EMIF最常见的用途就是同时连接FLASH和SDRAM。EMIF性能优良&#xff0c;跟外部SDRAM和异步器件连接时&#xff0c;具有很大的方便性和灵活性。根…

ModaHub魔搭社区:常用的相似性度量——浮点向量相似性度量和二进制向量相似性度量

目录 常用的相似性度量 浮点向量相似性度量 二进制向量相似性度量 总结 常用的相似性度量 如果没有相似性度量——计算两个向量之间距离的方法,再好的向量数据库也没有用。因为存在许多度量,我们在这里只讨论最常用的子集。 浮点向量相似性度量 最常见的浮点向量相似…

【数据分析 - 基础入门之pandas篇①】- pandas介绍

文章目录 前言一、pandas介绍二、pandas优势2.1 强大的数据结构支撑2.2 优点 三、pandas学习路线结语相关导读 前言 一、pandas介绍 pandas 是 Python 的 核心数据分析支持库 &#xff0c;提供了快速、灵活、明确的数据结构&#xff0c;旨在简单、直观地处理关系型、标记型数据…