递推均值滤波算法---链式队列实现

本文介绍了递推均值滤波算法的链式队列实现,探讨了为何选择队列实现的原因,并详细阐述了程序的实现过程,包括初始化队列、判断队列满、存取随机数以及计算平均值等步骤。文章还提供了程序代码供参考。
摘要由CSDN通过智能技术生成

目录

为什么要写这篇

为什么要用队列实现

程序是怎么实现的

程序实现结果

程序代码


为什么要写这篇

仍记得当初写了一篇去除极值的均值滤波算法相关的博客,该算法用在了ADC采样上面。当初偶然看见还有一种递推均值滤波算法,用在了实时波形输出上面。没有代码实现,本着早晚会用到以及要使用抽象数据类型队列的想法,开始了这篇博客的筹划。

递推均值滤波算法实现方式不见得只有一种方式。环形队列 或 链式队列,先实现自认为比较难一点儿的,之后再有时间则实现相对容易点的。

后期补充:今天我看到了最简单可行的递推均值滤波算法,简单到一目了然,比链式队列更常用。

为什么要用队列实现

主要因为递推这两个字吧,前面的要出去,后面的要进来,然后就自然而然想到了队列的出队和入队。

程序是怎么实现的

  • 假设已经有了队列的数据类型以及常用的操作,可以直接调用。
  • 先初始化队列,不知道队列初始化是为什么,总知道指针初始化是为什么吧,队列的实现需要指针。
  • 然后判断队列是否为满,队列有设置项数最大值,均值滤波的实现需要几个数做均值就设置项数最大值为多少,若没有最大值限制,既极大占用空间,也不适合队列遍历。
  • 产生随机数存放到队列中。
  • 如果队列为满了,这才是需要的,先从队列中删除一项,然后再将随机数存放到队列中。
  • 调试需要:查看产生的随机数。
  • 在一个合适的时间,遍历队列,获取平均值。
  • 调试需要:遍历队列,逐项输出。
  • 程序结束前清空队列。

程序实现结果

程序代码

test_q.c 文件

#include <stdio.h>      /* 调用printf 函数 */
#include <time.h>       /* 调用time 函数 */
#include <stdlib.h>     /* 调用srand rand 函数 */
#include "queue.h"      /* 调用队列的数据类型以及操作函数 */

#define DEBUG_OUTPUT    1


int main(void)
{
    Queue line;
    Item temp;

    srand((unsigned)time(NULL));
    InitializeQueue(&line);
    for(uint8_t i=0; i<15; i++)
    {
        if(!QueueIsFull(&line))
  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值