当前位置:网站首页>【量化投资】离散傅里叶变换求数组周期
【量化投资】离散傅里叶变换求数组周期
2022-06-24 07:07:00 【Coding的叶子】
好久没有更新量化分析相关的内容,本节将介绍如何通过傅里叶变换求解一组数据当中可能存在的周期性,后续将应用本节的结果实际在量化程序中进行应用。本文计算方法不一定正确,欢迎大家多多指正,并在评论区进行交流。
1 离散傅里叶变换
离散傅里叶变换的公式如下:

其中N为原始数据的长度,f(n)为原始数据,即随时间变化的序列。F(u)为傅里叶变换结果,可以看到F(u+1)和F(u)的每个频率分量相差1/N个频率间隔。因此,f(n)经过傅里叶变换后得到的F(u)在频域 上的频率间隔为1/N。
另外,当u=0时,e指数部分取值为1。因此,F(0)是f(n)的平均值。
2 求解数组周期
利用傅里叶变换求解数组周期的步骤:
(1)利用1中的公式,求解傅里叶变换结果F(u)。
(2)求解(1)中傅里叶变换的幅值。
(3)求解(2)中傅里叶幅值的峰值,幅值越大的地方表示周期性越明显。
(4)假设峰值出现在u=k处,那么根据1中分析,对应的频率为k/N,那么相应的周期为N/k。
3 示例程序
import numpy as np
from scipy.signal import find_peaks
import matplotlib.pyplot as plt
x = np.array([ 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])
N = x.shape[0]
print(N)
f = np.fft.fftn(x) #全部变换,f[0]为全部取值累加结果
f = f[:N//2]
peaks, p = find_peaks(abs(f), height=0.1)
print(peaks)
# print(f)
# plt.plot(abs(x), '.')
plt.plot(abs(f), '.')
print(abs(f))
print(f[6])
real = f[13].real
im = f[13].imag
theta = np.arctan(im/(real+1e-6))
pos = np.angle(f[13])/2/np.pi*5
print(np.angle(f[13]))
print(theta, pos)
# plt.show()4 求解结果


T =5。
求解后的周期,最好进行验证,以免出现误差。本文计算方法不一定正确,欢迎大家多多指正,并在评论区进行交流。
更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。
边栏推荐
- Rust procedure macro simply imitates Lombok function
- One development skill a day: how to establish P2P communication based on webrtc?
- 为什么ping不通,而traceroute却可以通
- Increase insert speed
- 微博撰写-流程图-序列图-甘特图-mermaid流程图-效果不错
- 什么是SRE?一文详解SRE运维体系
- 【关于运维和网工的差别,一文说透】
- 分布式 | 如何与 DBLE 进行“秘密通话”
- Glusterfs replacement failure brick
- WebRTC系列-网络传输之5选择最优connection切换
猜你喜欢

Liunx Mysql安装

原生小程序用画布制作海报,等比例缩放,和uniapp差不多就是写法有点不同

Jenkins自动化部署,连接不到所依赖的服务【已解决】

一文详解|增长那些事儿

It is enough to read this article about ETL. Three minutes will let you understand what ETL is

数据库迁移从PostgreSQL迁移到 MYSQL

日本大阪大学万伟伟研究员介绍基于WRS系统机器人的快速集成方法和应用

表单图片上传在Chorme中无法查看请求体的二进制图片信息

一文讲透,商业智能BI未来发展趋势如何

【关于运维和网工的差别,一文说透】
随机推荐
leetcode 1268. Search suggestions system
WebRTC系列-网络传输之5选择最优connection切换
Application of tidb in Netease games
liunx服务器 telnet 带用户名 端口登陆方法
利用sonar做代码检查
Matlab求解线性方程组Ax=b
Base64编码详解及其变种(解决加号在URL变空格问题)
第七章 操作位和位串(三)
打印出来的对象是[object object],解决方法
小黑ai4code代码baseline啃食1
深度学习与神经网络:最值得关注的6大趋势
【关于运维和网工的差别,一文说透】
Using skills of xargs -- the way to build a dream
Shell basic operator -- arithmetic operator
Increase insert speed
String转Base64
Building a static website with eleventy
Liunx Mysql安装
JS to get the last element of the array
uniapp 热更新后台管理