标题:
加权递推平均滤波程序 请问一下各位大佬,这个加权滤波为什么要加权啊?
[打印本页]
作者:
hzw854025403
时间:
2020-5-29 19:56
标题:
加权递推平均滤波程序 请问一下各位大佬,这个加权滤波为什么要加权啊?
/*
A、名称:加权递推平均滤波法
B、方法:
是对递推平均滤波法的改进,即不同时刻的数据加以不同的权;
通常是,越接近现时刻的数据,权取得越大。
给予新采样值的权系数越大,则灵敏度越高,但信号平滑度越低。
C、优点:
适用于有较大纯滞后时间常数的对象,和采样周期较短的系统。
D、缺点:
对于纯滞后时间常数较小、采样周期较长、变化缓慢的信号;
不能迅速反应系统当前所受干扰的严重程度,滤波效果差。
E、整理:shenhaiyu 2013-11-01
*/
int Filter_Value;
void setup() {
Serial.begin(9600); // 初始化串口通信
randomSeed(analogRead(0)); // 产生随机种子
}
void loop() {
Filter_Value = Filter(); // 获得滤波器输出值
Serial.println(Filter_Value); // 串口输出
delay(50);
}
// 用于随机产生一个300左右的当前值
int Get_AD() {
return random(295, 305);
}
// 加权递推平均滤波法
#define FILTER_N 12
int coe[FILTER_N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // 加权系数表
int sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12; // 加权系数和
int filter_buf[FILTER_N + 1];
int Filter() {
int i;
int filter_sum = 0;
filter_buf[FILTER_N] = Get_AD();
for(i = 0; i < FILTER_N; i++) {
filter_buf[i] = filter_buf[i + 1]; // 所有数据左移,低位仍掉
filter_sum += filter_buf[i] * coe[i];
}
filter_sum /= sum_coe;
return filter_sum;
}
复制代码
对比滑动平均滤波(递推平均滤波)它的优势是什么,看上去好像就灵敏度高了一些
作者:
hzw854025403
时间:
2020-5-29 20:07
本帖最后由 hzw854025403 于 2020-5-29 20:08 编辑
下面是我对灵敏度和滞后时间的理解,对不对
2.灵敏度高是什么意思:
灵敏度是指 ADC采集到的值实际反映到输出结果的时间,不会被之前的数据所拖累,
说白了就是采集数据实时反映的速度,灵敏度越高,对ADC采集的值反映更快
3.滞后时间:
被控对象的被控变量的变化落后于干扰的现象叫滞后
滞后时间与灵敏度成反比,灵敏度越高,滞后时间就越短,
但是,在10个滤波算法中,灵敏度越低的滤波效果就越平滑,对于偶然的脉冲干扰越差
作者:
hzw854025403
时间:
2020-5-29 20:12
加权的实际意义在于那?如果我不加权,就单单递推平均滤波好像也差不多。
作者:
gxslxxm
时间:
2020-5-30 22:29
建议看看《匠人手记》。毕竟你发的这段程序是出自该书作者n多年前的帖子。书中有详细注明。
怎么理解我觉得用过的人或者有足够深刻理解的人讲的相对好些,我没用过这种方式不好评论。
作者:
hzw854025403
时间:
2020-6-1 09:54
gxslxxm 发表于 2020-5-30 22:29
建议看看《匠人手记》。毕竟你发的这段程序是出自该书作者n多年前的帖子。书中有详细注明。
怎么理解我觉 ...
谢谢!我已经知道为什么了
作者:
hzw854025403
时间:
2020-6-1 10:02
链接:
https://pan.baidu.com/s/1WZqy6oCJsQ9ph_OtyXV5YA
提取码: 3dy1
这个是楼上说的匠人笔记以及我对加权递推平均滤波的一些看法,有兴趣的可以看一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1