您现在的位置是:首页 >其他 >用C语言实现一个FIR低通滤波器算法网站首页其他

用C语言实现一个FIR低通滤波器算法

周龙(AI湖湘学派) 2024-06-26 14:23:49
简介用C语言实现一个FIR低通滤波器算法

+v hezkz17进数字音频系统研究开发交流答疑 

 

以下是一个基于C语言的FIR低通滤波器算法的实现:

#include <stdio.h>
#include <stdlib.h>

#define N 5     // 滤波器长度
#define M 100   // 输入数据长度

double h[N] = {0.2, 0.3, 0.4, 0.1, 0.0};  // 滤波器系数

int main()
{
    double x[M], y[M];

    // 生成输入信号
    for (int n = 0; n < M; n++)
    {
        x[n] = sin(2 * 3.1415926 * n / 20);  // 正弦波信号
    }

    // FIR滤波器处理过程
    for (int n = 0; n < M; n++)
    {
        y[n] = 0;
        for (int k = 0; k < N; k++)
        {
            if (n - k >= 0)
                y[n] += h[k] * x[n - k];
        }
    }

    // 输出滤波结果
    for (int n = 0; n < M; n++)
    {
        printf("%lf ", y[n]);
    }

    return 0;
}
 

在上述代码中,我们首先定义了一个长度为N的滤波器系数数组h[],并且生成了一个长度为M的正弦波输入信号数组x[]。然后,我们进行FIR滤波器处理过程,即对每个时刻n,将输入信号在时域上和滤波器系数进行卷积操作得到输出信号y[n]。最后,我们输出滤波结果。

需要注意的是,在实际应用中,通常需要对输入信号进行归一化处理,以使得滤波结果在一定范围内。此外,还可以根据需要对滤波器系数进行设计,以达到不同的滤波效果。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。