当前位置:   article > 正文

C语言实现低通滤波器_低通滤波程序代码

低通滤波程序代码

一阶低通滤波器

  1. #define ALPHA 0.1 // 滤波系数,可根据实际需求调整
  2. static float prev_input = 0; // 上一时刻的输入值
  3. float low_pass_filter(float input) {
  4. float output;
  5. // 实现一阶低通滤波的核心算法
  6. output = ALPHA * input + (1 - ALPHA) * prev_input;
  7. // 更新上一时刻的输入值
  8. prev_input = output;
  9. return output;
  10. }
  11. int main() {
  12. float current_input, filtered_output;
  13. // 假设我们有一个模拟信号源
  14. for(int i = 0; i < 100; i++) {
  15. current_input = get_analog_signal(); // 获取当前模拟信号值,这里假设有一个获取信号的函数
  16. filtered_output = low_pass_filter(current_input);
  17. printf("原始信号值: %.2f, 过滤后信号值: %.2f\n", current_input, filtered_output);
  18. }
  19. return 0;
  20. }

二阶低通滤波器

  1. // 定义滤波器参数
  2. #define WC 0.5 // 截止频率(归一化频率,范围为0到1)
  3. #define DC 1.0 // 数字域截止频率,取决于采样率
  4. #define NUMERATOR_COEFF {1.0, -2.0 * cos(2.0 * M_PI * WC), 1.0} // 分子系数
  5. #define DENOMINATOR_COEFF {1.0, -2.0 * cos(2.0 * M_PI * WC / DC), pow(1.0 - pow(WC, 2), 2)} // 分母系数
  6. static float state[2] = {0, 0}; // 存储滤波器状态变量
  7. // 二阶巴特沃斯低通滤波器
  8. float second_order_low_pass_filter(float input) {
  9. float output;
  10. // 根据差分方程进行滤波计算
  11. output = (NUMERATOR_COEFF[0] * input + NUMERATOR_COEFF[1] * state[0] + NUMERATOR_COEFF[2] * state[1]) /
  12. (DENOMINATOR_COEFF[0] + DENOMINATOR_COEFF[1] * state[0] + DENOMINATOR_COEFF[2] * state[1]);
  13. // 更新状态变量
  14. state[1] = state[0];
  15. state[0] = output;
  16. return output;
  17. }
  18. int main() {
  19. float current_input, filtered_output;
  20. // 假设我们有一个模拟信号源
  21. for(int i = 0; i < 100; i++) {
  22. current_input = get_analog_signal(); // 获取当前模拟信号值,这里假设有一个获取信号的函数
  23. filtered_output = second_order_low_pass_filter(current_input);
  24. printf("原始信号值: %.2f, 过滤后信号值: %.2f\n", current_input, filtered_output);
  25. }
  26. return 0;
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/493658
推荐阅读
相关标签
  

闽ICP备14008679号