频率分析NAFF算法
项目描述
nafflib
P. Belanger, K. Paraschou, G. Sterbini, G. Iadarola 等。
J. Laskar 的数值分析基本频率算法 (NAFF [1-2]) 的Python实现。此实现使用定制的优化器 (nafflib.optimise.newton_method
,来自 A. Bazzani, R. Bartolini & F. Schmidt) 来寻找用于跟踪数据的频率,精度达到机器精度。使用汉宁窗口(nafflib.windowing.hann
)有助于收敛。
关于NAFF算法的深入描述可以在A. Wolski的教科书中找到[3]。
[1] J. Laskar, 频率图分析导论。 http://link.springer.com/10.1007/978-94-011-4673-9_13
[2] J. Laskar等,通过数值分析基本频率来衡量混沌。应用于标准映射。 https://doi.org/10.1016/0167-2789(92)90028-L
[3] A. Wolski,《高能粒子加速器中的束动力学》,第11.5节:数值方法:频率图分析。 https://www.worldscientific.com/doi/abs/10.1142/9781783262786_0011
安装
pip install nafflib
用法
示例可以在examples
文件夹中找到。数据谐波的计算使用位置-动量数据,窗口的阶数可以由用户指定。尽管算法可以使用仅位置的数据,但在可能的情况下,建议使用位置-动量。
调整
信号调整可以通过实数或复数信号获得。
# Let's assume the following signal
z = x - 1j * px
# The two following calls are equivalent
# --------------------------------------------------
Q = nafflib.tune(z, window_order=2, window_type="hann")
Q = nafflib.tune(x, px, window_order=2, window_type="hann")
# --------------------------------------------------
# Using the position only:
# --------------------------------------------------
Q = nafflib.tune(x, window_order=2, window_type="hann")
# --------------------------------------------------
谐波
相位空间轨迹(x,px)、(y,py)、(zeta,pzeta)使用harmonics()
函数按平面提取信号平面的光谱线。谐波的数量由num_harmonics
参数指定。同样,该函数可以与仅位置或位置-动量(首选)信息一起使用。
# Let's assume the following signal
z = x - 1j * px
# The two following calls are equivalent
# --------------------------------------------------
spectrum = nafflib.harmonics(z, num_harmonics=5, window_order=2, window_type="hann")
spectrum = nafflib.harmonics(x, px, num_harmonics=5, window_order=2, window_type="hann")
# -> where spectrum = (amplitudes,frequencies)
# --------------------------------------------------
# From position only:
# --------------------------------------------------
spectrum = nafflib.harmonics(x, num_harmonics=5, window_order=2, window_type="hann")
# -> where spectrum = (amplitudes,frequencies)
# --------------------------------------------------
谐波分类
对于足够接近可积不变量的保守系统稳定运动,预期频率将是基本调谐(6维系统为3个)的线性组合。
为了正确研究系统的谐波,用户几乎总是应该尝试明确识别光谱线,因为非常接近的线可能被误认为是另一条,并且按幅度排序绝对会导致错误的结果。
可以通过使用基本频率的线性组合作为唯一ID来跟踪给定的光谱线,对来自LHC或任何标准映射的哈密顿系统稳定运动的这种光谱线分类进行。例如,参见examples/nb_convergence.ipynb
笔记本中此类方法的示例,以及examples/ex_04_regularity_4D.py
笔记本中按幅度排序光谱线可能引起的问题的示例。
# Let's assume the following dictionnary of phase space data:
data = {"x": x, "px": px, "y": y, "py": py, "zeta": zeta, "pzeta": pzeta}
# Let's extract the fundamental frequencies
Q_vec = [
nafflib.tune(data[f"{plane}"], data[f"p{plane}"]) for plane in ["x", "y", "zeta"]
]
# Let's extract some harmonics
A, Q = nafflib.harmonics(x, px, num_harmonics=5)
# Let's find the linear combination of fundamental tunes (Q_vec)
# -----------------
# Note: max_harmonics_order might need to be set to a higher value to find
# the proper linear combination of frequencies
# -----------------
categorization = nafflib.find_linear_combinations(
Q, fundamental_tunes=Q_vec, max_harmonic_order=10
)
# -> where categorization = (r_vec,err,combined_frequency)
项目详情
nafflib-2.0.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 00432a67f565e3be1211defbfe6cc5846dbb8dda07f2ca4b8c73950cf6e5ebbf |
|
MD5 | 25adb74e620cdad2d15978d02c56c58b |
|
BLAKE2b-256 | 306b1e122091df645cf93af33edd6b3d2edf0d55173525bd94602b16e65c35b8 |