Source code for timescales.sim.acf

"""Autocorrelation simulation functions."""

import numpy as np


[docs] def sim_acf_cos(xs, fs, exp_tau, osc_tau, osc_gamma, osc_freq, amp_ratio, height, offset): """Simulate an autocorrelation with an oscillitory component. Parameters ---------- xs : 1d array Lag definitions. fs : float Sampling rate, in Hz. exp_tau : float Timescale of the exponential component. osc_tau : float Timescale of the damped cosine. osc_gamma : float Exponential constant of the damped cosine. osc_freq : float Frequency of the damped cosine. amp_ratio : float Ratio between the amplitude of the exponetial decay and damped cosine components, respectively. height : float Total height of the combined components. offset : float Y-axis intercept. Returns ------ acf : 1d array Sum of exponential and damped cosine components. """ xs = np.arange(len(xs)) exp = sim_exp_decay(xs, fs, exp_tau, amp_ratio) osc = sim_damped_cos(xs, fs, osc_tau, 1-amp_ratio, osc_gamma, osc_freq) exp_osc = exp + osc exp_max = np.max(exp_osc) if exp_max > 0: exp_osc /= exp_max exp_osc *= height return exp_osc + offset
[docs] def sim_exp_decay(xs, fs, exp_tau, exp_amp, offset=0.): """Simulate an exponential decay. Parameters ---------- xs : 1d array Lag definitions. fs : float Sampling rate, in Hz. exp_tau : float Timescale of the exponential decay. exp_amp : float Height of exponential decay. offset : float, optional, default: 0. Y-axis interecept. Returns ------- exp_decay : 1d array Autocorrelation with exponential decay. """ exp_decay = (np.exp(-(xs / (exp_tau * fs))) + offset) exp_max = np.max(exp_decay) if exp_max > 0: exp_decay /= exp_max return exp_amp * exp_decay
[docs] def sim_damped_cos(xs, fs, osc_tau, osc_amp, osc_gamma, osc_freq): """Simulate a damped cosine. Parameters ---------- xs : 1d array Lag definitions. fs : float Sampling rate, in Hz. osc_tau : float Timescale of the damped cosine. osc_gamma : float Exponential constant of the damped cosine. osc_freq : float Frequency of the damped cosine. Returns ------- damped_cos : 1d array Autocorrelation with damped cosine. """ damped_cos = np.exp(-(xs / (osc_tau * fs)) ** osc_gamma) * \ np.cos(2 * np.pi * osc_freq * (xs/len(xs))) damped_max = np.max(damped_cos) if damped_max > 0: damped_cos /= damped_max return osc_amp * damped_cos