OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3653|回复: 11

超声波滤波

[复制链接]

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
发表于 2018-1-27 17:08:19 | 显示全部楼层 |阅读模式
超声波滤波要怎么弄,
就比如测了五次数据,有一个数据特别大,其他的4组数据都正常,要怎么吧那个最大的数据去掉。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-1-28 12:03:22 | 显示全部楼层
本帖最后由 275891381 于 2018-1-28 12:05 编辑
西西霞 发表于 2018-1-28 10:40
用程序怎么写就能排序

有很多种,给你写了一个
#define pinghua_long 10
float pinghua(void)
{
   u8 juli_temp[pinghua_long];
         u8 i=0;
         u16 juli_max=0,juli_min=0xffff;
         u32 juli_sum=0;
   float juli=0;
         for(i=0;i<pinghua_long;i++)
         {
                   juli_temp=读取一次超声波距离;
                         juli_sum=juli_sum+juli_temp;
                         if(juli_temp>juli_max)
                                 juli_max=juli_temp;
                         if(juli_temp<juli_min)
                                 juli_min=juli_temp;
                         //这可以加个delay_ms(1);
         }
         juli=(float(juli_sum-juli_max-juli_min)/(pinghua_long-2);
         return juli;
}


不过最好的还是,弄个数组,循环朝里面写数据,读取的时候去掉最大,最小,平均就可以了,因为这种方法读的间隔太小,加延时又浪费时间
回复 支持 1 反对 0

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-27 17:40:34 | 显示全部楼层
本帖最后由 a496298685 于 2018-1-27 17:42 编辑

对所有数据进行排序,取中位数。
或者排序之后去掉若干的最大值和最小值,然后再去取平均。
回复 支持 1 反对 0

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
 楼主| 发表于 2018-1-27 19:02:23 | 显示全部楼层
a496298685 发表于 2018-1-27 17:40
对所有数据进行排序,取中位数。
或者排序之后去掉若干的最大值和最小值,然后再去取平均。

程序要怎么写去去掉若干的最大值和最小值?
回复 支持 反对

使用道具 举报

6

主题

462

帖子

0

精华

高级会员

Rank: 4

积分
906
金钱
906
注册时间
2017-12-15
在线时间
111 小时
发表于 2018-1-27 19:21:30 | 显示全部楼层
西西霞 发表于 2018-1-27 19:02
程序要怎么写去去掉若干的最大值和最小值?

排一下序,然后就可以去掉了。

当然,并不需要真的去掉,只是在计算平均值时候不要把他们包含进去即可
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-1-27 19:21:33 | 显示全部楼层
本帖最后由 275891381 于 2018-1-27 19:24 编辑
西西霞 发表于 2018-1-27 19:02
程序要怎么写去去掉若干的最大值和最小值?

大小排序后,去掉最大的和最小的呀,也就是第一个和最后一个,或者你百度“十大滤波算法程序大全”,参考一下
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
 楼主| 发表于 2018-1-28 10:40:30 | 显示全部楼层
a496298685 发表于 2018-1-27 19:21
排一下序,然后就可以去掉了。

当然,并不需要真的去掉,只是在计算平均值时候不要把他们包含进去即可

用程序怎么写就能排序
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
 楼主| 发表于 2018-1-28 10:40:51 | 显示全部楼层
275891381 发表于 2018-1-27 19:21
大小排序后,去掉最大的和最小的呀,也就是第一个和最后一个,或者你百度“十大滤波算法程序大全”,参考 ...

用程序怎么写就能排序
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
 楼主| 发表于 2018-1-28 13:03:45 | 显示全部楼层
275891381 发表于 2018-1-28 12:03
有很多种,给你写了一个
#define pinghua_long 10
float pinghua(void)

嗯嗯,谢谢。
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
 楼主| 发表于 2018-1-28 13:05:58 | 显示全部楼层
275891381 发表于 2018-1-28 12:03
有很多种,给你写了一个
#define pinghua_long 10
float pinghua(void)

那如果想去掉最大,次大,第三大,最小,次小,第三小,
要怎么写?
写这种的逻辑是什么 ?
回复 支持 反对

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2018-1-28 15:20:08 | 显示全部楼层
西西霞 发表于 2018-1-28 13:05
那如果想去掉最大,次大,第三大,最小,次小,第三小,
要怎么写?
写这种的逻辑是什么 ?

要么完全排序,要么用写给你的方法查询最大最小三次不就可以了
回复 支持 反对

使用道具 举报

13

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2018-1-24
在线时间
17 小时
 楼主| 发表于 2018-1-28 15:27:25 | 显示全部楼层
275891381 发表于 2018-1-28 15:20
要么完全排序,要么用写给你的方法查询最大最小三次不就可以了

奥奥,明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 14:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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