极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18227|回复: 1

求助 关于滤波

[复制链接]
发表于 2016-12-1 22:05:29 | 显示全部楼层 |阅读模式
void VSI() {

  int VSI_Alt = 0;
  int   VSIvalue = 0;
  unsigned long VSI_LastTime = 0;

   //Averiging
  // first remove (subtract) the oldest valeu from ArraySum
  VSIArraySum -= VSIArray[VSIArrayIndex];
  // ... and replace it with the new value
  VSI_Alt = AltitudeArraySum / AltitudeArraySize;
  VSI_LastTime = millis();

/*
Serial.print("VSI_Alt = ");
Serial.println(VSI_Alt);
Serial.println("======================================");
*/

  VSIArray[VSIArrayIndex] = (VSI_Alt - VSI_Alt_Old)*60000/(VSI_LastTime - VSI_Alt_Old_Time);
  VSIArraySum += VSIArray[VSIArrayIndex];

  VSIArrayIndex +=1; // shift the index for next time
  if (VSIArrayIndex == VSIArraySize) {  // if we reached the tom of the array
    VSIArrayIndex = 0;                       //go to the start of the array
  }


  if (millis() - VSI_Timer > BufferTimer) {
   
    VSI_LastTime = millis();
    VSIvalue = VSIArraySum / VSIArraySize;





   
    textAreaVSIvalue.ClearArea();
    textAreaVSIvalue.Printf("%4d", abs(VSIvalue));     //这部分太灵敏了 想用一阶滤波 求教大神们怎么写

    textAreaVSIarrow.ClearArea();
  
    if (VSIvalue > 0) {
      textAreaVSIarrow.print("%"); // going UP
    }
  
  
    if (VSIvalue < 0) {
      textAreaVSIarrow.print("&"); // going DOWN
    }
  
    VSI_Timer = VSI_LastTime;
  }

  VSI_Alt_Old_Time = VSI_LastTime;
  VSI_Alt_Old = VSI_Alt;

R_VSI_avg = VSIvalue;
}


以上代码关于 VSIvalue 怎么能用一阶滤波延迟 显示?
回复

使用道具 举报

 楼主| 发表于 2016-12-2 12:26:20 | 显示全部楼层
高手在哪里。。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-9 13:59 , Processed in 0.034710 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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