psbhero 发表于 2014-9-19 13:43:52

急!!!请网友帮忙看看如何进行软件滤波?

请网友帮忙看看如何软件滤波?
信号波形如下:



上图的两个波形是两种分别工作时的波形;
估计硬件滤波器是可以有很大的效果的;不过碍于成本和空间,想在软件上试试,
不知道可否达到比较理想的滤波效果?暂时还没有响应时间的具体要求:暂定大一点1秒吧。

先谢谢了。

河河河 发表于 2014-9-19 13:46:32

平均值滤波。

psbhero 发表于 2014-9-19 13:50:10

目前就是16点平均效果不理想啊

kalo425 发表于 2014-9-19 14:04:03

楼主尝试下“EMD去噪”,

Robin_King 发表于 2014-9-19 14:09:00

个人觉得这样做:根据收到的前几个值的,还看新收到的值是不是突然变化很大,那就可能是噪声,应该滤去。

psbhero 发表于 2014-9-19 14:17:08

kalo425 发表于 2014-9-19 14:04
楼主尝试下“EMD去噪”,

惭愧,不知道还有这个方法,看看去!

asma 发表于 2014-9-19 14:18:32

你有用信号时直流还是什么?关键是如何提取有用信号

psbhero 发表于 2014-9-19 14:18:46

Robin_King 发表于 2014-9-19 14:09
个人觉得这样做:根据收到的前几个值的,还看新收到的值是不是突然变化很大,那就可能是噪声,应该滤去。 ...

希望网友们可以说明这样做的理由,便于理解和运用
谢谢了 呵呵

psbhero 发表于 2014-9-19 14:19:48

asma 发表于 2014-9-19 14:18
你有用信号时直流还是什么?关键是如何提取有用信号

是直流信号,上面的波形是交流的噪声图

jacky_yhy 发表于 2014-9-19 14:24:35

我表示连它的正常波形理应的趋势都看不出来

asma 发表于 2014-9-19 14:26:08

要是软件滤波,咋的也得加个fs/2 低通滤波器把。所以还不如做个好点的有源滤波器省事

psbhero 发表于 2014-9-19 14:36:48

干扰感觉还是很大的,用的单片机内部的10位AD和内部的基准2.048,内部的OPA
成本和空间,最重要的是成本啊,所以目前还是想软件解决一下的。

nhw1234 发表于 2014-9-19 14:52:08

不知道,帮顶了{:lol:}

psbhero 发表于 2014-9-19 14:58:34

谢谢帮顶啊

psbhero 发表于 2014-9-19 14:59:14

asma 发表于 2014-9-19 14:26
要是软件滤波,咋的也得加个fs/2 低通滤波器把。所以还不如做个好点的有源滤波器省事 ...

你说的有道理,可惜原理不是俺设计的。

psbhero 发表于 2014-9-19 15:52:39

自己顶一下

落叶知秋 发表于 2014-9-19 16:08:39

帮顶一下,不过没看出趋势,要怎么滤?

yigang 发表于 2014-9-19 17:12:36

这是一个 中值滤波 程序,他不改变原始值,只是剔掉异常值

本帖最后由 yigang 于 2014-9-19 17:13 编辑

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER(uChar LEV_OR_SURF)
{ //                        ,
// 5 POINT MEAN FILTER:          ^
//                               |--------------> OUTPUT.
static uInt4    LEV_CAL_BUFF = { // Buffer of level value calculate.
                                     0,0,0,0,0 };
static uInt4    SUR_CAL_BUFF = { // Buffer of INTERFACE value calculate.
                                     0,0,0,0,0 };
uInt4NEW_VALUE, *pt, v_temp;
uInt2i, j;

if (LEV_OR_SURF == LEVEL) {
    pt = (uInt4 *) &LEV_CAL_BUFF;
    *(pt+4) = NEW_VALUE = lev_value_pulse; // Append data to buffer.
}
else{
    pt = (uInt4 *) &SUR_CAL_BUFF;
    *(pt+4) = NEW_VALUE = sur_value_pulse; // Append data to buffer.
}

for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++) {
      if (*(pt+j) > *(pt+j+1)) {
      v_temp = *(pt+j);
      *(pt+j) = *(pt+j+1);       
      *(pt+j+1) = v_temp;
      }
    }
}

