滤波算法-c语言
滤波算法是一种常用的信号处理技术,可以用于去噪、降低信号干扰等应用。下面是一个简单的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。
原文地址: https://www.cveoy.top/t/topic/giL 著作权归作者所有。请勿转载和采集!