首页 > 其他分享 >计算时序数据的周期性

计算时序数据的周期性

时间:2024-07-04 17:58:20浏览次数:16  
标签:plt signal fft period 时序 周期性 计算 np import

构造时序数据

import numpy as np
import matplotlib.pyplot as plt

# 设置参数
period = 128
num_cycles = 5
total_length = period * num_cycles

# 生成周期性信号(正弦波形)
np.random.seed(42)
time = np.arange(0, total_length, 1)
signal = 10 * np.sin(2 * np.pi * time / period)

# 加上噪声
noise = np.random.normal(0, 1, len(time))
signal_with_noise = signal + noise

# 打印生成的数据列表
signal = signal_with_noise.tolist()
# print(signal)

# 绘制周期性信号
plt.figure(figsize=(14, 4))
plt.plot(time, signal_with_noise, label='Sinusoidal Signal with Noise')
plt.xlabel('Time')
plt.ylabel('Value')
plt.title('Generated Periodic Signal with Noise')
plt.legend()
plt.show()

方法一:自相关函数

import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import acf
from scipy.signal import find_peaks

# 计算自相关函数
nlags = len(signal)/2  # 数据长度的一半
acf_values = acf(signal, nlags=nlags)

# 寻找显著峰值
peaks, _ = find_peaks(acf_values, height=0.5)  # height 参数决定阈值,可以调整

# 拟合周期(根据发现的峰值)
if len(peaks) > 1:
    peak_intervals = np.diff(peaks)  # 计算相邻峰值之间的距离
    estimated_period = np.mean(peak_intervals)
    print(f"Estimated period: {estimated_period:.2f} data points")
else:
    print("No significant period found. Consider adjusting the peak detection threshold.")

# 绘制自相关函数图
plt.figure(figsize=(14, 4))
plt.stem(acf_values, use_line_collection=True, markerfmt='C0o')
plt.plot(peaks, acf_values[peaks], "x", label='Significant Peaks', color='red')
plt.xlabel('Lags')
plt.ylabel('ACF')
plt.title('Autocorrelation Function with Detected Peaks')
plt.legend()
plt.show()

方法二:傅里叶变换

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft, fftfreq


# 计算傅里叶变换
N = len(signal)
signal_fft = fft(signal)
frequencies = fftfreq(N, d=1)

# 仅保留非负频率部分
frequencies = frequencies[:N//2]
signal_fft = signal_fft[:N//2]

# 绘制频谱
plt.figure(figsize=(14, 4))
plt.stem(frequencies, np.abs(signal_fft), use_line_collection=True)
plt.xlabel('Frequency')
plt.ylabel('Amplitude')
plt.title('Frequency Domain (FFT)')
plt.tight_layout()
plt.show()

# 找到频率域中的峰值
peak_freq = frequencies[np.argmax(np.abs(signal_fft))]
estimated_period = 1 / peak_freq
print(f"Estimated period: {estimated_period:.2f} data points")

 

标签:plt,signal,fft,period,时序,周期性,计算,np,import
From: https://www.cnblogs.com/standby/p/18284352

相关文章

  • 云计算【第一阶段(24)】Linux文件系统与日志分析
    一、文件与存储系统的inode与block1.1、硬盘存储最小存储单位:扇区(sector)每个扇区大小:512字节1.2、文件存取最小存取单位:块(block)连续八个扇区组成:块(block)每个块大小:4K文件数据:实际数据与元信息操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取......
  • 云计算【第一阶段(26)】Linux网络设置
    一、查看网络配置1.查看网络接口信息ifconfig查看所有活动的网络接口信息2.ifconfig命令查看指定网络接口信息ifconfig  网络接口(1)第一行:以太网卡的名字ens33其中en代表以太网卡,centos6的是eth0,ens33代表PCI接口的物理位置为(0,3),其中横座标代表bus,纵座标代......
  • 273:vue+openlayers 显示流动轨迹并计算航向
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第273个示例文章目录一......
  • 【每日一练】python写一个计算烟龄小程序
     PS:因不懂英语,命名用中文,各位见笑了代码:print("算一算这辈子你吸了多少烟?")   姓名=input("请输入您的名字:")烟龄=int(input("您的烟龄(年):"))   每天=int(input("您一天多少包:"))总烟数=20*每天*365*烟龄/10000print(f"{姓名},您一共大约吸了{总烟数}万根......
  • 【计算机毕业设计】基于python+Django旅游景点推荐系统+LW
    博主介绍:✌全网粉丝3W+,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视......
  • 【计算机毕业设计】Python基于Django框架图书管理系统
    博主介绍:✌全网粉丝3W+,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视......
  • 【计算机毕业设计】基于python+Django的协同过滤商品推荐系统+LW
    博主介绍:✌全网粉丝3W+,csdn特邀作者、CSDN新星计划导师、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视......
  • springboot+伊犁地区游客小助手-小程序-计算机毕设定制-附项目源码(可白嫖) 20888
    摘 要提起伊犁,很多人常说,不去新疆,你就不知道中国有多美,不去伊犁,你就不知道新疆有多美。在这里你可以看到中国最美的景色。如果可可托海海是一个野性和粗犷的战士,那么那拉提一定是一个温柔和玉般的绅士。新疆的南边给了它不同寻常的品质。赛里木湖位于新疆西部的博尔塔拉县......
  • PHP网上花店管理系统-计算机毕设定制-附项目源码(可白嫖) 21170
    目 录摘要1绪论1.1研究背景1.2项目背景1.3Thinkphp框架介绍1.4论文结构与章节安排2 网上花店管理系统系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3数据删除流程2.3系统功能分析2.3.1功能性分析2.3.......
  • [计算机网络]TCP/IP
    OSI七层模型应用层表示层会话层传输层网络层数据链路层物理层TCP/IP四层模型应用层传输层网络层数据链路层物理层全双工全双工(Full-Duplex)是指在通信中,数据传输能够在两个方向上同时进行,允许双方在同一时间既能发送数据,又能接收数据。这种方式使得通信的双方可以实......