搜索
bottom↓
回复: 9

调试传感器,在这里找到滤波算法,用Unity做了一个演示

[复制链接]

出100入95汤圆

发表于 2021-12-12 19:49:16 | 显示全部楼层 |阅读模式

原帖子在这里:
谁能帮我看一段150行C语言滤波算法,红包酬谢 (amobbs.com 阿莫电子论坛)

当然了,算法内容我没有看,直接看了12楼说的话自己写了一个,写了两个版本:C#和C++(C)fszhang/MV_Filter (github.com)
数值变化检测以当前值的10%波动为阈值。

Unity做的显示在这里:
Unity制作加权滑动平均算法演示_哔哩哔哩_bilibili



  1. void DataAVG(byte dataIndex, byte *AVG_Times, uint32_t dataTab[], uint32_t *dataIn, uint32_t *dataLast)
  2. {
  3.     byte i, dataPosition;
  4.     uint32_t Sum;
  5.     uint32_t PID_Data, PID_DataCurrent, Margin;
  6.     dataTab[dataIndex] = PID_DataCurrent = *dataIn;
  7.     for (i = 0, Sum = 0; i < *AVG_Times; i++)
  8.     {
  9.         if (dataIndex >= i)
  10.             dataPosition = (byte)(dataIndex - i);
  11.         else
  12.             dataPosition = (byte)(AVG_DataTabCount + dataIndex - i);

  13.         Sum += dataTab[dataPosition];
  14.     }
  15.     PID_Data = Sum / (*AVG_Times);
  16.     Margin = PID_Data / 10;
  17.     if (((PID_DataCurrent > (PID_Data + Margin)) && (*dataLast > (PID_Data + Margin))) ||
  18.         (((PID_DataCurrent + Margin) < PID_Data) && ((*dataLast + Margin) < PID_Data)))
  19.     {
  20.         *AVG_Times = 2;
  21.     }
  22.     else
  23.     {
  24.         if (*AVG_Times < AVG_DataTabCount)
  25.             AVG_Times++;
  26.     }
  27.     *dataIn = PID_Data;
  28.     *dataLast = PID_DataCurrent;
  29. }
复制代码
  1. private void DataAVG(byte dataIndex, ref byte AVG_Times, ref UInt32[] dataTab, ref UInt32 dataIn, ref UInt32 dataLast)
  2. {
  3.     byte i, dataPosition;
  4.     UInt32 Sum;
  5.     UInt32 PID_Data, PID_DataCurrent, Margin;
  6.     dataTab[dataIndex] = PID_DataCurrent = dataIn;
  7.     for (i = 0, Sum = 0; i < AVG_Times; i++)
  8.     {
  9.         if (dataIndex >= i)
  10.             dataPosition = (byte)(dataIndex - i);
  11.         else
  12.             dataPosition = (byte)(AVG_DataTabCount + dataIndex - i);

  13.         Sum += dataTab[dataPosition];
  14.     }
  15.     PID_Data = Sum / (AVG_Times);
  16.     Margin = PID_Data / 10;
  17.     if (((PID_DataCurrent > (PID_Data + Margin)) && (dataLast > (PID_Data + Margin))) ||
  18.         (((PID_DataCurrent + Margin) < PID_Data) && ((dataLast + Margin) < PID_Data)))
  19.     {
  20.         AVG_Times = 2;
  21.     }
  22.     else
  23.     {
  24.         if (AVG_Times < AVG_DataTabCount)
  25.             AVG_Times++;
  26.     }
  27.     dataIn = PID_Data;
  28.     dataLast = PID_DataCurrent;
  29. }
复制代码


本帖子中包含更多资源

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

x

出0入46汤圆

发表于 2021-12-12 23:43:34 | 显示全部楼层
算法不错,界面也不错

出0入8汤圆

发表于 2021-12-13 09:21:54 | 显示全部楼层
工程师030 发表于 2021-12-12 23:43
算法不错,界面也不错

unity  3d做的界面?

出0入46汤圆

发表于 2021-12-13 09:36:03 | 显示全部楼层
justdomyself 发表于 2021-12-13 09:21
unity  3d做的界面?

看楼主描述应该是,我也不太懂

出100入95汤圆

 楼主| 发表于 2021-12-13 09:45:28 来自手机 | 显示全部楼层
justdomyself 发表于 2021-12-13 09:21
unity  3d做的界面?

开发游戏都有UI开发,用这个系统来做上位机,除了体积大点,其他的都非常漂亮

出0入8汤圆

发表于 2021-12-13 16:23:54 | 显示全部楼层
fszhang 发表于 2021-12-13 09:45
开发游戏都有UI开发,用这个系统来做上位机,除了体积大点,其他的都非常漂亮 ...

有没有好点的教程,推荐下

出20入25汤圆

发表于 2021-12-14 08:45:33 来自手机 | 显示全部楼层
fszhang 发表于 2021-12-13 09:45
开发游戏都有UI开发,用这个系统来做上位机,除了体积大点,其他的都非常漂亮 ...

老哥以前是画板的,还用过你的库,搞游戏去了?

出100入95汤圆

 楼主| 发表于 2021-12-14 11:32:44 | 显示全部楼层
justdomyself 发表于 2021-12-13 16:23
有没有好点的教程,推荐下

教程没有去找专业的,我是关注了几个Unity开发的,偶尔会讲UI开发,剩下都是自己自学的

出100入95汤圆

 楼主| 发表于 2021-12-14 11:34:06 | 显示全部楼层
chenchaoting 发表于 2021-12-14 08:45
老哥以前是画板的,还用过你的库,搞游戏去了?

我还是做硬件的,有时也会写上位机,最近一两年刚接触Unity, 现在VS和Unity都在用

出0入8汤圆

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

本版积分规则

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

GMT+8, 2024-4-20 00:00

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

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