一、前言
均值滤波器原理简单,小白最近完成了固定滤波序列长度和变长度的两种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;
}