低通滤波

低通滤波

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;
}
 
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值