C语言一阶低通、高通滤波器滤除截止频率外的杂波

目录

  • 理论推导
  • 产生测试信号
    • sin_cal.c
    • sin_cal.h
    • 生成波形
  • 一阶滤波器
    • FirstOrderFilter.c
    • FirstOrderFilter.h
    • 测试
      • 低通滤波器
      • 高通滤波器

IAP15W4K58S4
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0
串口示波器:Vofa+ 1.3.10


理论推导

低通滤波器
见一阶RC低通滤波器的数学模型及算法实现 —— 奔跑的chanchanchan
Yn=A⋅Xn+(1−A)⋅Yn−1Y_n=A⋅X_n+(1−A)⋅Y_{n-1}Yn=AXn+(1A)Yn1
A=ΔTRC+ΔT=ΔT12πf+ΔT=11+12πfΔTA=\frac{ΔT}{RC+ΔT}=\frac{ΔT}{\frac{1}{2πf}+ΔT}=\frac{1}{1+\frac{1}{2πfΔT}}A=RC+ΔTΔT=2πf1+ΔTΔT=1+2πfΔT11
高通滤波器
见一阶RC高通滤波器详解(仿真+matlab+C语言实现)—— 小麦大叔
Yn=A⋅Yn−1+A⋅(Xn−Xn−1)Y_n=A⋅Y_{n-1}+A⋅(X_n-X_{n-1})Yn=AYn1+A(XnXn1)
A=RCRC+ΔT=12πf12πf+ΔT=11+2πfΔTA=\frac{RC}{RC+ΔT}=\frac{\frac{1}{2πf}}{\frac{1}{2πf}+ΔT}=\frac{1}{1+2πfΔT}A=RC+ΔTRC=2πf1+ΔT2πf1=1+2πfΔT1

产生测试信号

sin_cal.c

#include "sin_cal.h"
#include <math.h>void sin_Init(sin_Type *Sin, float f, float delta_ms)
{Sin->angle = 0;Sin->delta = 2 * 3.141592653589793f * f * delta_ms / 1000.f;Sin->out = 0;
}float sin_cal(sin_Type *Sin)
{Sin->angle += Sin->delta;if (Sin->angle > 6.283185307179586f)Sin->angle -= 6.283185307179586f;Sin->out = sin(Sin->angle);return Sin->out;
}

sin_cal.h

#ifndef __SIN_CAL_H__
#define __SIN_CAL_H__typedef struct
{float angle;float delta;float out;
} sin_Type;void sin_Init(sin_Type *Sin, float f, float delta_ms);	//f为设定的频率,delta_ms为时间间隔
float sin_cal(sin_Type *Sin);#endif

生成波形

初始化

//...
sin_Type Sin_1, Sin_2;
//...sin_Init(&Sin_1, 1, 5);		//1  Hz的正弦波sin_Init(&Sin_2, 25, 5);	//25 Hz的正弦波
//...

定时器中断周期为1ms,每5ms输出一次数据

extern sin_Type Sin_1, Sin_2;/********************* Timer0中断函数************************/
void timer0_int (void) interrupt TIMER0_VECTOR
{static int count = 0;float Data;if(++count >= 5){count = 0;sin_cal(&Sin_1);sin_cal(&Sin_2);Data = Sin_1.out+Sin_2.out;printf("%f\r\n", Data);}
}

如图,生成了1Hz和25Hz的混合波形:
在这里插入图片描述

一阶滤波器

FirstOrderFilter.c

#include "FirstOrderFilter.h"void fof_Init(fof_Type *fof, float f, float delta_ms, char HPForLPF) 
{fof->in_old = 0;fof->out = 0;fof->type = HPForLPF;fof->a = 2 * 3.141592653589793f * f * delta_ms / 1000.f;if(!HPForLPF){fof->a = 1.f / fof->a;}fof->a = 1.f / (1.f + fof->a);
}float FirstOrderFilter(fof_Type *fof, float in)
{if(fof->type){fof->out = fof->a * fof->out + fof->a * (in - fof->in_old);fof->in_old = in;}elsefof->out = fof->a * in + (1 - fof->a) * fof->out;return fof->out;
}

FirstOrderFilter.h

#ifndef __FOF_H__
#define __FOF_H__typedef struct
{float a;float in_old;float out;char type;
} fof_Type;void fof_Init(fof_Type *fof, float f, float delta_ms, char HPForLPF);	//f为截止频率,delta_ms为时间间隔,HPForLPF为类型选择
float FirstOrderFilter(fof_Type *fof, float in);#endif

测试

