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

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

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

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. 掷骰子 dp

    B. 掷骰子 单点时限: 2.0 sec 内存限制: 512 MB 骰子,中国传统民间娱乐用来投掷的博具,早在战国时期就已经被发明. 现在给你 n 个骰子,求 n 个骰子掷出点数之和为 a 的概率是多 ...

  2. 4. Object

    1. Object.is( );  //用来判断,不同等 == 与===接近.NaN作出的调整 let obj={a:1,b:2}; Object.is(obj,obj);//true Object. ...

  3. Laravel 5.8 RCE 分析

    原帖地址 : https://xz.aliyun.com/t/6059 Laravel 代码审计 环境搭建 composer create-project --prefer-dist laravel/ ...

  4. 散列表和JAVA中的hash

    引文 hello,今天写的数据结构是散列表(hash表),也算是一种基础数据结构了吧.学过计算机的人大概都能说出来这是个以空间换时间的东西,那么具体怎么实现的是今天要讨论的问题. 为什么需要它?主要还 ...

  5. JSP中引用CSS样式文件却无法显示的问题解决方案

    你也遇到过这种问题吗,CSS写好了,JSP写好了,在JSP中调用CSS文件,路径检查后也正确,但是无法显示渲染后的页面 原因:罪魁祸首就是过滤器响应数据的时候,响应头设置为了“text/html”,但 ...

  6. .NET Core 3 WPF MVVM框架 Prism系列之对话框服务

     本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的对话框服务,这也是prism系列的最后一篇完结文章,下面是Prism系列文章的索引: .NET Core 3 WPF MVVM框 ...

  7. 如何使用IE9浏览器自带开发人员工具捕获网页请求

    我们在通过浏览器访问一个网页的时候,有时候会遇到页面不能正常显示,图片不能正常加载的问题. 如果我们需要知道浏览器打开该网页时,网页中每个元素的加载情况.这时,我们便可以借助浏览器自带开发人员工具,来 ...

  8. Centos8安装docker-compose

    一.首先检查是否有pip 执行命令:piv -V 二.更新pip 执行命令:pip install --upgrade pip 三.下载  setuptools 执行命令 :pip install - ...

  9. synchronized 作为悲观锁,锁住了什么?

    继续来认识 synchronized,上篇文章加不加 synchronized 有什么区别?我们了解了 synchronized 是在多线程并发竞争同一资源的时候使用,这一篇我们来了解,synchro ...

  10. Django项目打包

    Django项目打包 这是目前开发完成的project目录树.我们要打包其中的polls app. (v_python3.6) thinkt@linux-pw37:~/PycharmProjects/ ...