首页 > 其他分享 >滑动平均滤波参考代码

滑动平均滤波参考代码

时间:2023-09-27 20:22:46浏览次数:36  
标签:temp 代码 滤波 uint8 len 数组 滑动 data int8

目录

在CH592上可以运行,用来给RSSI滤波。由于RSSI一般是-100~-20之间的数值,故数组类型是有符号数。

/*******************
 * 缓存迭代
 *
 * 参数:uint8_t num       待加入的数值
 *      uint8_t *data     待处理的数组
 *      uint8_t len        数组长度
 */
__HIGH_CODE
void buff_iteration(int8_t num, int8_t *data, uint8_t len)    //XXX
{
    static uint8_t iteration_offset = 0;    //存放缓存的偏移量
    if(iteration_offset >= len)
        iteration_offset = 0;
    data[iteration_offset] = num;
    iteration_offset++;
}


/****************************
 * 冒泡排序
 *
 * 参数:uint8_t *data     待处理的数组
 *      uint8_t len        数组长度
*/
__HIGH_CODE
void bubble_sort(int8_t *data, uint8_t len)                //XXX
{
    int8_t i, j, temp;
    for(i=0; i<len-1; i++)
        for(j=0; j<len-1-i; j++)
        {
            if(data[j] > data[j+1])
            {
                temp = data[j];
                data[j] = data[j+1];
                data[j+1] = temp;
            }
        }
}


/*************************************
 * 平均滤波
 *
 * 参数:uint8_t *data      待处理的数组
 *      uint8_t *filt_buf   冒泡排序后的数组
 *      uint8_t len         数组长度
 *      uint8_t opti        如果数据长度>=10,该变量用于选择是否需要去掉约10%的最高和约10%的最低数据,只计算中间约80%数据的平均值
*/
__HIGH_CODE
int8_t moving_avr_filt(int8_t *data, int8_t *filt_buf, uint8_t len, uint8_t opti)       //XXX
{
    uint8_t temp_cut = 0;   //存放首尾各省略多少个数据
    uint8_t num_count;      //实际计算多少个数据的平均值
    int16_t temp_sam = 0;

    if(opti && (len >= 10))
    {
        if(len >= 250){
            temp_cut = 25;      //最多首尾各略去25个数
        }
        else{
            temp_cut = (len+5)/10;      //判断需要收尾各略去多少个数据,四舍五入
        }
        memcpy(filt_buf, data, len);
        bubble_sort(filt_buf, len);     //冒泡排序
        //如果仅仅是要排除掉n个最大和n个最小值,可以直接用2个长度为n的数组,依次比较并存放需要略去的数值,总和加好后再减去这两个数组中的数值求平均值
        //冒泡排序有个好处是可以返回中位数,坏处是计算时间较长
    }

    num_count = len-2*temp_cut;     //多少个数据取平均值
    for(uint8_t i=temp_cut; i<len-temp_cut; i++)
    {
        temp_sam += filt_buf[i];
    }

    return (temp_sam + (num_count+1)/2) /num_count;     //四舍五入
}

/*****************下方为测试代码***************/
        buff_iteration((int8_t)rxBuf[0], rssi_buf, sizeof(rssi_buf));       //XXX    将rxBuf[0]迭代缓存到rssi_buf数组中
        PRINT("moving_avr_filt0 = %d\n", moving_avr_filt(rssi_buf, rssi_filt_buf, sizeof(rssi_filt_buf), 0));
        PRINT("moving_avr_filt1 = %d\n", moving_avr_filt(rssi_buf, rssi_filt_buf, sizeof(rssi_filt_buf), 1));

        PRINT("rssi_buf = ");
        for(uint8_t i=0; i<sizeof(rssi_buf); i++){
            PRINT(" %d", rssi_buf[i]);
        }
        PRINT("\n");

        PRINT("rssi_filt_buf =");
        for(uint8_t i=0; i<sizeof(rssi_filt_buf); i++)
            PRINT( " %d", rssi_filt_buf[i]);
        PRINT("\n");        

 