//...
fof_Type fof_1, fof_2;
//...fof_Init(&fof_1, 1, 5, 0);	//低通滤波器,截止频率为1Hzfof_Init(&fof_2, 25, 5, 1);	//高通滤波器,截止频率为25Hz
//...
extern fof_Type fof_1, fof_2;
extern sin_Type Sin_1, Sin_2;/********************* Timer0中断函数************************/
void timer0_int (void) interrupt TIMER0_VECTOR
{static int count = 0;float Data;if(++count >= 5){count = 0;sin_cal(&Sin_1);sin_cal(&Sin_2);Data = Sin_1.out+Sin_2.out;printf("%f, %f, %f\r\n", Data, FirstOrderFilter(&fof_1, Data), FirstOrderFilter(&fof_2, Data));}
}

下图为滤波效果
在这里插入图片描述

低通滤波器

在这里插入图片描述

对于低通滤波器,截止频率处的1Hz信号能量衰减至0.688,与12≈0.707\frac{1}{\sqrt{2}}≈0.707210.707相差2.7%,
在这里插入图片描述
截止频率外的25Hz的信号经滤波已衰减至0.040
在这里插入图片描述

高通滤波器

在这里插入图片描述

对于高通滤波器,截止频率处的25Hz信号能量衰减至0.594,与12≈0.707\frac{1}{\sqrt{2}}≈0.707210.707相差16%,
在这里插入图片描述
截止频率外的1Hz的信号经滤波已衰减至0.039
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/399995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OAF_开发系列19_实现OAF对话框提示dialogPage(案例)

20150716 Created By BaoXinjian 一、摘要 Oracle dialogPage是OAF提示框的一种用法&#xff0c;具体应用例如在删除数据时&#xff0c;提示用户进行确认是否可以删除 二、实现方法 在CO中添加如下方法 public void processFormRequest(OAPageContext pageContext,OAWebBean we…

设计模式(一)---简单工厂模式

1&#xff0c;简介&#xff1a;简单工厂模式&#xff0c;又称为静态工厂模式&#xff0c;是通过专门定义一个类来负责创建其他类的实例&#xff0c;被创建的实例通常都具有共同的父类。 2&#xff0c;简单工厂模式的结构 2.1&#xff1a;简单工厂的通用结构 2.2&#xff1a;示意…

给LaTex输出的论文PDF加上电子签名

目录问题准备签名插入签名TeXstudio 4.2.3 Windows 10 20H2 参考资料&#xff1a;研究生毕业论文电子签名怎么弄&#xff1f;—— kk肥妹 问题 完成论文之后&#xff0c;需要加上签名&#xff0c;但LaTex输出的结果是PDF格式的 准备签名 准备自己的签名&#xff0c;比如直接…

判断两个矩形相交以及求出相交的区域

问题&#xff1a;给定两个矩形A和B&#xff0c;矩形A的左上角坐标为&#xff08;Xa1,Ya1&#xff09;&#xff0c;右下角坐标为&#xff08;Xa2,Ya2&#xff09;&#xff0c;矩形B的左上角坐标为&#xff08;Xb1,Yb1&#xff09;&#xff0c;右下角 坐标为&#xff08;Xb2,Yb2&…

【MSP430G2553】图形化开发笔记(1) 配置环境

目录CCS的配置下载和安装激活安装Grace并导入CCS安装MSP430Ware并导入CCS安装XDCtools并导入CCS建立工程Welcome介绍开始打开官方点灯Demo平台&#xff1a; Code Composer Studio 6.2.0 Grace 2.2.0 MSP430G2553 LaunchPad™ Development Kit (MSP-EXP430G2ET) CCS的配置 支…

【现代程序设计】【homework-07】

C11 中值得关注的几大变化 1.Lambda 表达式 Lambda表达式来源于函数式编程&#xff0c;说白就了就是在使用的地方定义函数&#xff0c;有的语言叫“闭包”&#xff0c;如果 lambda 函数没有传回值(例如 void )&#xff0c;其回返类型可被完全忽略。 定义在与 lambda 函数相同作…

Jfinal源码解析系列一

2019独角兽企业重金招聘Python工程师标准>>> 1 Jfinal的初始化入口 <filter><filter-name>jfinal</filter-name><filter-class>com.jfinal.core.JFinalFilter</filter-class><init-param><param-name>configClass</pa…

【MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式

目录系统时钟概述BCS模块单元的基本构造时钟-概览介绍Basic User 模式Power User 模式1. 数控振荡器 DCO2. 出厂预校正频率3. 低频振荡器 VLO4. 内部匹配电容5. 延时启动6. 自动选择 MCLK 源7. 时钟输出8. 振荡器失效中断9. 中断事件处理函数10. 退出中断后的节能选项Registers…

