用 c 语言写一个50赫兹的陷波器程序
时间: 2023-12-04 18:04:46 浏览: 344
50HZ陷波器的C程序源码.
4星 · 用户满意度95%
以下是一个用C语言编写的50Hz陷波器程序的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define PI 3.14159265
#define SAMPLE_RATE 1000 // 采样率为1000Hz
int main()
{
double f = 50; // 陷波器中心频率为50Hz
double w = 2 * PI * f / SAMPLE_RATE;
double Q = 1 / sqrt(2); // 陷波器品质因数为1/根号2
double b0 = 1 - Q * w;
double b1 = -2 * cos(w);
double b2 = 1 + Q * w;
double a0 = b2;
double a1 = b1;
double a2 = b0;
double x[3] = {0}; // 输入信号和中间变量
double y[3] = {0};
double input_signal[1000] = {0}; // 输入信号为1000个采样点的正弦波
for (int i = 0; i < 1000; i++) {
input_signal[i] = sin(2 * PI * f * i / SAMPLE_RATE);
}
double output_signal[1000] = {0}; // 输出信号
for (int i = 0; i < 1000; i++) {
x[2] = x[1];
x[1] = x[0];
x[0] = input_signal[i];
y[2] = y[1];
y[1] = y[0];
y[0] = (b0 * x[0] + b1 * x[1] + b2 * x[2] - a1 * y[1] - a2 * y[2]) / a0;
output_signal[i] = y[0];
}
// 输出前10个采样点的值
for (int i = 0; i < 10; i++) {
printf("%f\n", output_signal[i]);
}
return 0;
}
```
该程序使用了二阶IIR滤波器的差分方程实现了一个50Hz的陷波器。程序中的陷波器品质因数为1/根号2,中心频率为50Hz,采样率为1000Hz。输入信号为一个1000个采样点的正弦波,输出为经过陷波器处理后的信号。
需要注意的是,该程序中没有对滤波器的性能进行优化,仅作为一个示例程序供参考。实际应用中,需要根据具体需求对滤波器进行设计和优化。
阅读全文