基于GSL的FIR滤波器实例
时间: 2023-10-29 07:04:16 浏览: 175
有符号FIR滤波器的实现
以下是一个基于GSL(GNU Scientific Library)的FIR滤波器实例,用于对一个信号进行低通滤波:
```c
#include <stdio.h>
#include <gsl/gsl_filter.h>
#define N 1000
int main() {
double data[N];
gsl_filter_fir_workspace *w = gsl_filter_fir_alloc(51);
gsl_filter_fir *fir = gsl_filter_fir_alloc(w->n, 0.1);
// Generate input data
for (size_t i = 0; i < N; i++) {
data[i] = sin(2 * M_PI * i / 100) + 0.2 * sin(2 * M_PI * i / 10);
}
// Apply filter
gsl_filter_fir_reset(fir);
for (size_t i = 0; i < N; i++) {
double result;
gsl_filter_fir_apply(fir, data[i], &result);
printf("%g\n", result);
}
gsl_filter_fir_free(fir);
gsl_filter_fir_workspace_free(w);
return 0;
}
```
该程序首先分配一个长度为51的 FIR 滤波器工作区(workspace),然后使用该工作区创建一个 FIR 滤波器对象。接下来,生成了一个包含正弦信号和噪声的输入数据。最后,通过循环将每个输入数据传递到滤波器中,并输出滤波器的输出结果。最后,释放创建的对象和工作区。
这个实例只是一个基本的示例,你可以根据需要进行修改和扩展。
阅读全文