读书人

Savitzky-Golay滤波器(二)

发布时间: 2013-09-13 21:12:00 作者: rapoo

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;}


读书人网 >编程

热点推荐