%% Model Based Estimators

W_d  = diag(s.std_dev_d);
W_u  = diag(s.std_dev_u);
W_n  = diag(s.std_dev_nx);
W_ys = diag(s.std_dev_ys);
W_zs = diag(s.std_dev_zs);
H = {[]};

% Scenario 1

W_0 = zeros(lin_mod.size.num_y,lin_mod.size.num_x);

Y1 = [lin_mod.Gy_u*W_u lin_mod.Gy_d*W_d W_0];
X1 = [lin_mod.Gx_u*W_u lin_mod.Gx_d*W_d W_n];
H{1} = Y1*pinv(X1);

% Scenario 2

W_0 = zeros(lin_mod.size.num_y,lin_mod.size.num_x + lin_mod.size.num_d);

Gx_cl = lin_mod.Gx_u*inv(lin_mod.Gy_u);
F = lin_mod.Gx_d-lin_mod.Gx_u*inv(lin_mod.Gy_u)*lin_mod.Gy_d;

Y2 = [W_ys W_0];
X2 = [Gx_cl*W_ys F*W_d W_n];
H{2} = Y2*pinv(X2);

% Scenario 3

W_0 = zeros(lin_mod.size.num_y,lin_mod.size.num_x);

Gy_cl = lin_mod.Gy_u*inv(lin_mod.Gz_u);
Gx_cl = lin_mod.Gx_u*inv(lin_mod.Gz_u);

Fy = lin_mod.Gy_d-lin_mod.Gy_u*inv(lin_mod.Gz_u)*lin_mod.Gz_d;
Fx = lin_mod.Gx_d-lin_mod.Gx_u*inv(lin_mod.Gz_u)*lin_mod.Gz_d;


Y3 = [Gy_cl*W_zs Fy*W_d W_0];
X3 = [Gx_cl*W_ys Fx*W_d W_n];
H{3} = Y3*pinv(X3);

% Scenario 4

Gx_cl = lin_mod.Gx_u*inv(lin_mod.Gy_u);

F = lin_mod.Gx_d-lin_mod.Gx_u*inv(lin_mod.Gy_u)*lin_mod.Gy_d;
F = [F*W_d W_n];

H_tmp = inv(F*F')*lin_mod.Gx_u*inv(lin_mod.Gx_u'*inv(F*F')*lin_mod.Gx_u)*lin_mod.Gy_u';
H{4} = H_tmp';




