加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS河北省邯郸市 西门子代理商——西门子华北一级总代理

更新时间
2024-11-26 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍

获取滤波结果

参考FreeRTOS的设计方式,在获取滤波结果时,将之前创建的滤波器句柄作为参数传进来,实现对特定滤波数据的获取。
































  • /*滑动平均滤波器——获取结果SAFiter:滤波器句柄input:未滤波的原始数据返回滤波结果*/float GetSAFiterRes(SAFilterHandle_t SAFiter, float input){    SAFiter_t *pFilter = (SAFiter_t *)SAFiter;    if(!pFilter->isfull) /*还没有存满*/    {        pFilter->has++; /*求当前数组中已有数据数量*/        if(pFilter->has == pFilter->len)        {            pFilter->isfull = 1; /*标记数组已满*/        }    }    else /*已存满,覆盖写入*/    {        pFilter->sum -= pFilter->data[pFilter->index]; /*先移除Zui早的数据*/     }    /*写入新的数据*/    pFilter->data[pFilter->index] = input;     /*求当前数组中已有数据的总和*/    pFilter->sum += input;     /*更新下次数据的索引号*/    pFilter->index = (pFilter->index == pFilter->len - 1) ? 0 : pFilter->index + 1;    /*求当前数组中已有数据的平均值*/    pFilter->res = pFilter->sum / pFilter->has;    return pFilter->res;}3使用示例

    以MPU6050陀螺仪的数据滤波为例(相关介绍参考MPU6050姿态解算方式1-DMP),假设需要对pitch数据和roll数据进行滤波,使用方式为:

  • 定义2滤波器句柄

  • 创建2滤波器

  • 循环获取数据并滤波




















  • //滤波器句柄SAFilterHandle_t SAFilter_pitch;SAFilterHandle_t SAFilter_roll;
    //创建2个滤波器SAFilter_pitch = SlipAveFilterCreate(10);SAFilter_roll = SlipAveFilterCreate(10);
    //循环获取数据并滤波while(1){    if(mpu_dmp_get_data(&pitch,&roll,&yaw,&accx,&accy,&accz,&gyrox,&gyroy,&gyroz)==0)    {        pitch_res = GetSAFiterRes(SAFilter_pitch,pitch);//pitch数据滤波结果        roll_res = GetSAFiterRes(SAFilter_roll,roll);//roll数据滤波结果        printf("pitch:%f,%f,roll:%f,%f\r\n",pitch,pitch_res,roll,roll_res);//打印原始数据与滤波后的数据    }    vTaskDelay(1);}

    滤波后的结果如下,蓝色为原始数据,橙色为滤波后的结果:



    相关产品

    联系方式

    • 电  话:15903418770
    • 联系人:张经理
    • 手  机:15915421161
    • 微  信:15915421161