def fixed_lag_smoothing(e_t, HMM, d, ev, t): """[Figure 15.6] Smoothing algorithm with a fixed time lag of 'd' steps. Online algorithm that outputs the new smoothed estimate if observation for new time step is given.""" ev.insert(0, None) T_model = HMM.transition_model f = HMM.prior B = [[1, 0], [0, 1]] evidence = [] evidence.append(e_t) O_t = vector_to_diagonal(HMM.sensor_dist(e_t)) if t > d: f = forward(HMM, f, e_t) O_tmd = vector_to_diagonal(HMM.sensor_dist(ev[t- d])) B = matrix_multiplication(inverse_matrix(O_tmd), inverse_matrix(T_model), B, T_model, O_t) else: B = matrix_multiplication(B, T_model, O_t) t = t + 1 if t > d: # always returns a 1x2 matrix return([normalize(i) for i in matrix_multiplication([f], B)][0]) else: return None
def fixed_lag_smoothing(e_t, HMM, d, ev, t): """ [Figure 15.6] Smoothing algorithm with a fixed time lag of 'd' steps. Online algorithm that outputs the new smoothed estimate if observation for new time step is given.""" ev.insert(0, None) T_model = HMM.transition_model f = HMM.prior B = [[1, 0], [0, 1]] evidence = [] evidence.append(e_t) O_t = vector_to_diagonal(HMM.sensor_dist(e_t)) if t > d: f = forward(HMM, f, e_t) O_tmd = vector_to_diagonal(HMM.sensor_dist(ev[t - d])) B = matrix_multiplication(inverse_matrix(O_tmd), inverse_matrix(T_model), B, T_model, O_t) else: B = matrix_multiplication(B, T_model, O_t) t += 1 if t > d: # always returns a 1x2 matrix return [normalize(i) for i in matrix_multiplication([f], B)][0] else: return None
def fixed_lag_smoothing(e_t, HMM, d, ev, t): """Algoritmo de suavização com um intervalo de tempo fixo de passos 'd'. Algoritmo online que produz a nova estimativa suavizada se a observação Para novo passo de tempo é dado.""" ev.insert(0, None) T_model = HMM.transition_model f = HMM.prior B = [[1, 0], [0, 1]] evidence = [] evidence.append(e_t) O_t = vector_to_diagonal(HMM.sensor_dist(e_t)) if t > d: f = forward(HMM, f, e_t) O_tmd = vector_to_diagonal(HMM.sensor_dist(ev[t - d])) B = matrix_multiplication(inverse_matrix(O_tmd), inverse_matrix(T_model), B, T_model, O_t) else: B = matrix_multiplication(B, T_model, O_t) t = t + 1 if t > d: return [normalize(i) for i in matrix_multiplication([f], B)][0] else: return None