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

一、实验目的

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

函数图像:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

rabbitmq的介绍、使用、案例

1.介绍 rabbitmq简单来说就是个消息中间件,可以让不同的应用程序之间进行异步的通信,通过消息传递来实现解耦和分布式处理。 消息队列:允许将消息发到队列,然后进行取出、处理等操作,使得生产者和消费者之间能够解耦&…

C++初阶--自我实现vector

实现模板 #include<assert.h> #include<string.h> #include<iostream> #include<list> using namespace std; namespace fnc {template<class T>class vector{public:typedef T* iterator;typedef const T* const_iterator;//构造函数vector(){…

五、模 板

1 泛型编程 以往我们想实现一个通用的交换函数&#xff0c;可能是通过下面的方式来实现的&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swap(double& left, double& right) {double temp left;left ri…

递归、搜索与回溯算法(专题一:递归)

往期文章&#xff08;希望小伙伴们在看这篇文章之前&#xff0c;看一下往期文章&#xff09; &#xff08;1&#xff09;递归、搜索与回溯算法&#xff08;专题零&#xff1a;解释回溯算法中涉及到的名词&#xff09;【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…

【深度学习每日小知识】Artificial Intelligence 人工智能

人工智能 (AI) 是一个快速发展的领域&#xff0c;有潜力改变我们的生活和工作方式。人工智能已经为从自动驾驶汽车到个性化医疗等各个行业做出了重大贡献。然而&#xff0c;与任何新技术一样&#xff0c;人工智能也存在许多问题和担忧。在这里&#xff0c;我们将探讨有关人工智…

【Qt开发】初识Qt

文章目录 1. Qt的背景1.1 Qt是什么1.2 Qt的发展史1.3 Qt支持的平台 2. Qt开发环境的搭建2.1 Qt SDK下载2.2 Qt SDK的安装 3. 一个简单的Qt模板程序的创建4. Qt模板程序的代码讲解4.1 main.cpp4.2 widget.h4.3 widget.cpp4.4 widget.ui4.5 test_1_18.pro4.6 一些中间文件 5. Qt在…

算法训练 day24 | 77. 组合

77. 组合 题目链接:组合 视频讲解:带你学透回溯算法-组合问题 回溯其实和递归是密不可分的&#xff0c;解决回溯问题标准解法也是根据三部曲来进行的。 1、递归函数的返回值和参数 对于本题&#xff0c;我们需要用一个数组保存单个满足条件的组合&#xff0c;还需要另一个结果数…

分布式搜索引擎ElasticSearch——深入elasticSearch

分布式搜索引擎ElasticSearch——深入elasticSearch 文章目录 分布式搜索引擎ElasticSearch——深入elasticSearch数据聚合聚合的分类DSL实现Bucket聚合DSL实现Metric聚合RestAPI实现聚合 自动补全DSL实现自动补全查询修改酒店索引库数据结构RestAPI实现自动补全查询实现酒店搜…

elasticsearch6.6.0设置访问密码

elasticsearch6.6.0设置访问密码 第一步 x-pack-core-6.6.0.jar第二步 elasticsearch.yml第三步 设置密码 第一步 x-pack-core-6.6.0.jar 首先破解 x-pack-core-6.6.0.jar 破解的方式大家可以参考 https://codeantenna.com/a/YDks83ZHjd 中<5.破解x-pack> 这部分 , 也可…

Labview局部变量、全局变量、引用、属性节点、调用节点用法理解及精讲

写本章前想起题主初学Labview时面对一个位移台程序&#xff0c;傻傻搞不清局部变量和属性节点值有什么区别&#xff0c;概念很模糊。所以更新这篇文章让大家更具象和深刻的去理解这几个概念&#xff0c;看完记得点赞加关注喔~ 本文程序源代码附在后面&#xff0c;大家可以自行下…

原型设计 Axure RP 9

