Generate correlated random samples
Project description
Generate stationary correlated time-series
Summary
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)
Arguments
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
.
Examples
Default settings with uniform distribution and linear ACF
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 = generate_corr_sequence(debug=True)
Nakagami distribution with Bessel function ACF
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)
Notes
- 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.
References
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.
Contributors
Dima Bykhovsky, Netanel Tochilovsky, Alexander Rudyak
License
This project is licensed under the MIT license.
Todo
- custom (non-scipy) distributions support
- higher-speed algorithm for Gaussian distributions
- fix lognormal distribution problem for oscillatory ACFs
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
File details
Details for the file generate_corr_sequence-0.1.1.tar.gz
.
File metadata
- Download URL: generate_corr_sequence-0.1.1.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c66a8701c55e69ce04974f13baa4dec89f04745ccf00af8841de3958d09daab6 |
|
MD5 | 8dca8c280859b50244613689fbb03012 |
|
BLAKE2b-256 | 6256fc8764746a6362d7f221d963fc55403ed2c2456d55d42a88a0ff7ca43bb7 |
File details
Details for the file generate_corr_sequence-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: generate_corr_sequence-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84fefeda13e2e5311e77e1d579fd4630193e384defd218b07eb653e1f3ce9847 |
|
MD5 | 4764f8bc06c59f27ddc9a71402c43199 |
|
BLAKE2b-256 | b12acfdc00810a2a4fcc3e9219a3afa8a0a0c69bfae0870714a5ec5c313d8fef |