如果本文帮到了你,帮忙点个赞;

如果本文帮到了你,帮忙点个赞;

如果本文帮到了你,帮忙点个赞;

HPF 一阶RC高通滤波器详解(仿真+matlab+C语言实现)

LPF 一阶RC低通滤波器详解(仿真+matlab+C语言实现)

1 预备知识

低通滤波器(LPF)可以滤除频率高于截止频率的信号,类似的还有高通滤波器,带通滤波器,带阻滤波器。一阶RC低通滤波器的电路如下图所示;



参考了Wiki了,然后推导了一遍;首先输入输出的关系如下;

Vin(t)−Vout(t)=Ri(t)
V_{in} (t)- V_{out}(t) = Ri(t)
Vin​(t)−Vout​(t)=Ri(t)

所以电容的Qc(t)Q_{c}(t)Qc​(t)的充电时间为 ttt因此满足以下条件;

{Qc(t)=CVout(t)⋯①i(t)=dQcdt⋯②
\begin{cases}
Q_{c}(t) = CV_{out}(t) \cdots ①\\
\\
i(t) = \cfrac{dQ_{c}}{dt} \cdots ②
\end{cases}
⎩⎪⎪⎨⎪⎪⎧​Qc​(t)=CVout​(t)⋯①i(t)=dtdQc​​⋯②​

所以由①,②可得:

Vin(t)−Vout(t)=RCdVoutdt⋯③
V_{in} (t)- V_{out}(t) = RC\cfrac{dV_{out}}{dt} \cdots ③
Vin​(t)−Vout​(t)=RCdtdVout​​⋯③

将方程进行离散化,如果输入VinV_{in}Vin​和输出输入VoutV_{out}Vout​按照 △T\bigtriangleup_{T}△T​的时间采样,那么可以将输入和输出序列化,则

VinV_{in}Vin​序列化为:

(x1,x2,x3⋯ ,xn−1,xn)(x_{1},x_{2},x_{3}\cdots,x_{n-1},x_{n})(x1​,x2​,x3​⋯,xn−1​,xn​)

VoutV_{out}Vout​序列化为:

(y1,y2,y3⋯ ,yn−1,yn)(y_{1},y_{2},y_{3}\cdots,y_{n-1},y_{n})(y1​,y2​,y3​⋯,yn−1​,yn​)

因此可以将③式转化为:

xi−yi=RCyi−yi−1△T⋯④
x_{i} - y_{i} = RC\cfrac{y_{i}-y_{i-1}}{\bigtriangleup_{T}}\cdots④
xi​−yi​=RC△T​yi​−yi−1​​⋯④

因此最终滤波输出的序列 yiy_{i}yi​ 如下所示;



同样进行简化之后可以得到;

yi=α∗xi+(1−α)∗yi−1
y_{i} = \alpha*x_{i} + (1-\alpha)*y_{i-1}
yi​=α∗xi​+(1−α)∗yi−1​

后面可以根据这个公式进行程序设计;

另外,截止频率fcf_{c}fc​满足;

fc=12πRC⋯⑤
f_{c} = \cfrac{1}{2\pi RC} \cdots ⑤ \\
fc​=2πRC1​⋯⑤

2 simulink 仿真

这里直接根据公式③构建一搞Subsystem

Vin(t)−Vout(t)=RCdVoutdt
V_{in} (t)- V_{out}(t) = RC\cfrac{dV_{out}}{dt}
Vin​(t)−Vout​(t)=RCdtdVout​​

Subsystem



整体的仿真图如下:



其中Sine Wave频率设置为2*pi*50



其中Sine Wave1频率设置为2*pi



所以这里需要使得2*pi*50的信号衰减,所以根据,截止频率fcf_{c}fc​的计算公式,可以改变增益的值,具体如下所示;

3 simulink 运行结果

最终的仿真的运行结果如下图所示;

Gain Value0.005



Gain Value0.0318

4 matlab实现

根据公式yi=α∗xi+(1−α)∗yi−1
y_{i} = \alpha*x_{i} + (1-\alpha)*y_{i-1}
yi​=α∗xi​+(1−α)∗yi−1​

实现数字一阶RC低通滤波器,具体matlab程序如下;


Serial = 0:0.1:100;
Fs = 1;
Phase = 0;
Amp = 1; % 高频信号
N0 = 2*pi*Fs*Serial - Phase;
X0 = Amp*sin(N);
subplot(4,1,1);
plot(X0); % 低频信号
Fs = 0.02;
N1 = 2*pi*Fs*Serial - Phase;
X1 = Amp*sin(N1);
subplot(4,1,2);
plot(X1); % 高频低频叠加的信号
X2=X0+X1;
subplot(4,1,3);
plot(X2); %Xi-Yi=RC*(Yi - Yi-1)/DetalT
len = length(X2);
X3=X2;
p=0.05; % 一阶RC滤波得到X3
for i=2:len
X3(i) = p*X2(i)+(1-p)*X3(i-1);
end subplot(4,1,4);
plot(X3);

5 matlab运行结果

运行结果如下所示;

6 C语言实现

low_filter.h

typedef struct
{
int16_t Input;
int16_t Output[2];
int32_t FilterTf;
int32_t FilterTs;
int32_t Kr;
int32_t Ky; } low_filter; void low_filter_init(low_filter *v);
int16_t low_filter_calc(low_filter *v);

其中;

  • FilterTs为采样时间;
  • FilterTfRC时间常数

具体参考下图;



low_filter.c

void low_filter_init(low_filter *v){

     v->Kr = v->FilterTs*1024/(v->FilterTs + v->FilterTf);
v->Ky = v->FilterTf*1024/(v->FilterTs + v->FilterTf);
} int16_t low_filter_calc(low_filter *v){ int32_t tmp = 0; tmp = ((int32_t)v->Kr*v->Input + v->Ky*v->Output[1])/1024; if(tmp>32767){
tmp = 32767;
} if( tmp < -32768){
tmp = -32768;
} v->Output[0] = (int16_t)tmp;
v->Output[1] = v->Output[0];
return v->Output[0];
}

7 C语言运行结果

实际测试结果



一阶RC低通滤波器详解(仿真+matlab+C语言实现)的更多相关文章

  1. 一阶RC高通滤波器详解(仿真+matlab+C语言实现)

    文章目录 预备知识 关于电容 HPF的推导 simulink 仿真 simulink 运行结果 matlab 实现 matlab 运行结果 C语言实现 如果本文帮到了你,帮忙点个赞: 如果本文帮到了你 ...

  2. 《算法详解:C++11语言描述》已出版

    经过漫长的编写.修订和印刷过程,书籍<算法详解:C++11语言描述>终于出版了!目前本书已在各大电商平台上架,搜索书名即可找到对应商品.本书的特色在于: 介绍最新的C++11.C++14和 ...

  3. 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现

    前言:这几天一直都在研究模糊聚类.感觉网上的文档都没有一个详细而具体的讲解,正好今天有时间,就来聊一聊模糊聚类. 一:模糊数学 我们大家都知道计算机其实只认识两个数字0,1.我们平时写程序其实也是这样 ...

  4. 遗传学详解及Matlab算法实现

    遗传学算法概述 从之前转载的博客<非常好的理解遗传算法的例子>中可以知道,遗传学算法主要有6个步骤: 1. 个体编码 2. 初始群体 3. 适应度计算 4. 选择运算 5. 交叉运算 6. ...

  5. 详解keil采用C语言模块化编程时全局变量、结构体的定义、声明以及头文件包含的处理方法

    一.关于全局变量的定义.声明.引用: (只要是在.h文件中定义的变量,然后在main.c中包含该.h文件,那么定义的变量就可以在main函数中作为全局变量使用) 方法1: 在某个c文件里定义全局变量后 ...

  6. 1、WWDC2014 详解OSX/iOS8/Swift语言

    OS X 10新特性 1.系统图标扁平化. 2.系统菜单栏可定制. 3.新的通知中心. 4.新的Spotlight. 5.新的iCloud Drive,新增文档同步功能(学Windows). 6.新的 ...

  7. ESP8266使用详解--基于Lua脚本语言

    这些天,,,,今天终于看到了希望,,,天道酬勤 先说实现的功能...让ESP8266连接无线网,然后让它建立服务器,,我的客户端连接上以后,发给客户端发数据模块打印到串口,,往ESP8266串口里发数 ...

  8. 【实验课选题详解】用C语言实现万年历

    题目要求 编程实现万年历,要求: 可根据用户输入或系统日期进行初始化,如果用户无输入则显示系统日期所在月份的月历,并突出显示当前日期: 可根据用户输入的日期查询,并显示查询结果所在月份的月历,突出显示 ...

  9. 「实验课选题详解」用C语言实现万年历

    题目要求 编程实现万年历,要求: 可根据用户输入或系统日期进行初始化,如果用户无输入则显示系统日期所在月份的月历,并突出显示当前日期: 可根据用户输入的日期查询,并显示查询结果所在月份的月历,突出显示 ...

随机推荐

  1. python嵌套列表知多少

    今天在创建嵌套列表时遇到一个问题,决定看看到底是谁在背后捣鬼 >>> board1 = [[0]*3 for _ in range(3)] [[0, 0, 0], [0, 0, 0] ...

  2. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  3. 8. input限制手机输入

    1. 只能输入数字: <input id="num" type="number" value="0" onkeyup="va ...

  4. 负载均衡服务之HAProxy基础配置(二)

    前文我们聊了下haproxy的global配置段中的常用参数的说明以及使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12763245.html:今天我们来 ...

  5. wordpress 常用操作

    删除主题 在主题目录 wp-content/themes 中直接删除即可. 首页和文章页使用不同主题 首页使用sidebar,文章页不使用sidebar,这样文章的内容可以占更宽的页面 安装插件 Mu ...

  6. Spiking-YOLO : 前沿性研究,脉冲神经网络在目标检测的首次尝试 | AAAI 2020

    论文提出Spiking-YOLO,是脉冲神经网络在目标检测领域的首次成功尝试,实现了与卷积神经网络相当的性能,而能源消耗极低.论文内容新颖,比较前沿,推荐给大家阅读   来源:晓飞的算法工程笔记 公众 ...

  7. Netty 中的心跳检测机制

    心跳检测一般存在于建立长连接 或者 需要保活的场景. 心跳的使用场景 长连接的应用场景非常的广泛,比如监控系统,IM系统,即时报价系统,推送服务等等.像这些场景都是比较注重实时性,如果每次发送数据都要 ...

  8. 22.Java面试学习平台-整合OSS对象存储

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...

  9. wincache 与 zend guard 的冲突

    ZendLoader.dll 与wincache.dll  同时开启 问题分析:zend与wincache冲突 解决方法: 关掉wincache: 在php.ini中的 extension=php_w ...

  10. 2019-2020-1 20199310《Linux内核原理与分析》第九周作业

    1.问题描述 在前面的文章中,学习了译链接的过程和ELF可执行文件格式,对Linux内核装载和启动一个可执行程序,本次内容围绕对进程调度的时机和进程切换进行,分析进程的调度时机,调度策略和算法,并跟踪 ...