「 信号处理 」Mean均值滤波器C++两种实现方法

一、前言

        均值滤波器原理简单,小白最近完成了固定滤波序列长度和变长度的两种C++实现,对于数组变长度的技术实现,使用了<vector>方法。


二、滤波原理

        均值滤波的原理顾名思义,取一段长度的平均值作为当前值。

三、技术实现

        1. 定长数组

<filter.h>
class Filter{
    public:
            Filter(void);
            ~Filter(void);
            double Mean(double signal, int impact);
    private:
            int cycles, mean_num;
            double array[5];
            double Mean_o;
}

<filter.cpp>
double Filter::Mean(double signal, int impact){
    mean = impact; //注意:此处impact值与数组长度相等情况最佳,应等于5。
    if (cycles > mean_num){
        for(int i=2; i < mean_num; i++){
	    array2[mean_num+2-i] = array2[mean_num+1-i];
            }
        array[1] = signal;
        double temp = 0;
        for(int i=0; i < Mean_num; i++){
            temp = temp + array[i];
	    }
        Mean_o = temp / Mean_num;
    }
    else{
        for(int i=2; i < Mean_num2; i++){
            array[Mean_num2+2-i] = array2[Mean_num2+1-i];
            }
	    array[i] = signal;
    }
    cycles++;
    return mean_o;
}

        2. 变长数组

<filter.h>
class Filter{
    public:
            Filter(void);
            ~Filter(void);
            double Mean(double signal, int impact);
    private:
            int cycles, mean_num;
            vector<double>array;
            double Mean_o;
}

<filter.cpp>
double Filter::Mean(double signal, int impact){
    if (cycles > impact){
	array.push_back(signal);
	array.erase(array.begin());
	double temp = 0;
	for(int i=0; i < impact; i++){
	    temp = temp + array[i];
	}
	Mean_o = temp / impact;
    }
    else{
	array.push_back(signa);
	Mean_o = array[cycles-1];
	}
	cycles++;
    return mean_o;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值