参考文献和内容:

[1] Vlachos, Michalis & Yu, Philip & Castelli, Vittorio. (2005). On Periodicity Detection and Structural Periodic Similarity. Proceedings of the 2005 SIAM International Conference on Data Mining, SDM 2005. 10.1137/1.9781611972757.40.

(PS:仅用于自己实验的粗糙笔记)

一、背景知识

1. 功率谱密度 (Power Spectral Density)

参考:

做EEG频谱分析,看这一篇文章就够了! - 我爱神经科学网-脑科学-脑电EEG-事件相关电位ERP-磁共振MRI-fMRI-DTI-机器学习-深度学习

其本质表现了了信号中 不同频率包含的功率。可以通过这种方法分析时间序列的周期。

能量大的频率 >> 频率是周期的倒数 >> 最主要的周期。

两种已知的功率谱密度估计方法:PeriodogramACF(使用DFT / 时间序列计算得到)

目前来说,功率谱分析的方法大致可以分为两大类:第一类是经典的功率谱计算方法,第二类是现代功率谱计算方法。

第一类经典功率谱分析方法,又可以分为直接法、间接法和改进的直接法。

直接法又称之为周期图法Periodogram),简单地说,其直接利用信号的傅里叶变换系数的幅度平方来计算信号的功率谱。间接法又称为自相关函数法,其先估算出信号的自相关函数,然后对自相关函数求傅里叶变换从而得到信号的功率谱。改进的直接法,是针对直接法存在的缺点改进而来的方法,包括Barlett法、Welch法和Nuttall法。

1.1 Periodogram(直接法计算PSD)

        通过计算时间序列的 DFT 结果 X 得到

其计算结果的每一个值说明了 信号不同频率 (k/N)所包含的能量

例子: Periodogram 结果图中 Power最大的是 k/N 大概等于 0.14 左右,第二大是 0.03~0.04左右,周期为频率的倒数,因此,原时间序列所隐藏的周期一个为7 ,另一个周期为30.3333。

劣势:在分析/提取隐藏的周期值比较大时表现效果不够好。

