我是靠谱客的博主 搞怪御姐,最近开发中收集的这篇文章主要介绍低通滤波低通滤波,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

低通滤波

1.硬件低通滤波

公式推导
一阶RC滤波器的硬件电路如图:
在这里插入图片描述

图中输入电压是Vi,电阻R,电容C,输出电压为Vo。

假设电路的输出阻抗很大(即不带任何负载),输入阻抗很小(理想情况)。可以得到以下公式:

在这里插入图片描述

电容的阻抗是:
在这里插入图片描述

在这里插入图片描述

那么截止频率为:
在这里插入图片描述

此频率下的信号,通过这个电路,输出电压和输入电压的关系式是
在这里插入图片描述

或者时域上的表达式:

在这里插入图片描述

上式离散后,可以得到:

在这里插入图片描述

假如要过滤掉10KHz以上的频率,可以选择fcut = 1K,并计算RC的值,代入上式。

2.软件低通滤波

  • 软件实现1
/**
  * @brief  implement 1 order RC low pass filter
  *         raw data filtered by a simple RC low pass filter@cufoff=5Hz
  * @param  Vi 		: 	Vi(k)
  * @param  Vi_p 	: 	Vi(k-1)
  * @param  Vo 		: 	Vo(k)
  * @param  Vo_p 	: 	Vo(k-1)
  * @note   This example shows a simple way to report end of conversion
  *         and get conversion result. You can add your own implementation.
  * @retval None
  */
void Filter_RC_LPF(float *Vi, float *Vo, float *Vo_p, float sampleFrq )
{
	float CutFrq, RC, Cof1, Cof2;
		
	//low pass filter @cutoff frequency = 5 Hz		
	CutFrq = 5;
	RC = (float)1.0/2.0/PI/CutFrq;
	Cof1 = 1/(1+RC*sampleFrq);
	Cof2 = RC*sampleFrq/(1+RC*sampleFrq);
	*Vo = Cof1 * (*Vi) + Cof2 * (*Vo_p);		
	
	//update 	
	*Vo_p = *Vo;		
}
  • 软件实现2
//*********** Structure Definition ********//
typedef struct {
	float  Vi;
	float  Vo_prev;
	float  Vo;
	float  Fcutoff;
	float  Fs;
} LPF_RC_T;
//*********** Structure Init Function ****//
void filter_RC_LPF_init(LPF_RC_T*v)
{
	v->Vi=0;
	v->Vo_prev=0;
	v->Vo=0;
 
	//low pass filter @cutoff frequency = 5 Hz		
	v->Fcutoff=5;
 
	// execute 1000 every second
	v->Fs=1000;
}
 
//*********** Function Definition ********//
float filter_RC_LPF(LPF_RC_T*v)
{
	float RC, Cof1, Cof2;
		
	RC = (float)1.0/2.0/PI/v->Fcutoff;
	Cof1 = 1/(1+RC*v->Fs);
	Cof2 = RC*v->Fs/(1+RC*v->Fs);
 
	v->Vo = Cof1 * v->Vi + Cof2 * v->Vo_prev;
 
	v->Vo_prev = v->Vo;
	
	return v->Vo;
}
 

最后

以上就是搞怪御姐为你收集整理的低通滤波低通滤波的全部内容,希望文章能够帮你解决低通滤波低通滤波所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部