Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create noise with time dependent correlation in Julia?

Tags:

noise

julia

I want to create real noise $\xi(t)$ which fulfills the property $E[xi_t\xi_s] = f(t, s)$ in Julia. Is there a library or function with which I could implement this? I tried the impementation with $f(t, s) = e^{-(t-s)}$ My code is not working (the noise is decreasing exponentially).

using LinearAlgebra

function generate_gaussian_noise(timesteps)
    n = length(timesteps)
    noise = zeros(n)

    for i in 1:n
        t = timesteps[i]
        noise[i] = real(randn())
    end

    return noise
end

function construct_correlated_noise(timesteps)
    n = length(timesteps)
    noise = generate_gaussian_noise(timesteps)
    correlation_matrix = zeros(n, n)

    for i in 1:n
        for j in 1:n
            correlation_matrix[i, j] = exp(-(timesteps[i] - timesteps[j]))
        end
    end

    # Perform eigenvalue decomposition
    eigenvalues, eigenvectors = eigen(correlation_matrix)
    D = Diagonal(sqrt.(eigenvalues))
    Q = eigenvectors
    L = Q * D

    correlated_noise = L * noise

    return correlated_noise
end

# Example usage
timesteps = collect(1:401)
correlated_noise = construct_correlated_noise(timesteps)
like image 933
absorptioncoefficient Avatar asked Feb 04 '26 04:02

absorptioncoefficient


1 Answers

If I understand you correctly you want something like this?

using Distributions
f(t, s) = exp(-abs(t-s))
timesteps = 1:401;
covariance_matrix = f.(timesteps, timesteps');
mean_vector = zeros(length(timesteps));
d = MvNormal(mean_vector, covariance_matrix);
x = rand(d) # this is a single sample

Note that f(t,s) must have a property that f(t,s)=f(s,t) which your function did not have, that is why I have added abs. I also modelled covariance because what you defined is not correlation but covariance assuming that the expected value of the process is constant and equal to 0.

like image 119
Bogumił Kamiński Avatar answered Feb 05 '26 21:02

Bogumił Kamiński



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!