1.2 ACF (circular AutoCorrelation Function

其本质是计算对于不同的滞后系数,评估时间序列与之前值的相似性。

优势:ACF 比 Periodogram 更精确,尤其是对于所隐藏的周期数较大的时间序列。

劣势:自动化寻找峰值比周期图难,需要使用者手动设置阈值;即便使用者选择了阈值,在周期大小为基础周期的倍数的情况下也都会出现峰值,因此需要引入去除假警报的后置模块;频率高但振幅小的活动表现的能量可能没有高振幅低频率的活动更明显。

例子:ACF 图中周期数为 7 的能量大小不如周期为 30 的明显,因为对比时间序列图可以发现虽然周期数等于 7 的活动出现得更多,但是振幅(数量)小,而周期等于 30 的活动出现更少但振幅大,其能量在 ACF 图中更明显。

总结 :Periodogram 适合提取潜在周期小,ACF 适合提取大周期。

二、提出的方法(AUTOPERIOD

        该方法实在频域上分析周期显著性,再在时域上明确识别周期。

        由于在 ACF 上寻找显著周期比在 Periodogram 上寻找困难,他们使用 Periodogram 来提取周期。然后使用 ACF 来进行验证,因为ACF图的周期估计更精确。如果从 Periodogram 中得到的周期数在 ACF 的一个小峰值上,则可以将它视为一个有效周期,否则视为假警报。

  • 计算时间序列的 DFT (也可以不)
  • 计算 Periodogram ,寻找峰值点
  • 计算 ACF 判断是否在其峰值(线性上升阶段);如果是,则认为是有效周期,否则视作假。

例子:基于MSN Query “Easter” 进行分析,Periodogram 的几个最大的峰值分别是333.333,166.667以及90.9091。但是匹配到ACF上,333.333需要矫正为 ACF 的图的峰值 357,其他两个视为假警报舍弃。

其他:联合 Periodogram 和 ACF 的分析方法并不会比单独使用时候多携带额外的信息。

三、代码实现

Matlab 参考:

matlab入门图文教程 - 知乎

matlab 几行代码作图进阶2 - 知乎

matlab进阶3-几行代码实现图中图、局部放大图 - 知乎

1. 计算 Periodogram

Periodogram 参考:

Periodogram power spectral density estimate - MATLAB periodogram- MathWorks 中国
经典法谱估计(1)周期图法MATLAB及Python实现_流年亦梦的博客-CSDN博客_周期图法

寻找峰值 参考:

Matlab------------寻找峰值函数_知耻而后勇的蜗牛的博客-CSDN博客_matlab寻找峰值点

Matlab 中有专门的函数 periodogram 实现直接法的 PSD 计算。

参考公式

Xk = abs(fft(Data)); % 求dft变换后的模
N = length(Data);
k = 1:N;
Sx = Xk.^2/N; % 求模的平方/N
% 归一化 PS:Sx 为对称图像,且在0能量无限大,绘制时选择从较后的地方开始,N的大小跟着Sx大小变化
fk_N = k/N;
minv = min(Sx(4:88));
maxv = max(Sx(4:88));
Sx_nor = (Sx(4:88) - minv)/(maxv - minv);% 绘图
plot(fk_N,Sx_nor,'k','linewidth',1.2);
grid on
xlim([0.0118 0.5082]); % 自行修改合适的范围
ylim([0.000 1.1000]); % 自行修改合适的范围
ylabel('Power');
title('Periodogram');
set(gca, 'fontsize',14);% 标峰值点
[pks,locs] = findpeaks(Sx_nor, fk_N, 'npeaks', 3);
hold on
plot(locs, pks, 'ro', 'MarkerFaceColor', 'r', 'Markersize', 10)
p1 = 1/locs(1);
text(locs(1)+0.005, pks(1) + 0.1, strcat('p1 = ',num2str(p1)), 'fontsize', 14);
p2 = ...

2. 计算 ACF

ACF 参考:

Sample autocorrelation - MATLAB autocorr- MathWorks 中国

调用 matlab 函数 autocorr

autocorr(Data, Numlags=40); % 自行设定Numlags大小
grid on
set(gca, 'fontsize',14);

【Matlab】时间序列周期性分析相关推荐

  1. matlab动态神经网络进行时间序列预测分析

    matlab动态神经网络进行时间序列预测分析 时间序列预测问题分类 有y,无x,即y(t)=f(y(t−1),y(t−2),...)y(t)=f(y(t−1),y(t−2),...)y(t)=f(y( ...

  2. 基音检测 matlab,基于MATLAB基音检测分析.doc

    基于MATLAB基音检测分析 基于MATLAB基音检测分析 摘要:基音检测作为语音信号处理的重要手段,被广泛地应用于语音的合成.编码及识别等一系列语音信号处理技术问题.基音检测的准确性对于要求极高的语 ...

  3. 《MATLAB语音信号分析与合成(第二版)》:第4章 语音信号的线性预测分析

    <MATLAB语音信号分析与合成(第二版)>:第4章 语音信号的线性预测分析 前言 1. 数据与函数路径设置 2. MATLAB仿真一:LPC的频谱分析 3. MATLAB仿真二:普通预测 ...

  4. 《MATLAB语音信号分析与合成(第二版)》:第8章 基音周期的估算方法

    <MATLAB语音信号分析与合成(第二版)>:第8章 基音周期的估算方法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:基音周期提取的预处理 3. MATLAB仿真二:倒谱法的 ...

  5. 《MATLAB语音信号分析与合成(第二版)》:第10章 语音信号的合成算法

    <MATLAB语音信号分析与合成(第二版)>:第10章 语音信号的合成算法 前言 1. 数据与函数路径设置 2. MATLAB仿真一:重叠相加法语音合成 3. MATLAB仿真二:重叠存储 ...

  6. 【价格预测】基于matlab时间序列股票价格预测【含Matlab源码 450期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [价格预测]基于matlab时间序列股票价格预测[含Matlab源码 450期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  7. 《MATLAB语音信号分析与合成(第二版)》:第3章 语音信号在其他变换域中的分析技术和特性

    <MATLAB语音信号分析与合成(第二版)>:第3章 语音信号在其他变换域中的分析技术和特性 前言 1. 数据与函数路径设置 2. MATLAB仿真一:信号倒谱图.声道冲激响频谱.声门激励 ...

  8. matlab数字音频处理实验报告,数字信号处理实践——基于matlab的音频信号分析即处理...

    基于matlab的音频信号分析即处理 一直很多人都困惑,大学里学了数字信号能干嘛,很少又实践动手的机会(这都是看个人主动性的,从来不缺锻炼的机会,机会不会摆在你面前吧!).很多人也就是做做题目 pra ...

  9. matlab神经网络 时间序列,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?请教一下该神经网络的预测问题 我用网上的一个案例:知道2015年降雨我要预测该年水位.用往年 ...

最新文章

  1. Linux -- free 命令 内存适用状态监控
  2. 运维利器1-supervisor
  3. 在caffe上fine-tuning网络
  4. Android开发之在Fragment和Activity页面拍照需要注意的地方
  5. vba发送邮件 签名_如何更改“从Windows 10的邮件发送”签名
  6. php中取出数组中指定的值,PHP除开数组中指定的值
  7. 【线程】——线程的启动和中断
  8. SGU[222] Little Rooks
  9. SAP 以工序为基准进行发料 机加工行业 Goods Issue to Routing
  10. Java二分查找法代码
  11. Java IO流(超详细!)
  12. 数据结构与算法分析:算法分析
  13. (转)Resin常见问题及解决方法
  14. appium的滑动操作总结
  15. 无线网络优化(家用无线网)
  16. 手把手教你用Gurobi求解一个数学模型
  17. css绝对定位如何居中?css绝对定位居中的四种实现方法-web前端教程
  18. 读书:《人人都是产品经理》-苏杰
  19. arduino使用oled代码_【教程】在ESP32上使用E32433T LoRa模块
  20. 吴恩达OpenAI基于ChatGPT的Prompt开发教程

热门文章

  1. 游戏开发论坛_国内游戏开发站点与论坛
  2. 公众号排版|点击图片播放音乐你不会还不会吧
  3. [NameError]: name ‘F’ is not defined
  4. 关于python,如何更优雅地用%占位符
  5. Aftereffect中英文切换技巧
  6. Java程序是怎么运行的?
  7. 如何设计接口测试用例?
  8. 设计模式学习系列6 原型模式(prototype)
  9. 计算机网络月考题职专一年级,职高一年级计算机专业WORD试题
  10. Kafka 开启 SASL/PLAINTEXT 认证及 ACL