Numerical Analysis of Fundamental Frequencies for one or more signals
Project description
PyNAFF
Authors:
- Foteini Asvesta (fasvesta .at. cern .dot. ch)
- Nikos Karastathis (nkarast .at. cern .dot. ch)
- Panagiotis Zisopoulos (pzisopou .at. cern .dot. ch)
A Python implementation of J. Laskar's Numerical Analysis of Fundamental Frequencies (NAFF) method.
Installation
python -m pip install PyNAFF
Single BPM
import numpy as np
import PyNAFF as pnf
t = np.arange(3001)
signal = np.sin(2.0 * np.pi * 0.12345 * t)
result = pnf.naff(signal, turns=500, nterms=1, window=1)
# Each row is:
# [order, frequency, amplitude, real amplitude, imaginary amplitude]
frequency = result[0, 1]
turns is the number of integration intervals, so the input must contain at
least turns + 1 observations. For real sinusoids, the reported amplitude is
the magnitude of one complex Fourier coefficient, equal to half the sinusoid's
peak amplitude.
Multiple BPMs
Place observations on axis 0 and BPMs on axis 1:
signals = np.column_stack([
np.sin(2.0 * np.pi * 0.12345 * t),
2.0 * np.sin(2.0 * np.pi * 0.27123 * t),
])
results = pnf.naff(signals, turns=500, nterms=1)
# results.shape == (2 BPMs, 1 term, 5 values)
frequencies = results[:, 0, 1]
amplitudes = results[:, 0, 2]
For multi-BPM input, unused term rows are filled with NaN when extraction
for a BPM stops before nterms.
The tol option controls duplicate residual handling as a fraction of one FFT
bin. If NAFF stops early because a residual peak is very close to a previously
extracted frequency, increasing tol can let it remove that residual and
continue to weaker frequencies. The default is 1e-4; large values can also
turn spectral leakage into spurious frequencies, so compare results across
several values. nterms is an upper bound, not a guaranteed result count.
For real input, prefer getFullSpectrum=False. A full spectrum contains both
positive and negative conjugate frequencies, and each one occupies a result
row.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pynaff-1.2.0.tar.gz.
File metadata
- Download URL: pynaff-1.2.0.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b93651927999f666e061aaf0d1f82c816a60b65132eacaceb6fb533754131291
|
|
| MD5 |
b8384330e278a827abca5357910434c8
|
|
| BLAKE2b-256 |
d1dd0d294d11552dcf1cea94b2280c44f55de7fe3075f30e7e33282310b6a38f
|
File details
Details for the file pynaff-1.2.0-py3-none-any.whl.
File metadata
- Download URL: pynaff-1.2.0-py3-none-any.whl
- Upload date:
- Size: 18.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c382584e72564a651714cb46867a501b7e9a4e680bac77b079b4975c5812057
|
|
| MD5 |
6065a47301e694b8f956cade1c99e525
|
|
| BLAKE2b-256 |
029863c68e5fa24d2f18d54060f0bd8c47933d54d05706b80c6a6e109998c1ee
|