matlab使用教程(38)—傅里叶变换

1基本概念

        傅里叶变换是一个数学公式,用于将按时间或空间采样的信号变换为按时序或空间频率采样的相同信号。
        在信号处理中,傅里叶变换可以揭示信号的重要特征(即其频率分量)。
        对于包含 n 个均匀采样点的向量 x ,其傅里叶变换定义为
        MATLAB® 中的 fft 函数使用快速傅里叶变换算法来计算数据的傅里叶变换。以正弦信号 x 为例,该信号是时间 t 的函数,频率分量为 15 Hz 和 20 Hz。使用在 10 秒周期内以 1/50 秒为增量进行采样的时间向量。
Ts = 1/50;
t = 0:Ts:10-Ts;
x = sin(2*pi*15*t) + sin(2*pi*20*t);
plot(t,x)
xlabel('Time (seconds)')
ylabel('Amplitude')

        计算信号的傅里叶变换,并在频率空间创建对应于信号采样的向量 f
y = fft(x);
fs = 1/Ts;
f = (0:length(y)-1)*fs/length(y);
        以频率函数形式绘制信号幅值时,幅值尖峰对应于信号的 15 Hz 和 20 Hz 频率分量。
plot(f,abs(y))
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title('Magnitude')

        该变换还会生成尖峰的镜像副本,该副本对应于信号的负频率。为了更好地以可视化方式呈现周期性,您可以使用 fftshift 函数对变换执行以零为中心的循环平移。
n = length(x);
fshift = (-n/2:n/2-1)*(fs/n);
yshift = fftshift(y);
plot(fshift,abs(yshift))
xlabel('Frequency (Hz)')
ylabel('Magnitude')

2.含噪信号的处理

        在科学应用中,信号经常遭到随机噪声破坏,掩盖其频率分量。傅里叶变换可以清除随机噪声并显现频率。例如,通过在原始信号 x 中注入高斯噪声,创建一个新信号 xnoise
rng('default')
xnoise = x + 2.5*randn(size(t));
        频率函数形式的信号功率是信号处理中的一种常用度量。功率是信号的傅里叶变换按频率样本数进行归一化后的平方幅值。计算并绘制以零频率为中心的含噪信号的功率谱。尽管存在噪声,您仍可以根据功率中的尖峰辨识出信号的频率。
ynoise = fft(xnoise);
ynoiseshift = fftshift(ynoise);
power = abs(ynoiseshift).^2/n; 
plot(fshift,power)
title('Power')
xlabel('Frequency (Hz)')
ylabel('Power')

3.计算效率分析

        直接使用傅里叶变换公式分别计算 y n 个元素需要 数量级的浮点运算。使用快速傅里叶变换算法,则只需要 n log n 数量级的运算。在处理包含成百上千万个数据点的数据时,这一计算效率会带来很大的优势。在 n 具有较小的质因数(例如 n 为 2 的幂)时,许多专门的快速傅里叶变换算法实现可进一步提高效率。
        以加利福尼亚海岸的水下麦克风所收集的音频数据为例。在康奈尔大学生物声学研究项目维护的库中可以找到这些数据。载入包含太平洋蓝鲸鸣声的文件 bluewhale.au,并对其中一部分数据进行格式化。由于蓝鲸的叫声是低频声音,人类几乎听不到。数据中的时间标度压缩了 10 倍,以便提高音调并使叫声更清晰可闻。可使用命令 sound(x,fs) 来收听完整的音频文件。
whaleFile = 'bluewhale.au';
[x,fs] = audioread(whaleFile);
whaleMoan = x(2.45e4:3.10e4);
t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);
plot(t,whaleMoan)
xlabel('Time (seconds)')
ylabel('Amplitude')
xlim([0 t(end)])

        指定新的信号长度,该长度是大于原始长度的最邻近的 2 的幂。然后使用 fft 和新的信号长度计算傅里叶变换。 fft 会自动用零填充数据,以增加样本大小。此填充操作可以大幅提高变换计算的速度,对于具有较大质因数的样本大小更是如此。
