Skip to main content

fpfind

An add-on implementation of frequency compensation for qcrypto.

Installation

pip3 install fpfind

Requirements:

  • Python 3.8 and above, running in Linux
  • gcc (if running freqcd, preferably in PATH for auto-compilation)

The stable releases are tagged and listed here.

Usage

Binaries and scripts are defined in pyproject.toml and will be exposed to the path; commonly used scripts are listed below.

# For general timestamp viewing
parse-timestamps {TIMESTAMPS}
show-timestamps {TIMESTAMPS}

# For frequency compensation (and in context of coincidence finding)
fpfind -t {TIMESTAMPS1} -T {TIMESTAMPS2}
freqcd -X -udF fpipe -f 568 < {TIMESTAMPS}
[costream -V5 ... |] freqservo -V5 -udF fpipe -f 568

See Hints for usage hints.

Upgrading

See Migration for moving between major versions, e.g. v2 to v3.

Motivation

Quantum key distribution requires some form of clock synchronization to retain high signal-noise ratio when pairing photon detection/generation events. This is usually achieved by having a stable clock (e.g. Rb clock, GPS receiver) or a separate clock transfer channel.

Timing correlated photons used in the QKD itself can also be used as a resource for clock synchronization, by identifying and tracking the timing delay $\tau$ using the second-order coherence $g^{(2)}(\tau)$. The timing drift in the signal indicates a frequency offset/drift between the two parties, which can be corrected with a feedback loop. This opens up the use of clock references with weaker frequency stability like quartz clocks.

This library implements the frequency compensation modules supplementing the core qcrypto QKD software stack, and a reference usage can be found in QKDServer.

Schematic

Components for frequency compensation (implemented in this library) are highlighted in yellow below.

In particular:

  • freqcd.c performs frequency correction
  • fpfind.py replaces pfind.c for initial frequency estimation
  • freqservo.py performs frequency drift estimation

Limitations

  • The FFT buffer size is limited to 2**31 bins due to the implicit casting to int32 performed internally by np.bincount on older versions of numpy. This corresponds to a buffer order value upper bounded to q = 31 for fpfind. To bypass this limitation, supply an alternative implementation for np.bincount.

Troubleshooting

Certain issues may appear when attempting an install on RaspbianOS:

  • Importing numpy yields the error message stating libopenblas.so could not be found (this is the underlying linear algebra library for Numpy); installing the libopenblas-dev library fixes this, e.g. apt install libopenblas-dev

Contributing

Version tags (as of v2) follow romantic versioning (a variation on semantic versioning). In the SemVer language: PATCH is incremented for non-breaking changes, MINOR for breaking changes that are easy to patch downstream, and MAJOR is reserved for large breaking changes that require careful syntax adjustments.

Dynamic versioning is handled by poetry, so bumping the version simply involves adding a lightweight git tag (with "v" prepended, e.g. git tag {VERSION} [COMMIT]). Local version modifiers (e.g. dates) are removed for compatibility with PyPI rules.

Commit messages to roughly follow Angular commit message guidelines (which aligns with the Conventional Commits specification). The type should be one of the following: feat, fix, chore, test, docs, build, ci. If a scope is provided, it should be one of:

  • fpfind
  • fpplot
  • freqcd
  • freqservo
  • parser (for both timestamp and epoch)

Commit messages can be automatically checked using pre-commit, after installing:

pre-commit install

Metadata

Release files for fpfind 3.3.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fpfind 3.3.6
File Size Uploaded
fpfind-3.3.6.tar.gz 73.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fpfind 3.3.6
File Interpreter ABI Platform
fpfind-3.3.6-py3-none-any.whl Python 3 none any Details

Total release size: 156.3 kB

Release files / fpfind-3.3.6.tar.gz

Download URL fpfind-3.3.6.tar.gz
Size 73.2 kB
Tags Source
SHA-256 checksum
How to use checksums
f4a38986c2fa71895b328c88fd7735327f3996b47b77c8a65f43418ac424e737
BLAKE2b-256 checksum
How to use checksums
7c03dc4752fe75085e13dc94d7abbefd825d576fa7413df457538a9315d92228
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 22, 2026.

Transparency log

Release files / fpfind-3.3.6-py3-none-any.whl

Download URL fpfind-3.3.6-py3-none-any.whl
Size 83.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
284134db71ebad46a99ebecbb590942ec5b6a745743c899d85899ab1887c6374
BLAKE2b-256 checksum
How to use checksums
cf443003b2ff8bb1a5365c56afa67db3b69b3ec973e6ba22d9ddce586423bc72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 22, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.3.6 This release

2 release files

3.3.5

2 release files

3.3.4

2 release files

3.3.3

2 release files

3.3.2

2 release files

3.3.1

1 release file

3.3.0

1 release file

3.2.0

1 release file

3.1.0

1 release file

3.0.1

1 release file

3.0.0

1 release file

2.4.0

1 release file

2.3.5

1 release file

2.2.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page