Savitzky-Golay滤波器(2)
前几天写过一篇介绍 Savitzky-Golay滤波器的文章, 没想到最近做项目还真的用上了。
因此就顺便写了个 C 语言的自动计算生成 SG 滤波器系数的程序。利用这里的代码可以生成任意阶数的 SG 滤波器。对于一些需要动态调整 SG 滤波器系数的场合,这里的代码还是很实用的。 上次的文章中给出了计算 SG 滤波器系数的 matlab 代码。
/** * 计算 Savitzky-Golay 滤波器系数 * SG 滤波器的阶数为 2M+1,多项式的最高次数为 N */gsl_vector* SG_FilterCreate(int M, int N /* Poly Order */){ int i; gsl_vector *x = gsl_vector_alloc(2 * M + 1); gsl_vector *y = gsl_vector_alloc(2 * M + 1); gsl_vector_set_zero(y); gsl_vector_set(y, M, 1); for(i= -M; i <= M; i++) { gsl_vector_set(x, i + M, i); } gsl_vector *c = PolyFit(x, y, N); gsl_vector_free(x); gsl_vector_free(y); gsl_vector *fir = gsl_vector_alloc(2 * M + 1); for(i = -M; i <= M; i++) { gsl_vector_set(fir, i + M, gsl_poly_eval (c->data, N + 1, i)); } gsl_vector_free(c); return fir;}