fork download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3.  
  4. uint16_t S_IIR; //тело фильтра (максимум 14 значащих разрядов)
  5. uint16_t resultADC; // результат преобразования АЦП (10 разрядов)
  6. uint16_t outputResult; // выводимый результат фильтрации (10 разрядов)
  7.  
  8. void smooth_cycle() {
  9. S_IIR=S_IIR-(S_IIR>>4)+resultADC; // S[t+1]=((1-β)*S[t])+A[t+1], где β=0,0625=1/16
  10. outputResult=(S_IIR+8)>>4; // округление и приведение к целому
  11. printf("resultADC:%d outputResult:%d\n", (int)resultADC, (int)outputResult);
  12. }
  13.  
  14. void test_adc(uint16_t x) {
  15. printf("set resultADC to: %d\n", (int)x);
  16. resultADC = x;
  17. for (int i = 0; i < 50; i++) smooth_cycle();
  18. }
  19.  
  20. int main(void) {
  21. S_IIR = 0;
  22.  
  23. test_adc(5);
  24. test_adc(3);
  25.  
  26. return 0;
  27. }
  28.  
Success #stdin #stdout 0s 5440KB
stdin
Standard input is empty
stdout
set resultADC to: 5
resultADC:5 outputResult:0
resultADC:5 outputResult:1
resultADC:5 outputResult:1
resultADC:5 outputResult:1
resultADC:5 outputResult:2
resultADC:5 outputResult:2
resultADC:5 outputResult:2
resultADC:5 outputResult:2
resultADC:5 outputResult:2
resultADC:5 outputResult:3
resultADC:5 outputResult:3
resultADC:5 outputResult:3
resultADC:5 outputResult:3
resultADC:5 outputResult:3
resultADC:5 outputResult:3
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:4
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
resultADC:5 outputResult:5
set resultADC to: 3
resultADC:3 outputResult:5
resultADC:3 outputResult:5
resultADC:3 outputResult:5
resultADC:3 outputResult:5
resultADC:3 outputResult:5
resultADC:3 outputResult:5
resultADC:3 outputResult:5
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4
resultADC:3 outputResult:4