【信号与系统】【北京航空航天大学】实验四、幅频、相频响应和傅里叶变换

news2024/9/28 23:38:15

一、实验目的

1、 掌握利用MATLAB计算系统幅频、相频响应的方法;
2、 掌握使用MATLAB进行傅里叶变换的方法;
3、 掌握使用MATLAB验证傅里叶变换的性质的方法。

二、实验内容

1、
在这里插入图片描述
MATLAB代码:

>> clear all;
>> a = [1 3 2];
>> b = [1];
>> w = -2 * pi : 0.01 : 2 * pi;
>> [H, w] = freqs(b, a, w);
>> mag = abs(H);
>> pha = angle(H);
>> rea = real(H);
>> ima = imag(H);
>> figure
>> subplot(2, 1, 1);
>> plot(w, mag);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('|H(jw)|');
>> title('幅频响应曲线');
>> axis([-2 * pi, 2 * pi, 0, 0.6]);
>> subplot(2, 1, 2);
>> plot(w, pha);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('∠H(jw) (rad)');
>> title('相频响应曲线');
>> axis([-2 * pi, 2 * pi, 0, 0.6]);
>> axis([-2 * pi, 2 * pi, -3, 3]);
>> figure
>> subplot(2, 1, 1);
>> plot(w, rea);
>> axis([-2 * pi 2 * pi -0.1 0.6]);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('Re{H(jw)}');
>> title('频率响应的实部');
>> subplot(2, 1, 2);
>> plot(w, ima);
>> xlabel('\omega/\omega_0');
>> ylabel('Im{H(jw)}');
>> axis([-2 * pi 2 * pi -0.4 0.4]);
>> grid on;
>> title('频率响应的虚部');

幅频响应相频响应曲线:

在这里插入图片描述

频率响应的实部虚部

在这里插入图片描述

2、

在这里插入图片描述

MATLAB代码:

(1)X1(t) 信号

