求平均值问题 STL

我这边要采集的数据量是不固定的,但都大于5个,所以我希望这个是个变量。
然后我这边是要去除2个最大的和2个最小的值,然后取平均数。不知道哪位大神能帮帮忙

问题补充:
如果是应用冒泡法,如何能简单的算取中间数值的平均值呢,而且我如何知道我已经排序好了呢?

最佳答案

1:首先 ,你需要 新建个数组比如64个REAL 类型的。
2:采样次数必须<=64.
3:编写个FC 程序,做个POINTER参数,指向你新建的数组
4::你是 去除一个最大值和1个最小值?还是2个最大值和2个最小值?如果是后者,需要排序算法。如果是前者,相对简单,是个标准的中位值平均滤波
参数
VAR_INPUT
  FilterFactor : INT ; 
  InValue : REAL ; 
  Queue : POINTER ; 
  MovingAverage : BOOL ; 
  MedianAverage : BOOL ; 
  ParNoFilter : BOOL ; 
END_VAR
VAR_IN_OUT
  OutValue : REAL ; 
  EnterAcc : INT ; 
END_VAR
VAR_TEMP
  tmpMax : REAL ; 
  tmpMin : REAL ; 
  tmpSum : REAL ; 
  tmpAddr : DWORD ; 
  DBNumber : INT ; 
  tmpIdex : INT ; 
  tmpbool : BOOL ; 
  AR1Restore : DWORD ; 
END_VAR
代码
      TAR1  #AR1Restore
      A     #ParNoFilter
      JC    Nc3
      L     P##Queue
      LAR1  
      L     W [AR1,P#0.0]
      T     #DBNumber
      L     D [AR1,P#2.0]
      SLD   8
      SRD   8
      T     #tmpAddr
      OPN   DB [#DBNumber]
      LAR1  #tmpAddr
      L     P#4.0
      L     #EnterAcc
      *D    
      +AR1  
      L     #InValue
      T     DBD [AR1,P#0.0]
      L     #EnterAcc
      INC   1
      T     #EnterAcc
      L     #FilterFactor
      >=I   
      =     #tmpbool
      JNB   Rst1
      L     0
      T     #EnterAcc
Rst1: NOP   0
      A     #tmpbool
      O     #MovingAverage
      JCN   Nc1
      LAR1  #tmpAddr
      L     DBD [AR1,P#0.0]
      T     #tmpMax
      T     #tmpMin
      L     0.000000e+000
      T     #tmpSum
      L     #FilterFactor
MAF1: T     #tmpIdex
      LAR1  #tmpAddr
      A     #MovingAverage              
      JC    Sum
      L     #tmpMax
      L     DBD [AR1,P#0.0]
      <=R   
      JCN   MAX
      L     DBD [AR1,P#0.0]
      T     #tmpMax
字数有限,剩余部分 见图片
补充:关键是去一个最大和一个最小,还是第一大的和第二大的数值,以及最小和第二小的数值,如果这样需要排序,不然只要你只要比较出最大值和最小值。

图片说明:

求平均值问题 STL  

提问者对于答案的评价:
谢谢~~

专家置评

已阅,最佳答案正确。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc229300.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 上午3:46
下一篇 2018年12月1日 上午3:46

相关推荐