c/c++实现巴特沃斯低通滤波代码
时间: 2024-08-28 10:01:27 浏览: 113
C/C++实现巴特沃思低通滤波通常涉及到数字信号处理和傅里叶变换的概念。巴特沃斯滤波器是一种线性相位滤波器,以其平坦的频率响应特性而闻名。以下是一个简单的C++示例,使用离散余弦变换(DCT)来实现基本的低通滤波:
```cpp
#include <cmath>
#include <vector>
// 巴特沃思滤波函数
void butterworth_filter(float* input, float* output, int length, float cutoff_freq, int order) {
const float fs = length; // 假设采样频率等于长度
float nyquist_freq = fs / 2;
std::vector<float> b taps(order + 1); // 滤波系数数组
std::vector<float> a taps(order + 1); // 同上,用于归一化
// 计算巴特沃思滤波器系数
for (int i = 0; i <= order; ++i) {
double angle = -M_PI * 2 * i * cutoff_freq / nyquist_freq;
taps[i] = std::cos(angle);
if (i != order) {
taps[i] *= sqrt(2) * std::sin(angle);
a[i] = taps[i];
} else {
a[i] = 1;
}
}
// 使用DCT进行离散卷积
for (int k = 0; k < length; ++k) {
float sum = 0;
for (int n = 0; n <= order; ++n) {
sum += taps[n] * input[k - n];
}
output[k] = sum;
}
}
// 示例用法
float input[length]; // 假设已经填充了输入数据
float output[length];
butterworth_filter(input, output, length, cutoff_freq, order);
阅读全文