跳转到主要内容

频率分析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 (22.1 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面