搜索
bottom↓
回复: 60

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

[复制链接]

出0入0汤圆

发表于 2014-9-19 13:43:52 | 显示全部楼层 |阅读模式
请网友帮忙看看如何软件滤波?
信号波形如下:



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

先谢谢了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入16汤圆

发表于 2014-9-19 13:46:32 | 显示全部楼层
平均值滤波。

出0入0汤圆

 楼主| 发表于 2014-9-19 13:50:10 | 显示全部楼层
目前就是16点平均效果不理想啊

出0入0汤圆

发表于 2014-9-19 14:04:03 | 显示全部楼层
楼主尝试下“EMD去噪”,

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2014-9-19 14:17:08 | 显示全部楼层
kalo425 发表于 2014-9-19 14:04
楼主尝试下“EMD去噪”,

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

出420入0汤圆

发表于 2014-9-19 14:18:32 | 显示全部楼层
你有用信号时直流还是什么?关键是如何提取有用信号

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2014-9-19 14:19:48 | 显示全部楼层
asma 发表于 2014-9-19 14:18
你有用信号时直流还是什么?关键是如何提取有用信号

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

出0入0汤圆

发表于 2014-9-19 14:24:35 | 显示全部楼层
我表示连它的正常波形理应的趋势都看不出来

出420入0汤圆

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

出0入0汤圆

 楼主| 发表于 2014-9-19 14:36:48 | 显示全部楼层
干扰感觉还是很大的,用的单片机内部的10位AD和内部的基准2.048,内部的OPA
成本和空间,最重要的是成本啊,所以目前还是想软件解决一下的。

出0入0汤圆

发表于 2014-9-19 14:52:08 | 显示全部楼层
不知道,帮顶了

出0入0汤圆

 楼主| 发表于 2014-9-19 14:58:34 | 显示全部楼层
谢谢帮顶啊

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2014-9-19 15:52:39 | 显示全部楼层
自己顶一下

出40入42汤圆

发表于 2014-9-19 16:08:39 | 显示全部楼层
帮顶一下,不过没看出趋势,要怎么滤?

出0入0汤圆

发表于 2014-9-19 17:12:36 | 显示全部楼层
本帖最后由 yigang 于 2014-9-19 17:13 编辑

// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER(uChar LEV_OR_SURF)
{ //                        [1][2][3][4][5],
  // 5 POINT MEAN FILTER:          ^
  //                               |--------------> OUTPUT.
  static uInt4    LEV_CAL_BUFF[5] = { // Buffer of level value calculate.
                                     0,0,0,0,0 };
  static uInt4    SUR_CAL_BUFF[5] = { // Buffer of INTERFACE value calculate.
                                     0,0,0,0,0 };
  uInt4  NEW_VALUE, *pt, v_temp;
  uInt2  i, j;
  
  if (LEV_OR_SURF == LEVEL) {
    pt = (uInt4 *) &LEV_CAL_BUFF[0];
    *(pt+4) = NEW_VALUE = lev_value_pulse; // Append data to buffer.
  }
  else  {
    pt = (uInt4 *) &SUR_CAL_BUFF[0];
    *(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;
}

出0入0汤圆

 楼主| 发表于 2014-9-19 17:22:23 | 显示全部楼层
yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER( ...

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

出0入0汤圆

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


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

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-9-19 22:42:01 | 显示全部楼层
你这是什么信号

出0入0汤圆

 楼主| 发表于 2014-9-20 10:06:55 | 显示全部楼层

请见9楼

出50入0汤圆

发表于 2014-9-20 10:26:34 | 显示全部楼层
学习   

出0入0汤圆

 楼主| 发表于 2014-9-20 20:06:28 | 显示全部楼层
顶一下
呵呵
期待高手指点 呵呵

出0入0汤圆

发表于 2014-9-20 21:25:43 来自手机 | 显示全部楼层
中值滤波!

出0入0汤圆

 楼主| 发表于 2014-9-22 09:27:51 | 显示全部楼层
自己接着
顶一下

期待高手指点 呵呵

出0入0汤圆

发表于 2014-9-22 10:10:02 | 显示全部楼层
yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER( ...

程序不错

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

出0入0汤圆

发表于 2014-9-22 10:13:48 | 显示全部楼层
取40个数,排序,去掉前后各4个,求和,右移5位。

出0入0汤圆

发表于 2014-9-22 10:19:59 | 显示全部楼层
powerplj 发表于 2014-9-22 10:10
程序不错

不过楼主的头像更有 魅力

共勉!!!

出0入0汤圆

发表于 2014-9-22 10:22:05 | 显示全部楼层
yigang 发表于 2014-9-19 17:12
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
uInt4   MEAN_FILTER( ...

mark

出0入0汤圆

发表于 2014-9-22 10:23:03 | 显示全部楼层
有时间发一下滤波的效果图呗

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-9-22 10:30:00 | 显示全部楼层
表示看不出来波形有什么问题,惭愧

出0入0汤圆

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

另外,可以 ...

有QQ吗?
谢谢你和大家了

出0入0汤圆

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

另外,可以 ...

你的干扰波形有吗?

出0入0汤圆

发表于 2014-9-22 10:57:15 | 显示全部楼层
有什么问题

出0入0汤圆

发表于 2014-9-22 10:58:03 | 显示全部楼层
采样出来的数据需要很精确吗?把芯片ADC采样频率选最低,然后10MS采样一次,8次取平均值。上面的两个可以根据你要求的数据实时性选择,看看实际效果。

出0入0汤圆

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

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

出0入0汤圆

发表于 2014-9-22 11:07:51 | 显示全部楼层
D:\temp\Filter.jpg


出0入0汤圆

 楼主| 发表于 2014-9-22 11:13:58 | 显示全部楼层

看不到图片啊?

出0入0汤圆

发表于 2014-9-22 11:41:09 | 显示全部楼层
不好意思,总是上传不了图片,柒伍肆贰玖肆柒肆柒

出0入0汤圆

 楼主| 发表于 2014-9-22 12:35:28 | 显示全部楼层
WinExt 发表于 2014-9-22 11:41
不好意思,总是上传不了图片,柒伍肆贰玖肆柒肆柒

好的 我加一下

出0入0汤圆

发表于 2014-9-22 14:04:19 | 显示全部楼层
fir或者iir吧,想只滤成直流太容易了

出0入0汤圆

 楼主| 发表于 2014-9-22 14:10:35 | 显示全部楼层
gvgvfghv 发表于 2014-9-22 14:04
fir或者iir吧,想只滤成直流太容易了

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

出0入0汤圆

发表于 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系数越大低通越低。

出0入0汤圆

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

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

出0入0汤圆

 楼主| 发表于 2014-9-24 22:35:52 | 显示全部楼层
此帖可否继续讨论,高手继续 呵呵

出0入4汤圆

发表于 2014-9-24 23:54:14 来自手机 | 显示全部楼层
46楼正解。上一阶滞后滤波。

出0入0汤圆

发表于 2014-9-25 07:04:36 | 显示全部楼层
如果低频应用多点平均滤波是很好的办法,几百点平均都可以试一下绝对平滑。

出0入0汤圆

发表于 2014-9-25 07:46:41 | 显示全部楼层
ad采样要根据采样速率前面电路上面加fs/2的低通滤波器,程序上面我一般就是去除最大最小几个值然后剩下的取平均值,每采一个点就这么做一次。效果还可以。

出0入0汤圆

发表于 2014-9-25 07:51:08 | 显示全部楼层
感觉硬件滤波会比较靠谱

出0入0汤圆

发表于 2014-9-25 08:04:25 来自手机 | 显示全部楼层
yzpanhui 发表于 2014-9-25 07:51
感觉硬件滤波会比较靠谱

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

出0入0汤圆

发表于 2014-9-25 08:08:39 | 显示全部楼层
加权的移动平均平滑法,最新值取较小的加权

出0入0汤圆

发表于 2014-9-25 08:12:11 | 显示全部楼层
可以滑动滤波, 可以设置滤波深度, 即每次只取当次采样的 1/n

出0入0汤圆

发表于 2014-9-25 08:12:12 | 显示全部楼层
MARK      

出0入0汤圆

发表于 2014-9-25 08:44:02 来自手机 | 显示全部楼层
记得论坛里面有人发过10种软件滤波算法及其实现。楼主搜索一下,总有一款适合你。

出0入0汤圆

 楼主| 发表于 2014-9-25 09:28:14 | 显示全部楼层
谢谢各位,感觉还是有必要加硬件滤波措施,不过我还想接着试试软件的效果

出0入0汤圆

发表于 2016-4-28 23:50:45 | 显示全部楼层
Excellence 发表于 2014-9-22 10:13
取40个数,排序,去掉前后各4个,求和,右移5位。

有效

出0入0汤圆

发表于 2016-5-9 14:51:56 | 显示全部楼层
不错,学习了

出0入0汤圆

发表于 2016-5-16 10:47:15 | 显示全部楼层
排序,抛头去尾,然后再平均
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 20:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表