滤波算法是一种常用的信号处理技术,可以用于去噪、降低信号干扰等应用。下面是一个简单的C语言实现,用于对一维信号进行平滑滤波。

#include <stdio.h>

#define N 10 // 信号长度
#define M 3 // 滤波器长度

int main()
{
    int signal[N] = {1, 3, 5, 6, 8, 9, 10, 8, 5, 2}; // 原始信号
    int filtered[N]; // 滤波后的信号

    // 滤波器
    float filter[M] = {0.25, 0.5, 0.25};

    // 对信号进行滤波
    for (int i = 0; i < N - M + 1; i++) {
        filtered[i] = 0;
        for (int j = 0; j < M; j++) {
            filtered[i] += signal[i+j] * filter[j];
        }
    }

    // 输出结果
    printf("Original signal:\n");
    for (int i = 0; i < N; i++) {
        printf("%d ", signal[i]);
    }
    printf("\n");

    printf("Filtered signal:\n");
    for (int i = 0; i < N - M + 1; i++) {
        printf("%d ", filtered[i]);
    }
    printf("\n");

    return 0;
}

在这个例子中,我们使用了一个长度为3的平均滤波器,对长度为10的信号进行滤波。滤波器权重为{0.25, 0.5, 0.25},表示中间的值权重最大,两边的权重相等。

在对信号进行滤波时,我们遍历信号的每一个点,对于每一个点,计算它周围3个点的加权平均值,作为滤波后的值。注意,由于滤波器是一个长度为3的窗口,因此我们只能对信号的前N-M+1个点进行滤波,否则会涉及到信号外部的数据。在本例中,滤波后的信号长度为8。

滤波算法-c语言

原文地址: https://www.cveoy.top/t/topic/giL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录