Added basic simulation of spectroscopic data

This commit is contained in:
Joakim Skogholt 2023-05-20 08:55:37 +02:00
parent 1c71badbef
commit 6953c9bf9e
2 changed files with 46 additions and 0 deletions

View file

@ -48,11 +48,14 @@ export TRSegCV
export TRVirCV
export TRBidiagDecomp
export simulateSpectrum
include("preprocessing.jl")
include("convenience.jl")
include("conveniencePlots.jl")
include("variousRegressionFunctions.jl")
include("TR.jl")
include("simulateSpectroscopicData.jl")
end

View file

@ -0,0 +1,43 @@
Lk(waves, c, gamma) = @. gamma / (pi*(waves-c)^2+gamma^2);
Gk(waves, c, gamma) = @. 1/(sqrt(2*pi)*gamma) * exp(-(waves-c)^2 / (2*gamma^2));
function pseudoVoigtPeak(waves, c, gamma, eta, alpha)
fk = zeros(length(waves));
for i in 1:length(c)
fk += alpha[i] .* pseudoVoigtPeak(waves, c[i], gamma[i], eta[i]);
end
return fk
end
function pseudoVoigtPeak(waves, c, gamma::Float64, eta::Float64)
fk = eta * Lk(waves, c, gamma) + (1-eta) * Gk(waves, c, gamma);
return fk
end
function simulateBaseline(waves, a)
vm = zeros(length(waves), length(a));
for i in 0:(length(a)-1)
vm[:, i+1] = waves.^i ./ norm(waves.^i);
end
b = vm * a;
return b
end
function simulateSpectrum(waves, c, gamma, eta, alpha, a, sigma=0.0)
pure_spec = pseudoVoigtPeak(waves, c, gamma, eta, alpha);
b = simulateBaseline(waves, a);
noise = randn(length(waves)) .* sigma;
spec = pure_spec + b + noise;
return spec, pure_spec, b, noise
end