101 {
102
103
104
105
106 int rows = poly_order_ + 1;
107 std::vector<std::vector<float>> J(rows, std::vector<float>(rows));
108
109 for (int i = 0; i < rows; ++i) {
110 for (int j = 0; j < rows; ++j) {
111 float sum = 0;
112 for (int k = -window_radius_; k <= window_radius_; ++k) {
113 sum += std::pow(k, i + j);
114 }
115 J[i][j] = sum;
116 }
117 }
118
119
120 auto J_inv = invert_matrix(J);
121
122
123
124
125
126
127 coeffs_.resize(window_size_);
128 for (int k = -window_radius_; k <= window_radius_; ++k) {
129 float weight = 0.0;
130 for (int j = 0; j < rows; ++j) {
131 weight += J_inv[0][j] * std::pow(k, j);
132 }
133 coeffs_[k + window_radius_] = weight;
134 }
135}