This errata page focuses on factual errors that could interfere with the understanding of the presented material. General typos are usually not entered, none-the-less we still appreciate being informed about them.

Statistical Sensor Fusion by Fredrik Gustafsson

3nd edition, 2018

  • p50: In step 3 of Alg 3.1 and the last equation on the page:  All occurances of x should be \hat{x}^{(i)}, ie the last iterate of the estimate is used instead of x.
  • p63 L-10:  The reference to Figure 3.4 should be Figure 3.5.
  • p88 (4.27c): The second element in the vector last on the line should be x_2-\frac{p_{i,2}+p_{j,2}}{2} (the index is incorrect in the book).
  • p90 (4.40): In the expression for y, all r should only have one index, the first one.
  • p456 Table A.1: The 4th row should be changed to:
    E((y-\mu)^n) = 0, if n is odd
    E((y-\mu)^n) = (n-1)!!\sigma^2=(1\cdot3\cdot5\dots(n-1))\sigma^2, if n is even

2nd edition, 2012

  • p11L-7: "arg min_x" should be "arg max_x".
  • p16: An entry for Chapter 10 has been added: "Chapter 10 explains how a bank of filters can be used to explore different hypotheses about the state evolution or parameter values in the models."
  • p33 point 3 Alg 2.1: Should be T=U_2^TD_1^{1/2}U_1^T.
  • p38L19: Should be x=(x^T, \lambda)^T for the augmented x.
  • p40L-6: The factor should be R\mathcal{I}(\mu)\geq 1.
  • p51L7: Remove the factor 2 after the second equality, to make the expressions consistent.
  • p52: The accuracy of the x0 estimate differs from what is obtained when using an up to date SigSys installation due to a bug that has since been fixed.
  • p77 Table 4.1: Substitute c for \beta in the two last columns of the RSS row.
  • p77 Table 4.1: Throughout the DOA row 1 and 2 should be exchanged when used as index.
  • p78(4.2): Remove the last equality and what follows.
  • p83: The left plots are all illustrating DOA and the right plots TOA, not the other way around as indicated in the text and captions.
  • p86L-9: Should be L=2 to match the illustration in Fig. 4.7.
  • p88 (4.28)+(4.29): In all occurrences of 1 and 2 as index should be exchanged.
  • p88 (4.29): The terms in the sum should be squared.
  • p90L-8: "squared range to the target." should be "squared range to the target from the origin."
  • p91 (4.43): The indices 1 and 2 should switch places.
  • p97L9: A + r_0 is missing in the TDOA expression.
  • p97L10: Exchange all occurrences of 1 and 2 in the index.
  • p116: Clarification, the erfc function used on this page differs from the erfc function usually used in mathematics!
  • p130 (6.8): The equation should be p(z|y)=p_{x|y}\star p_w(z) = \int_{-\infty}^\infty p_{x|y}(x-v)p_w(v)dv.
  • p132-133: All occurances of x^{MV} and x^{MAP} should have a hat, ie, \hat x^{MV} and \hat x^{MAP}.
  • p137 (6.16b): "x_k^{(j)}" should be "\pi_k^{(j)}".
  • p143: The last bullet point has been reformulated: "The posterior CRLB : this relates to the parametric CRLB, in the sense that the information matrix is averaged over all possible trajectories [P^{PostCRLB}_{k|k}]^{-1} = \int [P^{ParCRLB P}_{k|k}]^{-1}p(x_{1:k})\,dx_{1:k}.".
  • p144L2: "N. Bergman and Gordon (2001)" should be "Bergman, Doucet and Gordon (2001)".
  • p144 (6.28a): The last term should be "G_kQ_kG_k^T".
  • p146 (6.33a,c): The last term should be "GQG^T".
  • p147: The derivative in the second last equation should be d^2/dx_{k+1}dx_k.
  • p150L3: The last term should be "G_kQ_kG_k^T".
  • p151L12: "nl2ss" should be "nl2lss".
  • p151L14: "ss2nl" should be "lss2nl".
  • p157 (7.15): Add a '(' right after P_{1|0}.
  • p158 (7.16), (7.18): The (2,1) element of P should be P_{yx}.
  • p159L-11: Substitute \mu_\gamma for \mu_y.
  • p170L4: All H and R in the should have index k.
  • p186-187 (7.70,7.71,7.74a): The factor (H^T_k P_{k|k-1}H_k+R_k) should be (H_k P_{k|k-1}H^T_k+R_k), note the change of the placement of the transpose of H_k.
  • p234: The third bullet point has been reformulated: "The posterior CRLB relates to the parametric CRLB in the sense that the parametric information matrix is averaged over all possible trajectories [P^{PostCRLB}_{k|k}]^{-1} = E [P^{ParCRLB}_{k|k}]^{-1}. The expectation makes its computation quite complex in general.".<\li>
  • p241 (9.45d): The (1,1) element of Q_k should be (Q^{nl}_k)^T.
  • p244L-14: "C_k=0" should be "H_k = 0".
  • p247Fig9.5: Exchange the last sentence in the caption for "The PF covariance can according to (9.54) be decomposed into the MPF covariance and the conditional Kalman filter (condKF) covariance."
  • p266L-5: Replace "below" with "in Algorithm 10.3".
  • p267L-1: "Algorithm 10.5" should be "Algorithm 10.2".
  • p302L8: Clarification of the first sentence in the second paragraph: "The FastSLAM algorithm, as described in Montemerlo et al. (2002), has proven to be an enabling technology for many SLAM applications."
  • p317: Clarification, in the description of the bilinear transform s represents the derivative operator and z the discrete time time-delay operator.
  • p322: Methods a-c contains several typos, and some of the the underlying assumptions should be better investigated. Stay with methods d and e for now.
  • p328 (12.22b): All occurrences of N of the right hand side should be substituted for M.
  • p341L-6: "nl2ss" should be "nl2lss".
  • p344 Table 13.1: All discrete noise terms should be \bar w_t to distinguish them from the continuous counterparts.
  • 344 Table 13.1: The discrete time CA model should read: x(t+T)= \begin{pmatrix} I_n & TI_n& \frac{T^2}{2}I_n\\ 0_n & I_n & TI_n\\ 0_n & 0_n & I_n \end{pmatrix}x(t)+ \begin{pmatrix}\frac{T^3}{6} I_n\\ \frac{T^2}{2} I_n \\ TI_n\end{pmatrix}\bar{w}(t). Changes are made to the (2,2) and (3,3) elements of F that should all be I_n, the (2, 3) element that should be TI_n, and the (2, 1) element of G that should be T^2/2 I_n.
  • p409 (14.50): The equation should read: "r_k= \|x-p_k\| = \Bigl(\frac{y_k}{\bar{P}^0}\Bigr)^{-1/\beta}".
  • p456 Table A.1: Should be h(y) = (y^2, y)^T.
  • p466L12: Exchange "[...], and CT gives zero variance." for "[...], and CT gives half the correct variance."
  • p472L17: The second last expression should be: \frac{\frac{1}{M}\int_{-\infty}^\infty \pi(x)\,dx}{\frac{1}{M}}
  • p481FigB.3: The caption should be: "Histogram of samples generated with Gibbs sampling and true Laplace distribution density function."
  • p485(C.4): The "\geq" should be ">".
  • p491: In the bullet list, item 2 has been replaced by: "The likelihood function satisfies some regularity conditions to avoid degenerate cases.".
  • p491: In the bullet list, item 3 has been replaced by: "The information matrix is positive definite at the true parameter \mathcal{I}(\theta^o)> 0, so the information available in the measurement is sufficient for local identifiability."
  • p495(C.47): The last relation should be "=" instead of "\sim".

