python实现时间序列信号的频谱、倒频谱以及功率谱

2023-11-12


以振动信号为例


认识傅里叶变换

这里我就不多说了 百度谷歌一大堆说的明明白白。

一、频谱

频谱,在复杂的振动中又称振动谱 。反映振动现象最基本的物理量就是频率,例如简单周期振动只有一个频率。
将信号通过快速傅里叶变换会得到幅频谱和相频谱两种图,不过常用的的是幅频谱。若对加速度进行变换,得到的振动幅频谱中,横坐标表示分振动的圆频率***f(Hz)***,纵坐标则表示分振动的加速度振幅***A(m/s^2)***

1.引入库

两种方式:用numpy库 或 scipy库(示例):

#基于numpy的方法
import numpy.fft as fft
#基于scipy的方法
from scipy.fftpack import fft

2.频谱函数封装

def get_fft_values(y_values, N, f_s):
    f_values = np.linspace(0.0, f_s/2.0, N//2)
    fft_values_ = fft.fft(y_values)
    fft_values = 2.0/N * np.abs(fft_values_[0:N//2])
    return f_values, fft_values

其中y_values是时间序列下的振动信号值,N为采样点数,f_s是采样频率,返回f_values希望的频率区间, fft_values真实幅值,代码运行结果。
在这里插入图片描述

二、功率谱

一开始我常常把功率谱和能量谱搞混。
能量谱是原信号傅立叶变换的平方。
功率谱是原信号傅立叶变换的平方并除以采样点数N,称功率谱密度函数,它定义为单位频带内的信号功率。它表示了信号功率随着频率的变化情况,即信号功率在频域的分布状况。
此外维纳-辛钦定理指出:一个信号的功率谱密度就是该信号自相关函数的傅里叶变换。

功率谱谱函数封装

代码如下:

def get_fft_power_spectrum(y_values, N, f_s, fs_n):
    f_values = np.linspace(0.0, f_s/fs_n, N//fs_n)
    fft_values_ = np.abs(fft(y_values))
    fft_values = 2.0/N * (fft_values_[0:N//fs_n])    #频率真实幅值分布
    # power spectrum 直接周期法
    ps_values = fft_values**2 / N
    # power spectrum using correlate
    cor_x = np.correlate(y_values, y_values, 'same')    #自相关
    cor_X = fft(cor_x, Sampling_points)
    ps_cor = np.abs(cor_X)
    ps_cor_values = 10*np.log10(ps_cor[0:N//fs_n] / np.max(ps_cor))
    
    return f_values, fft_values, ps_values, ps_cor_values

其中返回ps_values是直接周期法功率, ps_cor_values是自相关下的对数功率。

在这里插入图片描述
从图中可以看出直接周期法功率的方差大,频率分辨率差,会将一些低幅值的频率给淹没,可以采用对数的方式解决,做对数处理的目的是使低振幅成分得以拉高,便于观察噪声中的周期信号。如自相关下的对数功率谱,虽然有明显的变化,但波形较为杂乱。
直接周期法和自相关法都是经典的功率谱估计方法,为了克服以上的缺点出现了现代参数法功率谱估计,比较有效且实用的是AR模型法,Burg谱估计法

三、倒频谱

倒频谱是指信号的对数功率谱的逆它具有时间因次,为了与通常频率的频谱相区别,有时称它为时谱。

倒频谱与对数功率谱是一对傅里叶变换,正如上述自相关函数与功率谱是一对傅里叶变换。其差异在于倒频谱是功率谱在对数坐标下的傅里叶逆变换,而自相关函数是功率谱在线性坐标下的傅里叶逆变换

该方法方便提取、分析原频谱图上肉眼难以识别的周期性信号,能将原来频谱图上成族的边频带谱线简化为单根谱线,受传感器的测点位置及传输途径的影响小

倒频谱谱函数封装

def get_fft_cepstrum(y_values, N, f_s, fs_n):
    f_values = np.linspace(0.0, f_s/fs_n, N//fs_n)
    fft_values_ = np.abs(fft(y_values))
    fft_values = 2.0/N * np.abs(fft_values_[0:N//fs_n])    #频率真实幅值分布
    
    spectrum = fft(y, N)
    ceps_values = np.fft.ifft(np.log(np.abs(spectrum))).real #信号→傅里叶→对数→傅里叶逆变换
    
    return f_values, fft_values, ceps_values 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实现时间序列信号的频谱、倒频谱以及功率谱 的相关文章

随机推荐

  • Wireshark基础使用,SSL解密及http抓包入门教程

    Wireshark VS Fiddler Charles 一 下载与安装 二 抓取https等解密 三 报文传输各层简要介绍 Wireshark VS Fiddler Charles Wireshark功能很多 作用效果很底层 并且可以监听
  • 原码, 反码, 补码 详解

    本篇文章讲解了计算机的原码 反码和补码 并且进行了深入探求了为何要使用反码和补码 以及更进一步的论证了为何可以用反码 补码的加法计算原码的减法 论证部分如有不对的地方请各位牛人帮忙指正 希望本文对大家学习计算机基础有所帮助 一 机器数和真值
  • 人工智能数学基础--导数2:高阶导数及莱布尼茨(Leibniz)公式

    一 定义 一般地 函数y f x 的导数y f x 仍然是x的函数 我们把y f x 的导数叫做函数y f x 的二阶导数 记作y 或 即 相应地 把y f x 的导数f x 叫做函数y f x 的一阶导数 类似地 二阶导数的导数叫做三阶导
  • 新一代CTO修炼之路all-in-AI系列-大数据+AI人工智能驱动技术变革之大数据部门组织架构及团队建设

    文章目录 1 2 1大数据部门组织架构 1 大数据平台组 2 算法组 3 数据分析组 4 更细化的大数据部门划分 总结 随着大数据和人工智能技术的火热发展 传统的老一代CTO 除了有过硬的工程能力外 尚需充电学习大数据和AI人工智能技术 大
  • Qt6教程之三(2) QT使用qss

    QSS是Qt Style Sheets的缩写 中文含义是Qt样式表 它用来自定义控件外观的机制 QSS与网页中使用的CSS非常相似 可以把QSS看作是CSS在Qt领域领域的定制版本 QSS的语法规则 选择器 规则定义1 规则2 规则n 如下
  • Docker Swarm 创建服务

    Docker Swarm 创建服务 环境 系统 Centos 7 4 x64 应用版本 Docker 18 09 0 管理节点 192 168 1 79 工作节点 192 168 1 78 工作节点 192 168 1 77 1 管理节点
  • LeetCode 1800. 最大升序子数组和

    题目链接 https leetcode cn problems maximum ascending subarray sum 时间复杂度为 O n O n O n 空间复杂度为 O
  • 大学生科技创意大赛查新报告

    大学生科技创意大赛是什么 太多种类分不清 快来看 大学生科技创意大赛需要查新怎么办 去哪儿能办 大学生科技创意大赛的查新需要准备什么材料 大学生科技创意大赛科技查新报告是什么样子的 一 大学生科技创意大赛是什么 太多种类分不清 快来看 大学
  • 如何获取使用某个table的所有存储过程

    select distinct object name id from syscomments where id in select object id from sys objects where type P and text like
  • 目标识别、目标跟踪算法总结

    想自学图像处理的相关知识 正好实验室师兄做过两个关于红外目标跟踪的项目 因此从mean shift SR RP PF开始学习 但是查阅资料的时候 发现对各种算法理解非常 利用图像处理算法 实现的功能一般包括 目标的检测 识别 跟踪 常见的问
  • 机器学习顶刊文献_哪些成为了经典-引用次数最多的10篇机器学习文献

    近40年来机器学习领域产生了数以万计的论文 并以每年上万篇的速度增长 但真正能够称为经典 经受住历史检验 能投入实际应用的并不多 本文整理了机器学习历史上出现的经典论文 按照被引用次数对它们进行了排序 分为top10 被引用次数超过2万 被
  • FreeModbus的移植

    FreeModbus V1 6 主机使用说明 一 简述 FreeModbus是一款开源的Modbus协议栈 但是只有从机开源 主机源码是需要收费的 同时网上也没有发现比较好的开源的Modbus主机协议栈 所以才开发这款支持主机模式的Free
  • 【Docker】使用Docker在远程服务器上安装MySQL8并使用本地navicat连接

    使用Docker在远程服务器上安装MySQL8并使用本地navicat连接 一 下载MySQL8镜像 二 启动MySQL容器 三 配置MySQL数据库的远程访问 使用本地navicat连接服务器MySQL 四 docker中删除已创建的容器
  • 虚拟机使用情况(持续更新)

    装了虚拟机后今天打开发现文字变成了英文的 并且装好的系统打不开机 出现提示 本来用的好好的 怎么就出问题了呢 回忆起来最后使用时为了方便整理磁盘 把安装在E盘的所有虚拟机文件都放在一个命名文件里 我恢复原样后就正常使用了 可能是之前下载的时
  • 操作系统之PV操作

    基本概念 进程状态 进程通常分为就绪 运行和阻塞三个工作状态 三种状态在某些条件下可以转换 三者之间的转换关系如下 进程三个状态之间的转换就是靠PV操作来控制的 PV操作主要就是P操作 V操作和信号量 其中信号量起到了至关重要的作用 信号量
  • 微信小程序分享页面代码

    在微信小程序中实现分享功能需要以下几个步骤 1 在 app json 文件中配置分享参数 例如标题 路径等 示例如下 json pages pages index index window navigationBarTitleText 小程
  • java print\println\printf的区别

    printf主要是继承了C语言的printf的一些特性 可以进行格式化输出 print就是一般的标准输出 但是不换行 print将它的参数显示在命令窗口 并将输出光标定位在所显示的最后一个字符之后 println www infocool
  • 源NAT,目的NAT和PAT以及端口映射的区别?

    一 NAT 1 动态NAT 地址复用 指将内部私有IP转换为公网IP地址时 IP的对应关系是不确定的 也就是说只要指定哪些内部地址可以进行NAT转换 以及哪些可以的合法的IP地址可以作为外部地址 就可以进行动态转换了 也可以使用多个合法地址
  • unity3d运行后自动暂停_Unity3D 关于延迟、暂停执行脚本的几个方法总结

    1 InvokeRepeating函数 和 Invoke函数 个人认为最为有效方法 用法 InvokeRepeating delayOpen 1 5 1秒后调用 delayOpen 函数 之后每5秒调用一次 写在Start函数内 Invok
  • python实现时间序列信号的频谱、倒频谱以及功率谱

    python实现时间序列信号的频谱 倒频谱以及功率谱 认识傅里叶变换 一 频谱 1 引入库 2 频谱函数封装 二 功率谱 功率谱谱函数封装 三 倒频谱 倒频谱谱函数封装 以振动信号为例 认识傅里叶变换 这里我就不多说了 百度谷歌一大堆说的明