v_temp = *(pt+2);                   // New mean value.

for (i = 0; i < 3; i++)
    *(pt+i) = *(pt+i+1);            //shift data to new order

*(pt+3) = NEW_VALUE;

return v_temp;
}

psbhero 发表于 2014-9-19 17:22:23

yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER( ...

多谢楼上网友!
俺上午也看了中值的原理感觉还不错。
中值滤波会有改善 不知道 是否可以完美解决,楼上网友应用过类似的波形 滤波吗?

yigang 发表于 2014-9-19 17:25:05

psbhero 发表于 2014-9-19 17:22
多谢楼上网友!
俺上午也看了中值的原理感觉还不错。
中值滤波会有改善 不知道 是否可以完美解决,楼上网 ...

我主要用在 防止偶然的 突发的 强干扰,这个程序是我自己编的,做过软件模拟,能处理连续3个异常值。。。

psbhero 发表于 2014-9-19 21:10:54

yigang 发表于 2014-9-19 17:25
我主要用在 防止偶然的 突发的 强干扰,这个程序是我自己编的,做过软件模拟,能处理连续3个异常值。。。 ...

是这样啊,我的波形干扰很频繁的,估计会有效果 呵呵

wb503059722 发表于 2014-9-19 22:42:01

你这是什么信号

psbhero 发表于 2014-9-20 10:06:55

wb503059722 发表于 2014-9-19 22:42
你这是什么信号

请见9楼

zhq0571 发表于 2014-9-20 10:26:34

学习   

psbhero 发表于 2014-9-20 20:06:28

顶一下
呵呵
期待高手指点 呵呵

mofire 发表于 2014-9-20 21:25:43

中值滤波!

psbhero 发表于 2014-9-22 09:27:51

自己接着
顶一下

期待高手指点 呵呵

powerplj 发表于 2014-9-22 10:10:02

yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER( ...

程序不错

不过楼主的头像更有 魅力
有韵味的老男人啊

Excellence 发表于 2014-9-22 10:13:48

取40个数,排序,去掉前后各4个,求和,右移5位。

yigang 发表于 2014-9-22 10:19:59

powerplj 发表于 2014-9-22 10:10
程序不错

不过楼主的头像更有 魅力


共勉!!!

fengdingkusong 发表于 2014-9-22 10:22:05

yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER( ...

mark{:lol:}

fengdingkusong 发表于 2014-9-22 10:23:03

有时间发一下滤波的效果图呗

WinExt 发表于 2014-9-22 10:25:38

楼主,我们的设备干扰比你的严重多了,用滑动平均+中值滤波 效果很不错,也不会损失有用的点。

另外,可以把数据发给我,我看看能不能帮你实现效果。

fugeone_copy 发表于 2014-9-22 10:30:00

表示看不出来波形有什么问题,惭愧

psbhero 发表于 2014-9-22 10:48:37

WinExt 发表于 2014-9-22 10:25
楼主,我们的设备干扰比你的严重多了,用滑动平均+中值滤波 效果很不错,也不会损失有用的点。

另外,可以 ...

有QQ吗?
谢谢你和大家了

psbhero 发表于 2014-9-22 10:50:13

WinExt 发表于 2014-9-22 10:25
楼主,我们的设备干扰比你的严重多了,用滑动平均+中值滤波 效果很不错,也不会损失有用的点。

另外,可以 ...

你的干扰波形有吗?

gws0 发表于 2014-9-22 10:57:15

有什么问题

limuzi2012 发表于 2014-9-22 10:58:03

采样出来的数据需要很精确吗?把芯片ADC采样频率选最低,然后10MS采样一次,8次取平均值。上面的两个可以根据你要求的数据实时性选择,看看实际效果。

psbhero 发表于 2014-9-22 11:03:54

limuzi2012 发表于 2014-9-22 10:58
采样出来的数据需要很精确吗?把芯片ADC采样频率选最低,然后10MS采样一次,8次取平均值。上面的两个可以根 ...

目前是16点平均 效果不行的
adc的采样分散性很大

WinExt 发表于 2014-9-22 11:07:51

D:\temp\Filter.jpg


psbhero 发表于 2014-9-22 11:13:58

WinExt 发表于 2014-9-22 11:07


看不到图片啊?

WinExt 发表于 2014-9-22 11:41:09

不好意思,总是上传不了图片,柒伍肆贰玖肆柒肆柒

psbhero 发表于 2014-9-22 12:35:28

WinExt 发表于 2014-9-22 11:41
不好意思,总是上传不了图片,柒伍肆贰玖肆柒肆柒

好的 我加一下

gvgvfghv 发表于 2014-9-22 14:04:19

fir或者iir吧,想只滤成直流太容易了

psbhero 发表于 2014-9-22 14:10:35

gvgvfghv 发表于 2014-9-22 14:04
fir或者iir吧,想只滤成直流太容易了

听说过,不懂啊。
能说说这两个原理吗,为什么很容易啊,是专门干这个的吗(滤为直流,我的项目最好就是直流,稳稳的最好控制在1LSB内 呵呵)?
我是很便宜的单片机的 内存512字节,可否运行?

gvgvfghv 发表于 2014-9-22 14:45:28

本帖最后由 gvgvfghv 于 2014-9-22 14:49 编辑

psbhero 发表于 2014-9-22 14:10
听说过,不懂啊。
能说说这两个原理吗,为什么很容易啊,是专门干这个的吗(滤为直流,我的项目最好就是 ...

你需要确定一个能忍受的响应时间,低通做得越低,信号越滞后,也就是说,如果输入信号变化,输出滞后多长时间你是能忍受的。fir和iir是两种最常用的数字滤波器。
看样子你的要求不是很高,用output=output*0.9+input*0.1就能做到。自己实际调整一下0.9和0.1的值,两个系数之和为1,output系数越大低通越低。

psbhero 发表于 2014-9-22 16:24:15

gvgvfghv 发表于 2014-9-22 14:45
你需要确定一个能忍受的响应时间,低通做得越低,信号越滞后,也就是说,如果输入信号变化,输出滞后多长 ...

1秒应该可以的,试试你的方法 谢谢啊

psbhero 发表于 2014-9-24 22:35:52

此帖可否继续讨论,高手继续 呵呵

oner 发表于 2014-9-24 23:54:14

46楼正解。上一阶滞后滤波。

xuyaqi 发表于 2014-9-25 07:04:36

如果低频应用多点平均滤波是很好的办法,几百点平均都可以试一下绝对平滑。

spcm 发表于 2014-9-25 07:46:41

ad采样要根据采样速率前面电路上面加fs/2的低通滤波器,程序上面我一般就是去除最大最小几个值然后剩下的取平均值,每采一个点就这么做一次。效果还可以。

yzpanhui 发表于 2014-9-25 07:51:08

感觉硬件滤波会比较靠谱

lrzxc 发表于 2014-9-25 08:04:25

yzpanhui 发表于 2014-9-25 07:51
感觉硬件滤波会比较靠谱

也同意硬件滤波,但楼主说不想改硬件了。

chengz 发表于 2014-9-25 08:08:39

加权的移动平均平滑法,最新值取较小的加权

hutomy 发表于 2014-9-25 08:12:11

可以滑动滤波, 可以设置滤波深度, 即每次只取当次采样的 1/n

greenflyqqq 发表于 2014-9-25 08:12:12

MARK      

tangxh 发表于 2014-9-25 08:44:02

记得论坛里面有人发过10种软件滤波算法及其实现。楼主搜索一下,总有一款适合你。

psbhero 发表于 2014-9-25 09:28:14

谢谢各位,感觉还是有必要加硬件滤波措施,不过我还想接着试试软件的效果

fangjikun 发表于 2016-4-28 23:50:45

Excellence 发表于 2014-9-22 10:13
取40个数,排序,去掉前后各4个,求和,右移5位。

有效{:smile:}

fenjinzhe 发表于 2016-5-9 14:51:56

不错,学习了

yuanbo19870216 发表于 2016-5-16 10:47:15

排序,抛头去尾,然后再平均
页: [1]
查看完整版本: 急!!!请网友帮忙看看如何进行软件滤波?