1st edition, 2010

The errata list for the first edition of the book is available from the Book's homepage

Statistical Sensor Fusion - Exercises by Christian Lundquist, Zoran Sjanic and Fredrik Gustafsson

1st edition, 2015


  • (Sept 22, 2015) Page 21, exercise 4.9b: The exercise should to be reformulated as: "Estimate the target location. For this, create a new sensor model and perturb the target position a bit. Use the NLS method from the sensor model class. Plot the estimate with an uncertainty interval overlayed in the sensor model plot." This reformulation ensures that the question and answer are consistent. Furthermore, since the TOA measurement model is nonlinear, NLS instead of LS/WLS estimation should be used.
  • (Aug 2, 2018) Page 53 line -5, exercise 11.1: The reference Figure 5 should be Figure 11.1.
  • (Sept 22, 2015) Page 59, exercise 12.1: In the first sentence \theta and \omega should have a subscript t, i.e. x_t = (\theta_t,\omega_t).
  • (Sept 22, 2015) Page 60, exercise 12.3: "Discretisize" and "discretisized" should be replaced with "Discretize" and "discretized".


  • (Sept 22, 2015) Page 103, exercise 2.1d: \mu should be replaced with \sqrt{2 \pi \sigma^2}.
  • (Sept 22, 2015) Page 133, exercise 4.2, (4.2b): x_1^2 and x_2^2 should be replaced with x_{k,1}^2 and x_{k,2}^2.
  • (Feb 26, 2016) Page 134, (4.3b) should read y = H\bar{x} + e, and the last equality in (4.3c) \bar{x} =.
  • (Sept 22, 2015) Page 134, exercise 4.3, (4.3c): In the definition of the vector x, x^T x should be replaced with R^2.
  • (Apr 17, 2016) Page 138, exercise 4.2c: "H is quadratic" should be replaced with "H is square".
  • (Mar 29, 2018) Page 145, exercise 5.3a: (5.3b) \sigma is missing in two places to make the expression the proper pdf; however, this does not change the end result.
  • (Mar 29, 2018) Page 145, exercise 5.3a: (5.3f), the likelihood in the nominator should be conditioned on H_1 and the one in the denominator on H_0.
  • (Mar 29, 2018) Page 145, exercise 5.3a: (5.3g-i), the sign is wrong and a 1/\sigma^2 is missing, the end result should be: 1/\sigma^2(\sqrt{y_1^2+y_2^2}-1/2).
  • (Mar 29, 2018) Page 146, exercise 5.4b: The computation of T0 and T1 is incorrect, use the new expression for T(y) as derived above.
  • (Mar 29, 2018) Page 148, Figure 5.2, the caption should refer to Exercise 5.5, not 5.4.
  • (Sept 22, 2015) Page 169, exercise 7.2, (7.2j): R should be replaced with r.
  • (Sept 22, 2015) Page 187, exercise 8.6: In line 4 of the Matlab code (mms.px0 = 10*, the uncertainty of the initial state mms.px0 is defined in terms of the measurement noise However, since these two are in principle unrelated it is more intuitive to set mms.px0 to a reasonable value, independent of A reasonable choice for this is mms.px0 = ndist([0; 0; 0; 0], diag([.1, .1, .01, .01]));
  • (Sept 22, 2015) Page 221, exercise 11.1a: The output diag(mhat.P)' should be 10^{-3} smaller than the displayed output.
  • (Sept 22, 2015) Page 222, exercise 11.1c: To account for a sampling time T = 1 in the motion model, the line mmot.exmotion('cv2d') should be changed to mmot.exmotion('cv2d',T).
  • (Sept 22, 2015) Page 241, exercise 13.1, (13.1): All \phi's should be replaced with \Psi's.
  • (Sept 22, 2015) Page 242, exercise 13.2, (13.2b): All components of the state vector (so x, y, v, a, \psi and \omega) need to have a subscript t. Furthermore, in the second row in the state-space model the minus sign should be replaced by a plus, i.e. it should be: y_t + \tfrac{2 v_t}{\omega_t} \sin{\tfrac{\omega_t T}{2}} \sin{\psi_t + \tfrac{\omega_t T}{2} } to make the notation consistent with Table 13.4 on page 353 of the book.







  • (May 21, 2012) Page 192, Eq (9.1b) and (9.1e): The Gaussian in the denominator should have the mean f(x_0^i) instead of x_0^i. Compare with (9.30e) in the text book. Together with the comment from (Apr 20, 2012), the denominator should be N(y_1;f(x_0^i),Q+R).
  • (Apr 20, 2012) Page 168, (7.2): Last exponent should be ^{2(k-m)} instead of ^{k-m}
  • (Apr 20, 2012) Page 178, (8.1c-e) and (8.1i-k): All v_k should be replaced with 0.
  • (Apr 20, 2012) Page 179, (8.2d): Should end with the term 0.04\hat x_{k|k-1}^2 (^2 has been added)
  • (Apr 20, 2012) Page 180, (8.2n): r_2^{(i)} should be replaced with \sigma_2^{(i)}
  • (Apr 20, 2012) Page 192, (9.1b) and (9.1e): The Gaussian in the denominator should have the variance Q+R instead of R. Compare with (9.30e) in the text book.
  • (Apr 23, 2012) Page 265 , Exercise 16.3: Replace continuous velocity with constant velocity