alias命令

alias命令&#xff08;取别名之前先运行一下将要使用的别名&#xff0c;以免冲突&#xff09; alias语法&#xff1a;alias 自定义的命令真正的命令 1.使用which查看一个命令的完整命令&#xff0c;也可以查看绝对路径 2.‘alias’查看系统中所有别名&#xff1a; 3.应用 再使用…

奇怪的 加号

转载于:https://www.cnblogs.com/chuyu/p/3421237.html

Java反射机制:表单数据自动封装到JavaBean中【IT】

2019独角兽企业重金招聘Python工程师标准>>> (2010-07-09 19:50:18) 转载▼ 标签&#xff1a; it 分类&#xff1a; IT路人丁 利用Java的反射机制&#xff0c;模拟一个简单的Struts控制器ActionServlet时&#xff0c;为了将请求的表单数据自动封装到JavaBean中&…

eclipse启动tomcat不能正常访问问题

问题&#xff1a; 1、eclipse中配置好tomcat服务器后&#xff0c;启动tomcat查看控制台信息显示启动成功&#xff0c; 但访问tomcat首页报404异常 2、而从tomcat/bin目录中启动后&#xff0c;就能够正常访问首页&#xff0c;由此分析应该是eclipse配置错误 解决方案&#xff1a…

AD域

将网络中的计算机逻辑上组织到一起&#xff0c;将器视为一个整体进行集中管理&#xff0c;这种区别于工作组的逻辑环境叫做Windows域。windows管理模式有两种&#xff1a;工作组和与环境。活动目录的相关概念(1)域和域控制器(2)名称空间(3)对象和属性(4)容器(5)组策略活动目录的…

Python学习笔记19(算法)

1.二分查找 只能用二分查找查找有序列表 def bin_search(data,val): #data为被查找的列表&#xff0c;val是要查找的值low 0high len(data) - 1while low < high:mid (lowhigh)//2if data[mid] val:return mid #找到了&#xff0c;返回val所在的索引elif dat…

C#通过接口与线程通信(捕获线程状态)介绍

摘要&#xff1a;本文介绍C#通过接口与线程通信(捕获线程状态)&#xff0c;并提供简单的示例代码供参考。 提示&#xff1a;本文所提到的线程状态变化&#xff0c;并不是指线程启动、暂停、停止&#xff0c;而是说线程内部状态的迁移。随着软件技术不断发展&#xff0c;用户需求…

php 类文件加载 Autoloader

做习惯了编译语言&#xff0c;转到php 使用 php的面向对象开发时候遇见一个挺别扭的问题。在Php中引入对象 后 在调用过程中还需要将对象所在的php文件 require 到当前php文件 目前代码结构 index.php <?phpuse model\BookModel;include_once __DIR__./autoloader.php; Aut…

【MSP430G2553】图形化开发笔记(4) Timer_A 定时器

目录概述Timer_A 模块16 位主定时器连续计数模式增计数模式增减计数模式主定时器的一般设置捕获/比较模块 CCRx捕获模块比较模块小结Grace中配置Timer_ATimer0_A3 - Overview介绍用例&#xff1a;定时器的启动/停止用例&#xff1a;使用定时器比较模式产生周期性间隔用例&#…

前端UI框架《Angulr》入门

Angulr 项目的名称为 Angulr&#xff0c;对&#xff01;没错&#xff01;就是少个 a&#xff0c;少个 a 就是它正确的拼写。 是一个以 Bootstrap 和 AngularJS 为基础&#xff0c;并使用了大量前端开源组件合成的一个前端UI框架&#xff0c;是非常棒的UI框架。 今天就来和大家讲…

Flask使用Flask-SQLAlchemy操作MySQL数据库

https://www.jianshu.com/p/6ae0d30a5539 前言&#xff1a; Flask-SQLAlchemy是一个Flask扩展&#xff0c;简化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一个很强大的关系型数据库框架&#xff0c;支持多种数据库后台。SQLAlchemy提供了高层ORM&#xff0c;也提供了…

会计基础模拟练习一(3)

会计基础模拟练习一&#xff08;3&#xff09; 下周一18号会计从业资格考试就要报名了,本人重点看的是会计基础和会计电算化,做了一下测试题,五十多分,较之前有了一些长进.很多之前重点复习的章节有了明显的提升,像后面的几章没怎么看,出错的概率就大大的提升了. 我觉得这个考试…