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

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)**2scale = 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.rhkb.cn/news/386821.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#实际开发长到的知识

基础科普: 个人建议先把rotion的库导入进来再操作,具体需要导入的库有,helper库包含了modbus通讯封装好的模块,而mvvm则可以用来做设计mvvm模块,你可以使用里面封装好的实现方法,用起来特别简单更容易实现其中的操作,但是我担心那天被卡脖子了啊啊啊,要是我罗工把库下…

【CTFHub】文件上传漏洞详解!

Webshell: 又称一句话木马。WebShell就是以网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。 WebShell根据不同的语言分为:ASP木马、PHP木马、JSP木马(上传解析类型取决于网站服务端编写语言类),该类木马…

(二)延时任务篇——通过redis的key监听,实现延迟任务实战

前言 本节内容是关于使用redis的过期key,通过开启其监听失效策略,模拟订单延迟任务的执行流程。其核心原理是通过使用redis订阅与发布的方式,将过期失效的key通过广播的方式,发布给客户端,客户端可以监听此消息进而消…

LNMP动态网站环境部署

1、LINUX部署 stop firewallddisable selinux 2、Nginx部署 ​ vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enabled1 gpgkeyhttps://nginx.org/keys/nginx_signing.…

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。 JavaScript 之你不一定会的基础题 前言 面试往…

Windows蓝屏问题解决(电脑只要安装了VPN_SV独立客户端)必蓝屏

一、SERNEL_SECURITY_CHECK_FAILURE (139) 蓝屏分析 官方介绍蓝屏现象,官方Windows为了保护电脑,出现故障,自动蓝屏,避免损坏电脑的一种现象,别名buckcheck、蓝屏。 100%复现软件:天融信VPN,同事…

为了方便写CURD代码,我在UTools写了个插件SqlConvert来生成代码!

-1. 前言 为了方便摸鱼,我之前写过一个通过sql生成代码的工具,但是服务器到期了,也就懒得重新部署了。 技术框架是 SpringBoot MybatisPlus Velocity Vue ElementUI Sql-ParseeSql-Parser-ui 0. Utools应用安装 官网地址: https://u.too…

【HZHY-AI300G智能盒试用连载体验】使用YOLOv8进行车辆流量监测

目录 YOLOv8的RKNN模型 程序的部署 流量统计 本文首发于电子发烧友论坛:【新提醒】【HZHY-AI300G智能盒试用连载体验】 智能工业互联网网关 - 北京合众恒跃科技有限公司 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 环境准备好之后,接…

福建聚鼎:现在装饰画好做吗

在当今社会,随着人们审美情趣的提升和生活品质的改善,家居装饰画已经成为了一种流行的墙面装饰方式。许多人都在思考,现在做装饰画是否是一个好时机? “逆水行舟,不进则退。”在日新月异的市场中,装饰画行业的竞争愈发…

商用密码测评之对HTTPS(TLS)协议中各个参数解释

1、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是一个广泛使用的TLS(传输层安全协议)加密套件,它结合了多种技术和算法来确保网络通信的安全。下面是对该加密套件中各个参数的详细解释: 1. TLS 定义:TLS(传…

JMeter 使用

1.JMeter 是什么? JMeter 是一款广泛使用的开源性能测试工具,由 Apache 软件基金会维护。它主要用于测试 Web 应用程序的负载能力和性能,但也支持其他类型的测试,如数据库、FTP、JMS、LDAP、SOAP web services 等。 2.特点&#x…

Infuse Pro for Mac全能视频播放器

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件,将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功 三、运行测试安装完成!!! 效果 一、下载软件 下载软件…

Qt系统机制

Qt系统 Qt文件概述输入输出设备类QFileQFileInfoQt多线程Qt多线程常用API使用Qt多线程 线程安全互斥锁读写锁条件变量信号量 Qt网络QUdpSocketQNetworkDatagram设计一个UDP回显服务器QTcpServerQTcpSocketTcp版本的回显服务器HttpClient核心API Qt 音频Qt视频 Qt文件概述 ⽂件操…

【C++BFS】1020. 飞地的数量

本文涉及知识点 CBFS算法 LeetCode1020. 飞地的数量 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 gr…

【C++初阶】string类

【C初阶】string类 🥕个人主页:开敲🍉 🔥所属专栏:C🥭 🌼文章目录🌼 1. 为什么学习string类? 1.1 C语言中的字符串 1.2 实际中 2. 标准库中的string类 2.1 string类 2.…

前缀表达式(波兰式)和后缀表达式(逆波兰式)的计算方式

缀是指操作符。 1. 前缀表达式(波兰式) (1)不需用括号; (2)不用考虑运算符的优先级; (3)操作符置于操作数的前面。(如 3 2 ) 1.1 中…

《Programming from the Ground Up》阅读笔记:p75-p87

《Programming from the Ground Up》学习第4天,p75-p87总结,总计13页。 一、技术总结 1.persistent data p75, Data which is stored in files is called persistent data, because it persists in files that remain on disk even when the program …

hash表如何形成,hash函数如何计算,什么是hash冲突 如何解决 ,Golang map的底层原理及扩容机制

散列表 散列表(hash表):根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说,散列表建立了关键字和 存储地址之间的一种直接映射关系。 问题:如何建立映射管血 散列函数:一个把查找表中的关键字映射成该关键字对应…

oracle语法介绍

Oracle数据库是关系型数据库管理系统之一,其SQL语法遵循标准的SQL规范,但也有一些自己的扩展。以下是一些Oracle SQL语法的基本示例: 1.选择数据: SELECT * FROM my_table; 1.插入数据: INSERT INTO my_table (colum…

RocketMQ事务消息机制原理

RocketMQ工作流程 在RocketMQ当中,当消息的生产者将消息生产完成之后,并不会直接将生产好的消息直接投递给消费者,而是先将消息投递个中间的服务,通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。 那么生产者是如何…