proking 发表于 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;
// ... 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 = (VSI_Alt - VSI_Alt_Old)*60000/(VSI_LastTime - VSI_Alt_Old_Time);
VSIArraySum += VSIArray;

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 怎么能用一阶滤波延迟 显示?

proking 发表于 2016-12-2 12:26:20

高手在哪里。。。。
页: [1]
查看完整版本: 求助 关于滤波