This Python function creates a time-series (discrete-time random process) with a specific autocorrelation function (ACF) and continuous probability distribution, e.g with predefined probability density function (PDF).
Usage:
from generate_corr_sequence import gen_corr_sequence
gen_corr_sequence(dist_obj=uniform,
target_acf=1 - np.minimum(np.arange(0, 100), 100) / 100,
L: int = 2 ** 20,
seed=None,
debug: bool = False,
plot_figures_name: str = None)
dist_obj
- A continuous distribution object from scipy.stats, default isuniform
target_acf
- A required ACF function, default is a linear functionL
- Number of required samplesseed
- Seed of the random number generatordebug
- Plots PDF and ACF graphsplot_figures_name
- Filename of the debug figure to be saved, only whendebug
isTrue
. In no extension is provided, the default ispng
.
Returns:
- A random sequence with pre-defined ACF and distribution with type
numpy.ndarray
.
The example below shows the default settings of the function from the examples/default_settings_example.ipynb
file.
# Example usage of the function with default settings
sequence = gen_corr_sequence(debug=True)
The example below is from the examples/nakagami_example.ipynb
file.
# Example usage of the function with Nakagami distribution and an autocorrelation function
from generate_corr_sequence import gen_corr_sequence
import numpy as np
from scipy.stats import nakagami
from scipy.special import j0
# %%
m = np.arange(0, 100)
signal = gen_corr_sequence(
dist_obj=nakagami(nu=1),
target_acf=np.array(j0(0.1 * np.pi * abs(m))),
debug=True)
- There is no responsibility for the correctness of the results. It may work and it may not - use debug option to check the results.
- Examples for different distributions (uniform, exponential, Laplace, Rayleigh, triangle,
gamma, lognormal, Nakagami) and four different ACFs are provided in the
examples/evaluation/
folder. Theevaluate_PDFs.ipynb
file used for generation of all the ACF figures in the directory. - It takes about 2-3 seconds to generate a single default-length sequence.
- The example of code repeatability is provided in the
examples/nakagami_example.ipynb
notebook as extension of Nakagami distribution example. The sequence is generated 20 times with ACFs as follows.
Use:
pip install generate_corr_sequence
The algorithm is mainly based on the following papers:
- Filho, José Cândido Silveira Santos, and Michael Daoud Yacoub. "Coloring Non-Gaussian Sequences." IEEE Transactions on Signal Processing, vol. 56, no. 12, 2008, p. 6.
- Liu, Bede, et al. "Generation of a Random Sequence Having a Jointly Specified Marginal Distribution and Autocovariance." IEEE Transactions on Acoustics, Speech, and Signal Processing, vol. ASSP-30, no. 6, 1982, p. 11.
Dima Bykhovsky, Netanel Tochilovsky, Alexander Rudyak
This project is licensed under the MIT license.
- custom (non-scipy) distributions support
- higher-speed algorithm for Gaussian distributions
- fix lognormal distribution problem for oscillatory ACFs