Hi Hannes,
Good find, it was used in the moving-target spawn of GM_PHD_Create_Birth at line 65 but was missed at the static-target spawn at line 116. It should be fixed now.

Hi Kelin,
That was an untidy bug that I left in there because I kept forgetting to fix it. It didn't break anything, it just meant that the simTarget3Vel was half what it should have been. Well spotted, it should be gone now.

Hi Ying. Currently the sensor is simulated as a direct measurement of target position in cartesian space; the measurement vector Z = [X; Y] where X = [x1, x2, ... xN], Y = [y1, y2, ... yN] for detected targets/clutter 1:N. See the file GM_PHD_Simulate_Measurements.m for how this is done. This is in line with the simulation described in Vo & Ma, and allows a linear Kalman filter to be used.
The same paper describes an extended Kalman filter EKF-PHD algorithm which can be used in nonlinear problems, such as those using range-bearing sensors. I will upload an implementation of this as a separate submission in a couple of days.

Hi, Bryan. I hava a question with the target modelling. In function `GM_PHD_Initialisation`, the standard deviation of process noise `sigma_v` is initialised. While in function `GM_PHD_Simulate_Measurements`, the functions for target 1, 2 and 3 are like `simTargetiState = F * simTarget1State`. It seems that the process noise has not been involved. And in function `GM_PHD_Predict_Birth`, there is also no process noise. Can you please tell me how did you treat with the process noise? Thank you.

Hi Hannes,
Good find, it was used in the moving-target spawn of GM_PHD_Create_Birth at line 65 but was missed at the static-target spawn at line 116. It should be fixed now.

Hey Bryan,
I'm currently implementing a GM-CPHD Filter, and - just to find out the similarities - I've read some old papers about the standard GM-PHD Filter, e.g., 'The Gaussian Mixture Probability Hypothesis Density Filter', Vo et al., 2006 (as mentioned in your description). Additionally, I've compared your GM-PHD implementation with mine. I've realized that you do not consider the old target weights when you calculate the spawning probabilities (see eq. 28 and tab. 1, step 1, 2nd loop in Vo's paper).

Hi Kelin,
That was an untidy bug that I left in there because I kept forgetting to fix it. It didn't break anything, it just meant that the simTarget3Vel was half what it should have been. Well spotted, it should be gone now.

Hi Bryan. Thanks for your sharing code. I think it's great! At the same time, I have a question in function `GM_PHD_Simulate_Measurements`. Why does `simTarget3State = F * simTarget3State` been executed twice after the `simTarget3SpawnTime` during one iteration? At the first time, it was executed because `simTarget3State` will not be empty(since it will be constructed at the `simTarget3SpawnTime`) after the `simTarget3SpawnTime` at line 23-25, then it will be executed again since `k > simTarget3SpawnTime` at line 31-33. Can you please explain to me if I'm missing something? Thank you.

Hi, Bryan. I hava a question with the target modelling. In function `GM_PHD_Initialisation`, the standard deviation of process noise `sigma_v` is initialised. While in function `GM_PHD_Simulate_Measurements`, the functions for target 1, 2 and 3 are like `simTargetiState = F * simTarget1State`. It seems that the process noise has not been involved. And in function `GM_PHD_Predict_Birth`, there is also no process noise. Can you please tell me how did you treat with the process noise? Thank you.

Hi Hannes,
Good find, it was used in the moving-target spawn of GM_PHD_Create_Birth at line 65 but was missed at the static-target spawn at line 116. It should be fixed now.

Hey Bryan,
I'm currently implementing a GM-CPHD Filter, and - just to find out the similarities - I've read some old papers about the standard GM-PHD Filter, e.g., 'The Gaussian Mixture Probability Hypothesis Density Filter', Vo et al., 2006 (as mentioned in your description). Additionally, I've compared your GM-PHD implementation with mine. I've realized that you do not consider the old target weights when you calculate the spawning probabilities (see eq. 28 and tab. 1, step 1, 2nd loop in Vo's paper).
It should be
w_spawn = w_beta * w_old * N(·)
instead of
w_spawn = w_beta * N(·).
Please, let me know if I'm wrong. Thanks!

Hi Kelin,
That was an untidy bug that I left in there because I kept forgetting to fix it. It didn't break anything, it just meant that the simTarget3Vel was half what it should have been. Well spotted, it should be gone now.

Hi Bryan. Thanks for your sharing code. I think it's great! At the same time, I have a question in function `GM_PHD_Simulate_Measurements`. Why does `simTarget3State = F * simTarget3State` been executed twice after the `simTarget3SpawnTime` during one iteration? At the first time, it was executed because `simTarget3State` will not be empty(since it will be constructed at the `simTarget3SpawnTime`) after the `simTarget3SpawnTime` at line 23-25, then it will be executed again since `k > simTarget3SpawnTime` at line 31-33. Can you please explain to me if I'm missing something? Thank you.

Comment only