低通滤波器算法代码C语言版
时间: 2024-09-30 10:00:21 浏览: 55
在C语言中,实现一个简单的低通滤波器通常会涉及到数字信号处理的基本概念,如傅里叶变换和IIR(无限 impulse response)或FIR(有限 impulse response)滤波器。这里我们以一种常见的FIR滤波器为例,给出一个简单线性相位FIR滤波器的代码,假设我们要设计一个长度为N的滤波器,比如N=5。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义滤波器系数
#define FILTER_LENGTH 5
float filter_coefficients[FILTER_LENGTH] = {0.8, 0.6, 0.4, 0.2, 0.1}; // 这些值应根据需要调整
void lowpass_filter(float input[], float output[], int length) {
for (int i = 0; i < length; ++i) {
float sum = 0;
for (int j = 0; j < FILTER_LENGTH; ++j) {
sum += filter_coefficients[j] * input[i - j]; // 左移计算加权和
}
output[i] = sum; // 输出滤波后的结果
}
}
int main() {
float input[] = {1, 2, 3, 4, 5, 6}; // 输入数据
float output[length_of_input + FILTER_LENGTH - 1]; // 预留足够的空间
int length_of_input = sizeof(input) / sizeof(input[0]);
lowpass_filter(input, output, length_of_input);
printf("Filtered Output: ");
for (int i = 0; i < length_of_input; ++i) {
printf("%.1f ", output[i]);
}
return 0;
}
```
在这个例子中,`lowpass_filter`函数接受输入数组、输出数组以及输入数据的长度,然后通过循环应用滤波系数对每个采样点进行加权求和。注意实际使用时,滤波器系数可能需要经过精确设计以满足特定的截止频率和其他滤波特性。
阅读全文