基于c语言的数字带通滤波器,中心频率为1000Hz,放大倍数为25倍
时间: 2024-03-23 09:39:32 浏览: 46
C语言实现的数字滤波器
以下是一个基于C语言实现的数字带通滤波器,中心频率为1000Hz,放大倍数为25倍的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
void bandpass_filter(double* input, double* output, int length, double sample_rate, double center_freq, double bandwidth, double gain) {
double omega = 2.0 * PI * center_freq / sample_rate;
double delta = 2.0 * PI * bandwidth / sample_rate;
double a = sin(delta / 2.0) / cos(delta / 2.0);
double b = sin(omega);
double c = cos(omega);
double beta = b / (2.0 * a);
double gamma = (1 - beta * c + a) / (1 + beta * c + a);
double alpha = (0.5 - gamma) / 2.0;
double x1 = 0.0;
double x2 = 0.0;
double y1 = 0.0;
double y2 = 0.0;
for (int i = 0; i < length; i++) {
double x0 = input[i];
double y0 = alpha * (x0 + 2.0 * x1 + x2) + gamma * y1 + beta * gamma * y2;
x2 = x1;
x1 = x0;
y2 = y1;
y1 = y0;
output[i] = gain * y0; // 进行放大操作
}
}
int main() {
double input[1024] = {0.0}; // 输入信号
double output[1024] = {0.0}; // 输出信号
int length = 1024; // 信号长度
double sample_rate = 8000.0; // 采样率
double center_freq = 1000.0; // 中心频率
double bandwidth = 100.0; // 带宽
double gain = 25.0; // 放大倍数
// 生成输入信号,这里假设为正弦波
for (int i = 0; i < length; i++) {
input[i] = sin(2.0 * PI * i * center_freq / sample_rate);
}
// 进行数字带通滤波
bandpass_filter(input, output, length, sample_rate, center_freq, bandwidth, gain);
// 输出结果
for (int i = 0; i < length; i++) {
printf("%.4f\n", output[i]);
}
return 0;
}
```
这段代码生成一个长度为1024的正弦波作为输入信号,中心频率为1000Hz,采样率为8000Hz,带宽为100Hz,放大倍数为25倍的数字带通滤波。输出结果为滤波后的信号。可以根据自己的需要调整输入信号、滤波参数等。
阅读全文