scipy.fft.fft函数与scipy.fft.rfft函数的异同

news2025/1/11 2:48:08
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
'''
思路:1)先利用fft计算得出其幅频值
     2)在利用rfft计算得出其幅频值,看1)和2)那个能还原出信号的原始幅值
'''
# 生成一个示例信号
np.random.seed(0)
fs = 512  # 采样频率
N = 512  # 信号长度
time = np.arange(N) / fs
sig = 10 * np.sin(2 * np.pi * 50 * time) + 5 * np.random.randn(N)

############ 1)利用fft计算得出其幅频值 ############
fft_signal = fft(sig)
fft_p = np.abs(fft_signal/N)
# 计算单边频谱
fft_p2 = fft_p[:N//2 + 1]
fft_p2[1:-1] = 2*fft_p2[1:-1]
fft_freqs = np.arange(0, N//2 + 1)*(fs / N)

############ 2)利用rfft计算得出其幅频值 ############
rfft_signal = rfft(sig)
rfft_p = np.abs(rfft_signal/N)
rfft_p2 = rfft_p
rfft_p2[1:-1] = 2*rfft_p2[1:-1]

plt.figure(1)
plt.subplot(211)
plt.plot(fft_freqs, fft_p2)
plt.title("fft method")
plt.subplot(212)
plt.plot(fft_freqs, rfft_p2)
plt.title("rfft method")

plt.show()

在这里插入图片描述
结论:利用fft方法和rfft方法皆可以反映出信号的真实幅值大小

############ 3)利用welch计算得出其功率谱 ############
f_welch, Pxx_welch = welch(sig, fs, nperseg=N)

############ 4)利用rfft计算得出其功率谱 ############
win = signal.get_window('hann', N)          # 获取窗函数
det_sig = detrend(sig, type='constant')     # 去除线性趋势
sig_win = win*det_sig                       # 加窗操作
rfft_win = rfft(sig_win)                    # 快速傅里叶变换,获取单边频谱

rfft_abs = np.conjugate(rfft_win)*rfft_win    # 模的平方(此处的rfft_abs为复数)
# rfft_abs = abs(rfft_win)**2

scale = 1.0 / (fs * (win*win).sum())          # 窗函数的缩放因子
Pxx_rfft = rfft_abs * scale                   # 乘于窗函数的缩放因子,保持加窗后的能量不变
Pxx_rfft[1:-1] = 2 * Pxx_rfft[1:-1]           # 获取双边频谱值
Pxx_rfft = Pxx_rfft.real                      # 获取实部

plt.figure(2)
plt.subplot(211)
plt.plot(f_welch, Pxx_welch)
plt.title('welch method')

plt.subplot(212)
plt.plot(f_welch, Pxx_rfft)
plt.title('rfft method')

plt.show()

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/532f39e144bc4f369099e3ec73eb1636.png

结论:利用welch方法实现的功率谱和利用rfft方法实现的功率谱结果一致。只所以welch方法未能在数据上反映出真是数值,是因为没有除于样本点个数进行归一化。

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

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

相关文章

阅读笔记:明朝那些事儿之拐弯中的帝国

​万历皇帝时期内阁首辅: 张居正,申时行,王锡爵,许国,王家屏,赵志皋(给皇帝写辞职信没有回音,自己不告而回家),沈一贯,于慎行,叶向高…

Sfera - 将树莓派引入工业自动化环境

Raspberry Pi 是我们客户最青睐的工业应用平台 Sfera Labs 的客户需要从纯工业应用到边缘计算再到关键安全应用的各种解决方案。Raspberry Pi 是一个灵活、可靠的开放平台,可以满足所有这些需求。 解决方案 Raspberry Pi 3B Raspberry Pi 4 Raspberry Pi Compute Module 3 Ras…

高可用集群--KeepAlived

文章目录 集群类型VRRP为什么需要VRRP KeepAlivedKeepAlived介绍KeepAlived架构编译安装1.下载源码包并解压2.查看install文件的安装说明3.执行“./configure”4.make && make install5.指定keepalived.conf配置文件6.修改keepalived的server文件报错 WARNING - interf…

面试面到自闭,字节软件测试岗五轮面试,四个小时灵魂拷问...

准备过程 我自己是本科毕业后在老东家干了两年多,老东家算是一家”小公司”(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时候是非常非常虚的。迫于心慌,我好好思考了一阵来…

go JSON

JSON JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 json历史 JSON建构于两种结构 “键/值”对的集合…

智能井盖管理系统:城市窨井的井下“保镖”

随着城市化进程的加速,城市的生命线基础设施面临着越来越多的挑战。其中,旭华智能智能井盖传感器技术的发展为提升城市基础设施的安全性和管理效率提供了新的解决方案。它专门用于监控市政窨井、燃气井、供水井内的积水状况以及井盖状态,以增…

Go+Redis零基础到用户管理系统API实战_20240730 课程笔记

概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227 基础不好的同学每节课的代码最好配合视频进…

在Adaptive AUTOSAR中,默认有一个机器状态的功能组管理平台进程的生命周期,那怎么切换到其他功能组的状态呢?

在Adaptive AUTOSAR中,状态管理(State Management, SM)模块和执行管理(Execution Management, EM)模块共同负责功能组状态的切换。 以下是切换到其他功能组状态的步骤: 状态切换流程 状态请求: 状态管理模块接收到来自应用程序、功能集群、平台健康管理、诊断等的状态切…

代码随想录算法训练营第33天|62.不同路径、63. 不同路径 II、343. 整数拆分、96.不同的二叉搜索树

打卡Day33 1.62.不同路径2.63. 不同路径 II3.343. 整数拆分4.96.不同的二叉搜索树 1.62.不同路径 题目链接:62.不同路径 文档讲解: 代码随想录 动规五部曲: (1)确定dp数组和下标的含义 dp[ i ][ j ] 表示到达 i x j …

JNDI注入-高版本绕过

参考博客: JNDI注入与动态类加载 探索高版本 JDK 下 JNDI 漏洞的利用方法 - 跳跳糖 (tttang.com) 分析版本 jdk8u201 分析流程 修复 在ldap绕过中,我们讲了LDAP的修复,下面用jdk8u201具体来看下修复。 修复之前,利用是在L…

档案馆可视化管理系统

通过图扑可视化技术,实现档案馆内文件、资料的高效管理与实时监控,提升档案数据的查询、存档和维护效率。

【建议收藏】大数据Hadoop实战入门手册,配套B站视频教程1小时速通

大数据Hadoop入门实战专栏 大数据技术概述大数据简介Hadoop简介 大数据集群环境搭建环境搭建概述虚拟机准备集群搭建Java开发环境准备 分布式文件系统HDFS学习前期概述HDFS Shell命令HDFS可视化界面HDFS Java API编程环境初始化API基本使用创建目录更改目录权限上传文件查看目录…

docker pgsql实现pg_jieba全文检索

安装pg_jieba分词器 安装依赖工具 查看docker运行的所有容器 docker ps进入pg数据库容器 docker exec -it postgres4postgis bash安装必要的工具和依赖 apt-get install -y git build-essential cmake libpq-dev postgresql-server-dev-all安装pg_jieba分词 git clone ht…

Apache DolphinScheduler用户线上Meetup火热来袭!

Apache DolphinScheduler 社区 8 月用户交流会精彩继续!本次活动邀请到老牌农牧产品实业集团铁骑力士架构工程师,来分享Apache DolphinScheduler在现代农牧食品加工场景中的应用实践。此外,还将有社区活跃贡献者以Apache DolphinScheduler为例…

为什么AI会一本正经地胡说八道

泛泛地说,AI一本正经地胡说八道的原因可以归结为:AI的理解能力受到其训练数据和算法的限制,如果问题表达不清晰或者背景信息不足,AI可能会产生错误的推理或输出;AI语言模型本质上是基于统计学习和模式匹配的&#xff0…

基于新型电力系统的有序充电解决方案

安科瑞 耿敏花 摘要:近年来,新能源汽车的销量快速增长,相应的充电桩数量也急剧增加,这一现象可能会给电网和变压器造成负担,与此同时,新型电力系统下以光伏为主的分布式发电系统占比也在逐渐提高,新能源的不稳定性叠加充电需求的不确定性会给…

MySQL基础练习题13-指定日期的产品价格

题目:找出在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 准备数据 分析数据 题目:找出在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 准备数据 ## 创建库 create tadabase d…

矩阵管理系统真的好用吗

在这个短视频盛行的时代,每个人都可能是下一个网红。但是,当你的账号遍布各大平台,每个平台都要求你不断更新内容时,你可能会问:有没有一种工具,可以让这一切变得更简单?这就是矩阵管理系统出现…

项目中AOP相关问题

答:AOP是面向切面编程,可以通过定义方法拦截器和切入点,实现将一些逻辑相同的代码块抽取到同一个模块中,这个模块就是切面。代码可以只关注业务实现,不用关注那些通用逻辑。 答:切面,通用模块&…

模型部署优化综述

一、引言 模型部署优化是一个涵盖众多环节的宽泛领域,从模型训练完成到实际硬件部署,涉及多个层面的工作,且每个环节对技术的要求各异。其本质是通过减小模型大小、提高推理速度等手段,使模型能在各种硬件中成功部署并实时有效运行。 二、模型剪枝技术 (一)模型剪枝的…