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