数字低通滤波算法及截止频率计算,pt1Filter,lpf

该博客介绍了如何使用RC滤波器计算截止频率,并在C语言中实现了一个低通滤波器。`filterInit`函数用于设置滤波器的截止频率和数据更新间隔,`LpfFilterApply`函数则应用于滤波新输入数据。博客内容涉及到信号处理和嵌入式系统中的滤波技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考模电RC滤波计算公式来计算截止频率

#define M_PI_FLOAT  3.14159265358979323846f

typedef struct LpfFilter
{
    float RC;//模电RC滤波的电阻和电容值的积
    float dT;//数据更新时间隔(秒)
    float k;//滤波系数
    float state;//滤波结果
}LpfFilter_t;

/**设置滤波的截止频率
* *filter:
* f_cut:截止频率
* dt: 数据更新时间隔(秒)
*/
void filterInit(LpfFilter_t *filter, float f_cut, float dt)
{
    filter->RC = 1.0f / ( 2.0f * M_PI_FLOAT * f_cut);//参考模电RC截止频率公式
    filter->dT = dT;//数据更新时间隔(秒)
    filter->k = filter->dT / (filter->RC + filter->dT);//滤波系数
}

/**应用低通滤波
* *filter:
* input:新输入数据
*/
float LpfFilterApply(pt1Filter_t *filter, float input)
{
    //dt固定时,截止频率越低,k越小,数据最终输出的变化越慢(高频去掉了)
    //截止频率固定时,dT越大,k越小,数据最终输出的变化越慢(高频去掉了)
    filter->state = filter->state + filter->k * (input - filter->state);
    return filter->state;
}

参考:

https://github.com/betaflight/betaflight/blob/master/src/main/common/filter.c

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值