标签:temp,代码,滤波,uint8,len,数组,滑动,data,int8
From: https://www.cnblogs.com/JayWellsBlog/p/17734243.html

相关文章

  • 代码大全2读后感
    《代码大全2》是一本关于软件开发的经典之作,它提供了深刻的见解和实用的建议,帮助开发者编写高质量的代码。阅读这本书后,我对编程有了更深刻的理解,以下是我的800字读后感。在当今数字化时代,编程已经成为了无处不在的技能和工具。无论是开发应用程序、网站,还是处理数据分析和机器学......
  • 154. 滑动窗口
    154.滑动窗口题目链接:154.滑动窗口-AcWing题库1、暴力枚举窗口大小为k序列长为n以求最小值为例f[i]表示以i结尾的窗口中的最小值f[i]=min(a[j]),i-k+1<=j<=ifor:i=1~nfor:j=i-k+1~if[i]=min(a[j])2、单调队列......
  • Matlab 设计仿真CIC滤波器
    2023.09.26使用CIC滤波器用于降采样。同样的,CIC滤波器也适用于升采样。参考连接:[1]Matlab中CIC滤波器的应用_dsp.cicdecimator_张海军2013的博客-CSDN博客[2]Matlab中CIC滤波器的应用-知乎(zhihu.com)[3]CICfilter及其matlab实现-CSDN博客[4]【ljelly原创】Matla......
  • 梦段代码阅读笔记02
    1、对该项目的人的认识不得不承认的一点是,这个项目的基础特别棒,在万众瞩目下开启开发的旅程,历时七年,在完工之际,已经没有人为之喝彩;项目团队人人都很优秀,在我眼里,他们不仅仅是久远时光里的一个出名的项目团队,他们还是独一无二的编程“疯子”,他们热爱编程、享受编程,不屑于将自己......
  • 《代码大全2》读后感
     阅读了《代码大全2》第七章高质量的子程序。首先:第七章第一部分:创建子程序的正当理由。讲述创建子程序的理由。总结所有理由:降低复杂度,引入中间的、易懂的抽象、避免代码重复、支持子类化,隐藏顺序、隐藏指针操作、提高可移植性、简化复杂的逻辑判断、改善性能,除此之外,创建类的......
  • 九月《代码大全》读后感Ⅱ
    第七章高质量的子程序首先创建子程序的好处有:降低复杂度:通过将复杂的程序逻辑分解为更小的子程序,可以使程序更易于理解和维护。引入中间、易懂的抽象:通过创建子程序,可以将复杂的逻辑或操作封装在易于理解的模块中,提高代码的可读性和可维护性。避免代码重复:通过创建子程......
  • uniapp代码 上传发布钉钉小程序 流程
    uniapp代码发行到钉钉平台流程:1.下载hbuilder,打开项目,在setting.json里面运行配置里面配置支付宝小程序开发路径:类似D:/ProgramFiles/小程序开发者工具/小程序开发者工具.exe,然后发行-自定义发行-钉钉小程序,然后  2.会自动打开小程序开发工具,工具下载地址:https://open.di......
  • 优维低代码实践:应用级配置
    优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。优维低代码实践连载第19期《应用级配置》▽除了全局特性开关,有时我们希望......
  • Biwen.QuickApi代码生成器功能上线
    [QuickApi("hello/world")]publicclassMyApi:BaseQuickApi<Req,Rsp>{}使用方式:dotnetaddpackageBiwen.QuickApidotnetaddpackageBiwen.QuickApi.SourceGenerator最后简简单单注册路由:app.MapGenQuickApis("api");Biwen.QuickApi使用REPR......
  • 低代码开发框架 助力企业打造新时代技术底座
    伴随着信息技术、互联网的日益发展,数字化转型已成为企业发展的新方向。软件作为企业数字化转型的重要工具、连接日常生活与经济的命脉,如今显得尤为重要。近年来,在政府、市场和企业的共同努力下,我国中小企业数字化发展的道路愈发平坦。但从实践上看,中小企业依然遇到诸多困难。对于......