COFRE: Complex-Pole Filter Representation for spectral estimation
Project description
cofre-spectrum
COFRE — Complex-Pole Filter Representation for spectral Estimation.
A Python implementation of the algorithm described in:
Pinto Orellana, Mirtaheri & Hammer (2021). COFRE: A complex-pole filter for spectral estimation. arXiv:2105.13476
The Complex-Pole Filter Representation (COFRE) method estimates the power spectral density (PSD) at arbitrary target frequencies using a bank of first-order complex-pole IIR filters each tuned to a single frequency. It is particularly effective for non-stationary or short signals where classical FFT-based methods does not offer sufficent frequency resolution.
Example — real fNIRS data
PSD estimated on a real fNIRS HbO recording. Left column uses a band-proportional x-axis (ENMRC: Endothelial, Neurogenic, Myogenic, Respiratory, Cardiac frequency bands). Right column uses a standard log scale.
Welch estimate computed with scipy.signal.welch (Hann window, 50 % overlap). COFRE resolves low-frequency oscillatory structure that Welch smears out due to limited segment length.
Installation
pip install cofre-spectrum
Quick start
from cofre_spectrum import cofre_estimate
import numpy as np
fs = 20.0 # sampling rate (Hz)
signal = np.random.randn(10_000)
freqs, psd = cofre_estimate(signal, fs=fs)
Full API
One-liner
freqs, psd = cofre_estimate(
x,
fs=20.0, # sampling rate (Hz)
freq_min_hz=0.003, # lowest frequency of interest
freq_max_hz=2.0, # highest frequency of interest
n_filters=200, # number of log-spaced filters
tau=8.65, # bandwidth parameter
)
Filter bank with full control
from cofre_spectrum import COFREBank, COFREConfig
cfg = COFREConfig(
fs=20.0,
freq_min_hz=0.003,
freq_max_hz=2.0,
n_filters=200,
tau=8.65, # set τ directly …
# delta_omega_hz=0.05 # … or derive τ from desired Hz resolution
)
bank = COFREBank(cfg)
bank.process_vectorized(signal) # batch mode (faster)
freqs, psd = bank.get_spectrum() # Hz, PSD
bank.summary() # print configuration table
Single filter (online / streaming)
from cofre_spectrum import COFREFilter
filt = COFREFilter(freq_hz=0.1, fs=20.0, tau=8.65)
for sample in stream:
filt.update(sample)
print(filt.spectrum_estimate) # PSD at 0.1 Hz
Choosing τ from a desired resolution
from cofre_spectrum import optimal_tau_for_frequency
# τ that gives 0.05 Hz resolution at α = 0.5
tau = optimal_tau_for_frequency(delta_omega=0.05 / 20.0, alpha=0.5)
Parameter guide
| Parameter | Effect |
|---|---|
tau (τ) |
Higher τ → narrower bandwidth, finer frequency resolution, longer rise time |
n_filters |
More filters → denser spectral grid |
log_spacing |
Log-spaced frequencies (default) suit logarithmic spectral analysis |
alpha (α) |
Cut-off fraction for frequency resolution definition (Eq. 18) |
beta (β) |
Cut-off fraction for rise-time definition (Eq. 20) |
Reference
Pinto Orellana, A., Mirtaheri, P., & Hammer, H. L. (2021). Complex-Pole Filter Representation for Spectral Estimation (COFRE). arXiv:2105.13476
Project details
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 cofre_spectrum-0.1.2.tar.gz.
File metadata
- Download URL: cofre_spectrum-0.1.2.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16df5452e96999ddf6020d27bf3b4ad3c17cf82b6528f44dafd1bd8eb41b78e3
|
|
| MD5 |
697cc7ed931b8874f19e8a0e0b62fdae
|
|
| BLAKE2b-256 |
381316bbb4c5a9e22f449d118cc6668a7ad795cf29ca5a4e6d8792cd20ca14a1
|
File details
Details for the file cofre_spectrum-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cofre_spectrum-0.1.2-py3-none-any.whl
- Upload date:
- Size: 7.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8285b3bc5aa24c400b6f4b0d4de8706816c6714bfbe069cabc223f32c049e153
|
|
| MD5 |
d37aa6ab74ab60e940842467689d1fbb
|
|
| BLAKE2b-256 |
2e29a441898a749386f84bcc12df2b8f017d6710a647d0fefeaf5149353ed8fe
|