打印
[开发工具]

简易均值滤波器

[复制链接]
459|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gygp|  楼主 | 2023-3-31 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
均值滤波器就是取多个连续的数据,进行算术平均运算,得出输出数据;

为了简化运算,本文演示代码使用2的整数次幂进行算术平均运算,因为这种情况可以通过移位的方式来代替除法。

以下是滤波器定义的头文件:
#ifndef __FILTER_H
#define __FILTER_H

struct filter
{
    int buff[32]; //最大支持32级均值,可根据需要改为更大的值。
    int order;
    int shift;
    int sum;
    int index;
};

typedef struct filter filter_t;

//初始化滤波器,order指定滤波常数,必须是2的N次方(1,2,4,8,16...)
void filter_init(filter_t *flt, int order);

//滤波函数,value输入待滤波的数据,返回滤波后的数据
int  filter_input(filter_t *flt, int value);

//复位滤波器
void filter_reset(filter_t *flt);

#endif
/*
* 均值滤波器
* 蒋晓岗<kerndev@foxmail.com>
*/
#include <string.h>
#include "filter.h"

//均值滤波器
int filter_input(filter_t *flt, int value)
{
    flt->sum += value;
    flt->sum -= flt->buff[flt->index];
    flt->buff[flt->index] = value;
    flt->index = (flt->index + 1) & (flt->order - 1);
    return (flt->sum >> flt->shift);
}

//均值滤波器
void filter_init(filter_t *flt, int order)
{
    flt->index = 0;
    flt->sum   = 0;
    flt->order = order;
    flt->shift = 0;
    while(order > 1)
    {
        flt->shift++;
        order >>= 1;
    }
}

//复位
void filter_reset(filter_t *flt)
{
    flt->index = 0;
    flt->sum   = 0;
    memset(flt->buff, 0, sizeof(flt->buff));
}


使用特权

评论回复
沙发
Clyde011| | 2024-4-15 07:16 | 只看该作者

要把纹波电流平均分布

使用特权

评论回复
板凳
公羊子丹| | 2024-4-15 08:09 | 只看该作者

发射出过量的电磁干扰(EMI)

使用特权

评论回复
地板
万图| | 2024-4-15 09:12 | 只看该作者

典型的转换时间大约是50ns

使用特权

评论回复
5
Uriah| | 2024-4-15 10:15 | 只看该作者

这种方法可以使散热体积和表面面积增大两倍多

使用特权

评论回复
6
帛灿灿| | 2024-4-15 12:11 | 只看该作者

负载环能以直流方式汲取能量

使用特权

评论回复
7
Bblythe| | 2024-4-15 13:14 | 只看该作者

功率开关漏极(或集电极)

使用特权

评论回复
8
周半梅| | 2024-4-15 15:10 | 只看该作者

输出整流器交流电流环路

使用特权

评论回复
9
Pulitzer| | 2024-4-15 16:13 | 只看该作者

在其他的交流电流环路都布置好后再放置

使用特权

评论回复
10
童雨竹| | 2024-4-15 18:09 | 只看该作者

任何与多条功率线相连的功率器件要尽可能紧挨在一起,以减短连线长度

使用特权

评论回复
11
Wordsworth| | 2024-4-15 19:12 | 只看该作者

工作时的电压降低了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

184

主题

8184

帖子

15

粉丝