m = length(whaleMoan);
n = pow2(nextpow2(m));
y = fft(whaleMoan,n);
        绘制信号的功率谱。绘图指示,呻吟音包含约 17 Hz 的基本频率和一系列谐波(其中强调了第二个谐波)。
f = (0:n-1)*(fs/n)/10; % frequency vector
power = abs(y).^2/n; % power spectrum
plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency (Hz)')
ylabel('Power')

4.提取正弦波的相位
        使用傅里叶变换,您还可以提取原始信号的相位频谱。例如,创建一个由频率为 15 Hz 和 40 Hz 的两个正弦波组成的信号。第一个正弦波是相位为 π /4 的余弦波,第二个是相位为 π /2 的余弦波。以 100 Hz 的频率对信号采样 1 秒。
fs = 100;
t = 0:1/fs:1-1/fs;
x = cos(2*pi*15*t - pi/4) - sin(2*pi*40*t);
        计算信号的傅里叶变换。将变换幅值绘制为频率的函数。
y = fft(x);
z = fftshift(y);
ly = length(y);
f = (-ly/2:ly/2-1)/ly*fs;
stem(f,abs(z))
xlabel("Frequency (Hz)")
ylabel("|y|")
grid

        计算变换的相位,删除小幅值变换值。将相位绘制为频率的函数。
tol = 1e-6;
z(abs(z) < tol) = 0;
theta = angle(z);
stem(f,theta/pi)
xlabel("Frequency (Hz)")
ylabel("Phase / \pi")
grid

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

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

相关文章

为说阿拉伯语的国家进行游戏本地化

阿拉伯语是由超过4亿人使用的语言&#xff0c;并且是二十多个国家的官方语言。进入这些国家的市场并非易事——虽然他们共享一种通用语言&#xff0c;但每个国家都有自己独特的文化&#xff0c;有自己的禁忌和对审查的处理方式。这就是为什么视频游戏公司长期以来都远离阿拉伯语…

mac-m1pro芯片编译java项目慢且发热严重问题

目录 一、背景二、排查三、解决四、效果以及结果展示五、总结 一、背景 使用idea编译项目等操作&#xff0c;经常性发热严重&#xff0c;并且时间慢。直到昨天编译一个项目用时30分钟&#xff0c;电脑温度很高&#xff0c;并且有烧灼的味道&#xff0c;于是有了此篇文章。 二、…

Linux应用开发(3):Linux时间操作(time、mktime、localtime等)

1. 简述 在Linux系统中&#xff0c;时间操作函数是编程中经常使用的一部分&#xff0c;它们允许程序获取和设置系统时间&#xff0c;以及对时间进行各种处理。以下是一些常用的时间操作函数的详细介绍。 2. 时间操作 &#xff08;1&#xff09;time(): 获取1970年1月1日以来的…

TalkingData——Unity应用开发中集成统计分析工具

第一步:帐号注册 官方网站:TalkingData-移动.数据.价值 第二步:创建应用查看 appid 可以进入网站注册,注册好以后就可以创建应用 创建好应用后,点击 应用管理-》基本信息就可以查看自己的 AppID 第三步:申请对应平台的sdk 接下来就是申请sdk 这里是申请sdk的网站…

Unity MySql安装部署与Unity连接 上篇

1.前言 最近项目用到MySql&#xff0c;记录一下安装部署过程。 数据量过大或者需要管理用户数据的时候用mysql的话数据结构比较清晰明了&#xff0c;便于管理。 2.安装MySql Unity版本&#xff1a;2019.4.16 MySql版本&#xff1a;8.2.0 下载地址&#xff1a;MySql 下载…

使用Nodejs + express连接数据库mongodb

文章目录 先创建一个js文档安装 MongoDB 驱动程序&#xff1a;引入 MongoDB 模块&#xff1a;设置数据库连接&#xff1a;新建一个表试试执行数据库操作&#xff1a;关闭数据库连接&#xff1a; 前面需要准备的内容可看前面的文章&#xff1a; Express框架搭建项目 node.js 简单…

数字化智慧养老:引领老年人融入科技时代新生活

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 人类社会已经步入了一个全新的数字时代。在这个时代&#xff0c;互联网、大数据、人工智…

Docker 引擎一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

Spring Cloud 集成 RabbitMQ

目录 前言步骤引入相关maven依赖添加相关配置 使用方法配置消息序列化创建第一个消息队列和交换机使用方法 总结 前言 在当今的微服务架构盛行的时代&#xff0c;消息队列作为一种重要的通信机制&#xff0c;在分布式系统中扮演着不可或缺的角色。RabbitMQ&#xff0c;作为一款…

数据静态脱敏技术广泛的应用价值

数据静态脱敏是一种重要的数据保护技术&#xff0c;其核心目标是在保证数据库系统正常运行的前提下&#xff0c;对敏感数据进行脱敏处理&#xff0c;从而降低数据泄露的风险。在数字化时代&#xff0c;数据成为企业最宝贵的资产之一&#xff0c;然而&#xff0c;数据的敏感性和…

每日一题(leetcode2009):使数组连续的最小操作数--滑动窗口

从相反面考虑&#xff0c;一条已知长度的线段最多能覆盖多少数值&#xff0c;最先用长度减一下就行。线段覆盖问题用滑动窗口就行。代码如下&#xff1a; class Solution { public:int minOperations(vector<int>& nums) {int lennums.size();sort(nums.begin(),num…

安全威胁情报的漏洞挖掘

前段时间edu上出现了两个网安总队收取安全情报&#xff0c;不收漏洞&#xff0c;下面简单分析一下如何挖掘安全情报。 在发现在edu中新增了两个网安总队收安全情报等漏洞&#xff0c;那威胁情报又会包含哪些内容呢&#xff1f;以前或许会看到各种ss网站、bc网站、yx网站满天飞&…

MySQL - 基于undo log多版本链条实现的ReadView机制到底是什么?

ReadView简单来说,就是你执行一个事务的时候,就给你生成一个ReadView,里面比较关键的东西有4个: 一个是m_ids,这个即使说此时有哪些事务在MySQL里执行还没提交的; 一个是min_trx_id,就是m_ids里最小的值; 一个是max_trx_id,就是说mysql下一个要生成的事务id,就是最大…

蓝桥杯DFS自练三题-串变换,玩具蛇,分糖果

题目一:串变换 代码解析: #include <iostream> using namespace std; struct Option{int select;int x;int y; }; string S,T; int N,K;//N是串的长度&#xff0c;K是操作指令的大小 Option opt[10];//存储所有的指令 bool vis[10];//标记数组&#xff0c;重要&#xff…

4.1-4.5算法刷题笔记(17道题)

4.1-4.5算法刷题笔记 1. 区间和2. 区间合并3. 用队列实现栈&#xff08;queueMain queueTemp;&#xff09;4. 最小栈 1. 单链表模板5. 单链表 2. 双链表模板6. 双链表 3. 模拟栈7. 模拟栈(一个数组即可)8. 表达式求值 4. 队列 tt -1,hh 0;9. 模拟队列 5. 单调栈10. 单调栈 6…

视觉大模型--DAB-deter的深入理解

原理大家参考这篇文章&#xff0c;我主要是根据自己的理解和整个流程图以及代码进行对应&#xff0c;这样更有利于深入理解&#xff1a; 下图是解码器结构图&#xff0c;编码器没动和deter一样的 这张图片基本上说清了模型的结构和传递过程&#xff0c;红色代表切断梯度反向传…

用TensorBoard可视化PyTorch

一、TensorBoard与PyTorch配合使用的基本步骤 PyTorch可以直接与TensorBoard进行集成&#xff0c;因为TensorBoard是一个独立于TensorFlow之外的可视化工具。TensorBoard被设计为支持机器学习实验的可视化&#xff0c;如训练的进度和结果等。PyTorch中的torch.utils.tensorboa…

SSM党员管理系统

一、系统介绍 党员管理系统: 可以方便管理人员对党员管理系统的管理&#xff0c;提高信息管理工作效率及查询效率&#xff0c;有利于更好的为用户提供服务。 主要的模块包括&#xff1a; 1、后台功能&#xff1a; 管理员角色&#xff1a;首页、个人中心&#xff0c;党员管理…

“成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

Vue-B站学习笔记

1. 路由配置 B站视频之Vue route文件下的index.js app.vue