определение погрешности измерения дозиметра

Тема в разделе "Флудилка", создана пользователем CYITEP_BAC9I, 25 сен 2018.

  1. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    доброй ночи всем. для всех владельцев хрустальных шаров.
    начал домучивать прошивку для дозиметра и решил добавить плюшку в виде показа погрешности измерений. из скетчей самодельщиков дозиметров, понял что погрешность определяют кто во что горазд. в основном берут за основу время, типа 3600 секунд это 100% процентная точность и нулевая погрешность. чем время измерения меньше тем ниже точность и выше погрешность. в принципе логично.
    в "магазинных" дозиметрах как объяснено на одном сайте, используют определение погрешности на основе распределения Пуассона (во про какие матерки я прочитал:))
    в общем по мотивам этого самого Пуассона возникла мысль как рассчитать %погрешности. в экселе обкатал этот способ, весьма симпатично и похоже на истину выходит. если вкратце,
    набирается массив
    Код (C++):
    pulse_analysis[array_size];
    куда сохраняются число зарегистрированных импульсов в секунду. можно сделать несколько массивов 60 элементов, 120 и 180.
    потом находим среднее по массиву и среднеквадратичное отклонение (самое похожее на истину получается)
    потом делим среднеквадратичное на среднемассивное) умножаем на 100 и получаем погрешность в процентах.
    Код (C++):
    int8_t array_size =5;
        int16_t sum; //сумма всех элементов массива
        int16_t sum_pow; //сумма квадратов элементов массива
        int16_t average; //среднее
        int16_t average_pow; //средняя сумма квадратов
        int16_t pulse_analysis[array_size]; //массив считанных импульсов в секунду
        int16_t analys[array_size]; //
        int16_t analys_pow[array_size]; //массив квадратов импульсов
        int16_t rms; // среднеквадратичное отклонение
        int8_t accuracy;// точность в процентах

    //находим среднее значение элементов массива
        for (int i=0; i<=4; i++)
        {
        sum += pulse_analysis[i];
        }
        average = sum/5;
       

        for (int J=0; J<=4; J++)
        {
        analys[J]=pulse_analysis[J]-average; // находим отклонение от среднего каждого элемента
        analys_pow[J]= pow(pulse_analysis[J],2); //возводим в квадрат величину отклоненияот среднего
        sum_pow += analys_pow[J] //находим сумму квадратов
        }
    average_pow=sum_pow/(array_size-1); // находим среднеквадратичное -1 элемент
    rms= sq(average_pow); // извлекаем корень находим среднеквадратичное отклонение
    accuracy = (rms/average)*100; //находим процент отклонения.
     
    не особо надеюсь что кто нибудь разберется что я наваял), однако если кто понял что я хотел выразить ( у кого хрустальный шар с тонкой настройкой).
    посоветуйте, такой способ определения погрешности измерения, имеет право на жизнь? я такого способа не разу не встречал в скетчах самодельщиков. а ведь он по моему весьма информативно показывает "размах" погрешности при измерении за определенный промежуток времени. и параллельно возникает вопрос как в некоторых дозиметрах сразу после включения он показывает погрешность +-25%, КАК??? он же не успел еще набрать статистики??? ладно всем приятного сна
     
  2. ANV

    ANV Гуру

    1. Если вы объявляете array_size, то почему про него забываете сразу после объявления массива? Используйте и в for и в делении
    2. Умозрительно по описанию алгоритм имеет право на существование. Используйте его и не парьтесь. Все-равно он не калиброван и измеряет непонятно что
     
    CYITEP_BAC9I, parovoZZ и Сусемьбек нравится это.
  3. Daniil

    Daniil Гуру

    Еще есть дисперсия Аллена, которая говорит, что долго измерять не очень хорошо.
    Мне кажется, что проще было бы написать ответ+-ранд(t)/36 %:) (t = 1..3600)
     
    Последнее редактирование: 26 сен 2018
    CYITEP_BAC9I, parovoZZ и Сусемьбек нравится это.