Using ALS algorithm for writing a code

48 views (last 30 days)
Lasya Maganti
Lasya Maganti on 26 Apr 2019
Commented: Star Strider on 23 Aug 2020
Is ALS algorithm supported by MATLAB R2019a. What is the best source of downloading the alogorithm and the reference to write the code for analysing spectral data?

Answers (1)

Star Strider
Star Strider on 26 Apr 2019
I’ve not run this, so I have no experience with it. It’s the only MATLAB code for the algorithm that I could find.
The slightly corrected version of the function:
function z = baseline(y, lambda, p)
% Estimate baseline with asymmetric least squares
m = length(y);
D = diff(speye(m), 2);w = ones(m, 1);
for it = 1:10
W = spdiags(w, 0, m, m);
C = chol(W + lambda * D' * D);
z = C \ (C' \ (w .* y));
w = p * (y > z) + (1 - p) * (y < z);
end
Also consider:
function z = baseline(y, lambda, p)
% Estimate baseline with asymmetric least squares
m = length(y);
D = diff(speye(m), 2);w = ones(m, 1);
for it = 1:10
W = spdiags(w, 0, m, m);
C = chol(W + lambda * (D' * D));
z = C \ (C' \ (w .* y));
w = p * (y > z) + (1 - p) * (y < z);
end
The documentation for the function is in the paper.
Experiment to get the result you want.
  3 Comments
Timothy Loayza
Timothy Loayza on 23 Aug 2020
Thanks a lot, it works very well for Raman's spectras. (lambda = 100'000, p = 0.01)
BTW : I don't know who to cite for it as the link is not working anymore.
Star Strider
Star Strider on 23 Aug 2020
Timothy Loayza — I actually saved it. I am attaching it here. (It was apparently open-access at the time, so I doubt that I am violating any copyright by posting it here.)
Also, with respect to Csaba’s comment, if you want to force it to be a column vector, just do this:
y(:)
.

Sign in to comment.

Categories

Find more on Signal Processing in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!