Axure RP 9是一款专业的原型设计和协作工具&#xff0c;让用户快速创建高保真度的交互原型&#xff0c;模拟真实的用户界面和交互体验。该软件界面布局合理&#xff0c;易于使用&#xff0c;提供丰富的交互功能和效果&#xff0c;如动态面板、变量、条件逻辑、动画等。同时支持…

C#,字符串匹配(模式搜索)有限自动机(Finite Automata)算法的源代码

一、有限状态自动机 图中两个圆圈&#xff0c;也叫节点&#xff0c;用于表示状态&#xff0c;从图中可以看成&#xff0c;它有两个状态&#xff0c;分别叫0和1。从每个节点出发&#xff0c;都会有若干条边。当处于某个状态时&#xff0c;如果输入的字符跟该节点出发的某条边的内…

如何在Java中加载两个类全限定名相同的类?

我们知道在Java中类全限定名由两部分组成&#xff0c;包名和类名&#xff0c;当然网上也有说法是由三部分组成&#xff0c;包名、子包名以及类名&#xff0c;这里我把包相关的统称为包名。 比如说在某个Java项目中com.knight包下有一个类A&#xff0c;那么这个类A的类全限定名…

解决一个mysql的更新属性长度问题

需求背景&#xff1a; 线上有一个 platform属性&#xff0c;原有长度为 varchar(10)&#xff0c;但是突然需要填入一个11位长度的值&#xff1b;而偏偏这个属性在线上100张表中有50张都存在&#xff0c;并且名字各式各样&#xff0c;庆幸都包含 platform&#xff1b;例如 platf…

创建非模态的静态文本并更改它的位置

我是写在钩子里&#xff0c;动态显示静态文本的哦&#xff0c;效果我放在下面了&#xff0c;不知道怎么做动态图片&#xff0c;你们可以教我一下&#xff0c;哈哈。 //这个就是放在钩子里跟随鼠标动态显示坐标信息&#xff0c;或者提示信息 HWND statichandleNULL; HWND NXha…

php isset和array_key_exists区别

在PHP中&#xff0c;可以使用array_key_exists函数或者isset函数来判断一个字典&#xff08;关联数组&#xff09;中是否存在某个下标。 使用 array_key_exists 函数: $myArray array("key1" > "value1", "key2" > "value2",…

网络爬虫采集工具

在当今数字化的时代&#xff0c;获取海量数据对于企业、学术界和个人都至关重要。网络爬虫成为一种强大的工具&#xff0c;能够从互联网上抓取并提取所需的信息。本文将专心分享关于网络爬虫采集数据的全面指南&#xff0c;深入探讨其原理、应用场景以及使用过程中可能遇到的挑…

校园水电抄表系统

校园水电抄表系统是一种现代化的水电管理方式&#xff0c;它通过高科技手段实现对校园内水电使用情况的实时监测和数据化管理&#xff0c;从而提高水电资源的利用效率&#xff0c;降低管理成本&#xff0c;为构建绿色、环保、节约型校园奠定基础。 一、系统概述 校园水电抄表…

【富文本编辑器实战】03 Vuex 的配置编写

Vuex 的配置编写 目录 Vuex 的配置编写Vuex 是什么&#xff1f;什么是“状态管理模式”&#xff1f;什么情况下我应该使用 Vuex&#xff1f;安装 Vuex开始使用 VuexAction 文件Mutations-types 文件Mutation 文件Index Vuex 是什么&#xff1f; 这里我们来看看官方网站是如何介…

HugggingFace 推理 API、推理端点和推理空间相关模型部署和使用以及介绍

HugggingFace 推理 API、推理端点和推理空间相关模型部署和使用以及介绍。 Hugging Face是一家开源模型库公司。 2023年5月10日&#xff0c;Hugging Face宣布C轮1亿美元融资&#xff0c;由Lux Capital领投&#xff0c;红杉资本、Coatue、Betaworks、NBA球星Kevin Durant等跟投…