Python SciPy equivalent of Matlab's plomb
The Matlab function plomb computes the Lomb-Scargle periodogram. In SciPy the equivalent function is called lombscargle. However, if you want to translate a call to plomp in Matlab to the equivalent Python call, you will find that the function arguments are not the same.
First problem is that the argument order is different, which is easily solved.
Second problem is that the SciPy function requires you to supply the angular frequency vector, which is generated automatically by Matlab.
The following Python function lomb bridges the gap.
import numpy as np
from scipy.signal import lombscargle
def lomb(t, y):
"""Compute the Lomb-Scargle periodogram
Inputs
t : sample times
y : measurement values
Outputs
f : frequency vector
pxx : power spectral density (PSD) estimate
Inputs are assumed to be vectors of type numpy.ndarray.
"""
n = t.size
ofac = 4 # Oversampling factor
hifac = 1
T = t[-1] - t[0]
Ts = T / (n - 1)
nout = np.round(0.5 * ofac * hifac * n)
f = np.arange(1, nout+1) / (n * Ts * ofac)
f_ang = f * 2 * np.pi
pxx = lombscargle(t, y, f_ang, precenter=True)
pxx = pxx * 2 / n
return f, pxx
With this function the Python call:
[f, pxx] = lomb(t, y)
provides the same output as the Matlab call:
[pxx, f] = plomb(y, t, 'power');