>> clear all;
>> syms x;
>> f = exp(-x) .* heaviside(x);
>> F = fourier(f);
>> Fs = abs(F);
>> Fe = angle(F);
>> figure
>> subplot(2, 1, 1);
>> ezplot(Fs, [-2 * pi, 2 * pi]);
>> title('符号计算X1(jw)的幅度谱', 'FontSize', 14);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('|X1(jw)|');
>> subplot(2, 1, 2);
>> ezplot(Fe, [-2 * pi, 2 * pi]);
>> title('符号计算X1(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X1(jw) (rad)');
>> grid on;
>> clear all;
>> T = 0.01;
>> dw = 0.01;
>> t = -5 : T : 5;
>> w = -2 * pi : dw : 2 * pi;
>> f = exp(-t) .* (t >= 0);
>> F = f * exp(-j * t' * w) * T;
>> Fe = angle(F);
>> Fs = abs(F);
>> figure
>> subplot(2, 1, 1);
>> plot(w, Fs);
>> axis([-2 * pi 2 * pi 0.1 1.1]);
>> grid on;
>> title('数值计算X1(jw)的幅度谱', 'FontSize', 14);
>> ylabel('|X1(jw)|');
>> xlabel('\omega/\omega_0');
>> subplot(2, 1, 2);
>> plot(w, Fe);
>> axis([-2 * pi 2 * pi -1.5 1.5]);
>> title('数值计算X1(jw)的相位谱', 'FontSize', 14);
>> grid on;
>> ylabel('∠X1(jw) (rad)');
>> xlabel('\omega/\omega_0');

(2)X2(t) 信号

>> clear all;
>> syms x;
>> f = exp(-3 * abs(x)) .* sin(2 * x);
>> F = fourier(f);
>> figure
>> Fs = abs(F);
>> Fe = angle(F);
>> subplot(2, 1, 1);
>> ezplot(Fs);
>> grid on;
>> title('符号计算X2(jw)的幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X2(jw)|');
>> subplot(2, 1, 2);
>> ezplot(Fe);
>> fplot(Fe);
>> axis([-2 * pi 2 * pi -1.6 1.6]);
>> axis([-2 * pi 2 * pi -2 2]);
>> grid on;
>> title('符号计算X2(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X2(jw) (rad)');
>> clear all;
>> T = 0.01;
>> dw = 0.01;
>> t = -10 : T : 10;
>> w = -2 * pi : dw : 2 * pi;
>> f = exp(-3 * abs(t)) .* sin(2 * t);
>> F = f * exp(-j * t' * w) * T;
>> figure
>> Fs = abs(F);
>> Fe = angle(F);
>> subplot(2, 1, 1);
>> plot(w, Fs);
>> grid on;
>> axis([-2 * pi 2 * pi -0.01 0.23]);
>> title('数值计算X2(jw)的幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X2(jw)|');
>> subplot(2, 1, 2);
>> plot(w, Fe);
>> grid on;
>> axis([-2 * pi 2 * pi -2 2]);
>> title('数值计算X2(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X2(jw) (rad)');

(3)X3(t) 信号

>> clear all;
>> syms x;
>> f = heaviside(x + 0.5) - heaviside(x - 0.5);
>> F = fourier(f);
>> Fs = abs(F);
>> Fe = angle(F);
>> figure
>> subplot(2, 1, 1);
>> ezplot(Fs, [-5 * pi, 5 * pi]);
>> grid on;
>> title('符号计算X3(jw)的幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X3(jw)|');
>> subplot(2, 1, 2);
>> ezplot(Fe, [-5 * pi, 5 * pi]);
>> grid on;
>> title('符号计算X3(jw)的相位谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X3(jw) (rad)');
>> clear all;
>> T = 0.01;
>> dw = 0.01;
>> t = -5 : T : 5;
>> w = -5 * pi : dw : 5 * pi;
>> f = Heaviside(t + 0.5) - Heaviside(t - 0.5);
>> F = f * exp(-j * t' * w) * T;
>> Fs = abs(F);
>> Fe = angle(F);
>> figure;
>> subplot(2, 1, 1);
>> plot(w, Fs);
>> axis([-5 * pi 5 * pi -0.1 1.1]);
>> grid on;
>> title('数值计算X3(jw)幅度谱', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X3(jw)|');
>> subplot(2, 1, 2);
>> plot(w, Fe);
>> plot(w, abs(Fe));
>> axis([-5 * pi 5 * pi -0.2 3.3]);
>> grid on;
>> xlabel('\omega/omega_0');
>> xlabel('\omega/\omega_0');
>> ylabel('∠X3(jw) (rad)');
>> title('数值计算X3(jw)相位谱', 'FontSize', 14);

生成的谱图:

(1)X1(t) 信号

符号计算方法:

在这里插入图片描述

数值计算方法:

在这里插入图片描述
(2)X2(t) 信号

符号计算方法:

在这里插入图片描述

数值计算方法:

在这里插入图片描述
(3)X3(t) 信号

符号计算方法:

在这里插入图片描述
数值计算方法:

在这里插入图片描述

3、

在这里插入图片描述

(1)、验证线性性质

MATLAB代码:

>> clear all;
>> syms t;
>> x1 = exp(-t) .* heaviside(t);
>> x2 = exp(-3 * abs(t)) .* sin(2 * t);
>> x = 2 * x1 + 5 * x2;
>> X = fourier(x);
>> figure
>> subplot(2, 1, 1);
>> aX = abs(X);
>> pX = angle(X);
>> ezplot(aX);
>> grid on;
>> title('直接计算傅里叶变换的实部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X(jw)|');
>> subplot(2, 1, 2);
>> ezplot(pX);
>> grid on;
>> title('直接计算傅里叶变换的虚部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X(jw) (rad)');
>> X1 = fourier(x1);
>> X2 = fourier(x2);
>> Y = 2 * X1 + 5 * X2;
>> aY = abs(Y);
>> pY = angle(Y);
>> figure
>> subplot(2, 1, 1);
>> ezplot(aY);
>> grid on;
>> title('使用性质计算傅里叶变换的实部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('|X(jw)|');
>> subplot(2, 1, 2);
>> ezplot(pY);
>> grid on;
>> title('使用性质计算傅里叶变换的虚部', 'FontSize', 14);
>> xlabel('\omega/\omega_0');
>> ylabel('∠X(jw) (rad)');

直接计算:

在这里插入图片描述

使用性质计算:

在这里插入图片描述

(2)验证卷积性质

// 待更新。

4、

在这里插入图片描述

MATLAB代码:

signal_DTFT函数:

function X = signal_DTFT(xn, n, w)
X = xn * (exp(-1i) .^ (n' * w));

其余代码:

>> clear all;
>> w = -4 * pi : 0.01 : 4 * pi;
>> n = -30 : 30;
>> xn = 0.5 .^ (n - 1) .* (n >= 1);
>> X = signal_DTFT(xn, n, w);
>> magX = abs(X);
>> figure
>> subplot(2, 1, 1);
>> plot(w, magX);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('|X(e^{jw})|');
>> title('傅里叶变换的模值', 'FontSize', 14);
>> axis([-4 * pi, 4 * pi, 0.5, 2]);
>> subplot(2, 1, 2);
>> plot(w, phaX);
>> axis([-4 * pi, 4 * pi, -4, 4]);
>> grid on;
>> xlabel('\omega/\omega_0');
>> ylabel('∠X(e^{jw}) (rad)');
>> title('傅里叶变换的相位', 'FontSize', 14);

傅里叶变换结果:

在这里插入图片描述
5、思考题

在这里插入图片描述

答: 数值计算和符号计算的精度不同。符号计算的精度取决于MATLAB中 ezplot 函数的精度,而数值计算的精度取决于自己定义的 w 变量的精度。

三、实验收获与感想:

1、 单位阶跃函数 u(t) 可以用 heaviside(t) 函数近似表示。在 t = 0 时刻的函数值为 0.5. 举例:

>> clear all;
>> syms x;
>> u = heaviside(x);
>> ezplot(u, [-5, 5]);
>> xlabel('t');
>> ylabel('u(t)');
>> title('单位阶跃函数', 'FontSize', 14);
>> heaviside(0)

ans =

0.5000

函数图像:

在这里插入图片描述

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

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

相关文章

干掉xshell, 这款远程终端工具:开源、免费、跨平台,同时支持SSH+SFTP+Telent+TCP+Serial,太香了。

干掉xshell说say you, 这款远程终端工具:开源、免费、跨平台,同时支持SSHSFTPTelentTCPSerial,太香了。 大家好! 我是老码农。 今天分享一款:远程终端连接工具:WindTerm。 如标题所述,值得拥…

按空格键改变text显示的内容并打印输出

注意!如果焦点不在text则无法生效。 整型竟然能和字符串直接相加,立天! import QtQuickWindow {width: 640height: 480visible: truetitle: qsTr("2.2 属性")Rectangle {Text {id: thislabelfont.pixelSize: 30font.family: "…

Elastic Stack(1):Elastic Stack简介

1 简介 ELK是一个免费开源的日志分析架构技术栈总称,官网https://www.elastic.co/cn。包含三大基础组件,分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析,它还可以支持其它任何数据搜索、分析和收集的场景&#xf…

线程基础知识点

1. 线程和进程的区别? 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。 当…

自动驾驶概述

自动驾驶技术主要解决的问题 无人驾驶分级 L1:巡航定速(ACC),巡航装置可以纵向控制车辆,可以加速减速 L2:车道保持辅助,系统可以纵向控制也可以横向控制汽车,但车是辅助,人才是主导。 L2.5:可以提供简单路况下的变道能力,比如特斯拉。 L3:L2的基础上提供变道能力,…

[C语言]编译和链接

一、翻译和运行 在ANSI C的任何⼀种实现中,存在两个不同的环境。 1)翻译环境:将源代码被转换为可执行的机器指令 2)执行环境:实际执行代码。 1.翻译环境 首先我们来将翻译环境 翻译环境是由 编译 和 链接 两个大的过程…

龙哥的问题(积性函数,莫比乌斯反演)

题目路径: 221. 龙哥的问题 - AcWing题库 思路:

5G消息一站式解决方案,实现全新“跳代”应用体验

随着5G技术的普及和深化,通信行业迎来发展的“红利期”。5G消息作为基础短信业务的升级,可通过手机一键开启。不仅支持在原生短信界面发送多种内容,如:语音、视频、图片、地理位置等。还可通过chatbot功能模拟人类智能对话&#x…

2017年认证杯SPSSPRO杯数学建模A题(第一阶段)安全的后视镜全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 A题 安全的后视镜 原题再现: 汽车后视镜的视野对行车安全非常重要。一般来说,汽车的后视镜需要有良好的视野范围,以便驾驶员能够全面地了解车后方的道路情况。同时,后视镜也要使图像的畸变尽可能…

Zoho Survey评价:功能全面,值得一试

通常来讲,我们在使用一款问卷调查制作工具制作问卷时会有哪些需求呢? 用户需求 1、操作简单,易上手。 2、能够满足用户个性化的需求。 3、提供多语言服务。 4、能够帮助发布以及数据收集。 5、简化数据分析 市面上的问卷调查制作工具都…

【法如faro】法如三维激光扫描软件Scene2023下载与安装教程

FARO SCENE 2023是法如中国官方开发的一款相套配的三维数字化存档软件,该软件专门设计用于所有的Focus和第三方激光扫描仪,通过使用实时现场配准、自动对象识别、扫描图像配准和定位功能,能够帮助用户轻松而高效地处理和管理扫描后的数据。 文…

HTTPS协议把什么加密了?

HTTPS(Hypertext Transfer Protocol Secure)是一种用于在计算机网络上进行安全通信的协议。它的工作原理主要基于以下几个关键步骤: 1. 握手阶段(Handshake): - 客户端向服务器发送一个请求&#xff0c…

349. 两个数组的交集(力扣)(OJ题)

题目链接:349. 两个数组的交集 - 力扣(LeetCode) 个人博客主页:https://blog.csdn.net/2301_79293429?typeblog 专栏:https://blog.csdn.net/2301_79293429/category_12545690.html 给定两个数组 nums1 和 nums2 &a…

十一、常用API——正则表达式

目录 练习1: 正则表达式的作用 正则表达式 字符类(只匹配一个字符) 预定义字符(只匹配一个字符) 数量词 类 Pattern 正则表达式的构造摘要 反斜线、转义和引用 字符类 行结束符 组和捕获 Unicode 支持 与…

Spring Boot整合MyBatis-Plus

引言 在现代软件开发中,我们经常需要处理大量的数据。为了有效地管理这些数据,我们需要使用一些强大的框架。其中,Spring Boot和MyBatis-Plus是两个非常流行的框架。Spring Boot是一个基于Spring的开源Java框架,可以用于创建独立…

Java:选择哪个Java IDE好?

Java:选择哪个Java IDE好? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&…

动手搓一个kubernetes管理平台(3)-后端框架

后端框架的选择面比较大,由于不涉及复杂的调度/分布式管理等场景,所以后端选用一个标准的web server即可,比如gin, iris, beego等等,因为正好最近在看iris的一些项目,所以就选用了irsicorba的框架进行后端开发 。 通过…

Kafka-消费者-KafkaConsumer分析-PartitionAssignor

Leader消费者在收到JoinGroupResponse后,会按照其中指定的分区分配策略进行分区分配,每个分区分配策略就是一个PartitionAssignor接口的实现。图是PartitionAssignor的继承结构及其中的组件。 PartitionAssignor接口中定义了Assignment和Subscription两个…

KubeSphere 社区双周报 | 2024.01.04-01.18

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.01.04-01.18…

【SpringBoot3】IDEA常用插件介绍Tabnine,GsonFormat,Maven Helper等

文章目录 一、Tabnine二、Auto filling Java call arguments三、GsonFormat四、Rainbow Brackets五、Maven Helper 本文主要介绍一些比较实用的IDEA插件,帮助广大开发者提升开发效率,愉悦编码! 一、Tabnine 官网地址:https://ww…