用C语言实现MATLAB中Filter()函数
用C语言实现MATLAB中Filter()函数
Filter函数原理公式:

原理图:

假设输入a(1,-1.5,0.25),b(8,-3.5,0.5),x(1:20)进行模拟,在MATLAB中的结果:

现在用C语言实现,代码:
#include
#include
#define Width 3 //滤波器门宽
#define Inputlength 20//输入信号的个数void myfilter(int, float *, float *, int, float *, float *);int main() {int j,k;float a[3] = { 1,-1.5,0.25 };//分母系数向量,可自行设置float b[3] = { 8,-3.5,0.5 };//分子系数向量,可自行设置float x[20] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };//1-20的序列float x1[20];float y[20]; /*********输入函数***********/for (j = 0; j < 19; j++){x1[j] = cos(0.2*3.14*x[j]);}myfilter(Width, a, b, Inputlength, x1, y);/***********输出循环**************/for (k = 0; k < 20; k++){printf("%f\n", y[k]);}while (1);return 0;
}/**************滤波器函数****************/
void myfilter(int width, float *a, float *b, int inputlength, float *x, float *y)
{int i, j,l;y[0] = b[0] * x[0];for (i = 1; i < inputlength; i++)//对20个输入函数逐一处理{y[i] = 0.0;for (j = 0; j < width; j++)if (i >= j) {y[i] = y[i] + b[j] * x[i - j];}//分子系数与输入函数的乘积和 for (l = 0; l < width-1; l++)if (i > l) {y[i] = (y[i] - a[l + 1] * y[i-l-1])/a[0];}//用之前的乘积和减去分母系数与过去输出函数的乘积差}return;
}
输出结果如图:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
