Advertisement
Nuke29

mer_detector.cpp

Oct 3rd, 2022 (edited)
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | Source Code | 0 0
  1. /*
  2.  * mer_detector.cpp
  3.  *
  4.  *  Created on: 13 ΠΌΠ°Ρ€. 2022 Π³.
  5.  *      Author: gala13
  6.  */
  7.  
  8. #include "mer_detector.h"
  9.  
  10. MER_Detector::MER_Detector(int adc_freq, int adc_ch_mask)
  11. : Tech_Channel(),
  12.   mer_length(mer_factor * adc_freq / top_freq),
  13.   arr_length(2 * mer_length - 1),
  14.   step(mer_length - 1)
  15. {
  16.     for (int i = 0; i < 3; ++i) {
  17.         if ((adc_ch_mask >> i) & 1) {
  18.             ++num_of_adcs;
  19.         }
  20.     }
  21. #if DEBUG
  22.     print_wrap("MER: number of working ADCs is (%d), MER LEN is (%d).\r\n", num_of_adcs, mer_length);
  23. #endif
  24. }
  25.  
  26. void MER_Detector::push_to_calc(int64_t data1_, int64_t data2_, int64_t data3_) {
  27.     data1_ >>= 8;
  28.     data2_ >>= 8;
  29.     data3_ >>= 8;
  30.     int64_t val = ((data1_ * data1_) + (data2_ * data2_) + (data3_ * data3_)) /  num_of_adcs;
  31.  
  32.     left_mer_accum -= tech_buf[position];
  33.     right_mer_accum -= tech_buf[(position + step) % arr_length];
  34.  
  35.     left_mer_accum += tech_buf[(position + mer_length) % arr_length];
  36.     right_mer_accum += val;
  37.  
  38.     tech_buf[position++] = val;
  39.     position %= arr_length;
  40.  
  41.     calc_trigger();
  42. }
  43.  
  44. void MER_Detector::calc_trigger() {
  45.     mer_ratio[cur_pos] = estimate_denominator * right_mer_accum / left_mer_accum;
  46.     if (!is_background_mode_on && !is_triggered && is_filled) {
  47.         trigg_fraction = mer_ratio[cur_pos] - mer_ratio[prev_pos];
  48.         if (trigg_fraction > trigg_lvl || trigg_fraction < -trigg_lvl) {
  49.             is_triggered = true;
  50.             trigg_to_show = trigg_fraction;
  51.             ++events_count;
  52.         }
  53.     }
  54.     else if (position == 0) {
  55.         is_filled = true;
  56.     }
  57.     cur_pos ^= 1;
  58.     prev_pos ^= 1;
  59. }
  60.  
  61. #if DEBUG
  62. void MER_Detector::show_triggered() {
  63.     print_wrap("Numerator of trigger function is (%d), tigger level is (|%d|).\r\n", trigg_to_show, trigg_lvl);
  64. }
  65. #endif
  66.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement