概述
低通滤波
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;
}
最后
以上就是搞怪御姐为你收集整理的低通滤波低通滤波的全部内容,希望文章能够帮你解决低通滤波低通滤波所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复