|
|
  |
Интегрирование показаний датчика на С, как правильно? |
|
|
|
Aug 9 2012, 03:51
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(smk @ Aug 8 2012, 19:33)  Мне нужно проинтегрировать показания датчика. Если кто уже делал подобное, подскажите как правильно. Код я наверняка сам напишу, мне бы быть уверенным что алгоритм верный. Спасибо. Нам отсюда не видно, как меняется там что-то там. Но могу уверенно сказать, что величина интеграла не должна зависеть от выбора алгоритмического языка. Си тут не имеет преимущества по точности вычислений. Или я ошибаюсь... Все эти трапеции, прямоугольники и др. интерполяции-аппроксимации при численном интегрировании обычно применяются для повышения точности интегрирования для относительно редко стоящих точек. И дадут скорее всего у Вас одинаковый результат. Цитата(Ruslan1 @ Aug 8 2012, 20:46)  Лично мне за много лет работы с данными на практике хватает двух методов: усреднение и медианный фильтр. Но это может зависеть от данных, какова специфика датчика и какие помехи нужно побороть. У Вас много лет не было практики со спектральными приборами или хроматографами там разными... Это не помехи бороть, а весь полезный сигнал собрать.
|
|
|
|
|
Aug 9 2012, 07:07
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(smk @ Aug 9 2012, 09:47)  Как с помощью printf вывести unsigned long (напр. 12123123)? Код #include <inttypes.h> // само включит <stdint.h> #include <stdio.h>
int main() { uint64_t foo = 12123123ULL; printf( "foo = %" PRId64 "\n", foo); return 0; } Это даст правильный результат где угодно.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Aug 9 2012, 07:41
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(smk @ Aug 9 2012, 11:24)  По интегрированию еще бы так... А блюдечко с голубой каемочкой приготовили? Вы же обещали сами написать... В чем суть вопроса Вашего? Численное интегрирование не проблема. Проблема в том, чтобы правильно выделить пик, который нужно интегрировать. В общем случае... Вот пока еще нет пика есть некий фон - какая-то неизвестная кривуля. Или прямуля. Ее нужно правильно выделить. Второе - нужно отрезать хвост. Иначе наинтегрируем до бесконечности. И нос нужно правильно найти. Есть еще небольшие тонкости связанные с конечной разрядностью и накоплением ошибки вычислений.
|
|
|
|
|
Aug 9 2012, 15:34
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(smk @ Aug 9 2012, 17:32)  Суть вопроса в том, что игра чисел предельно упрощает вычисления и это подозрительно. Не понял, про какую игру Вы говорите. На примере 4-ёх отсчётов: сумма линейных интерполяций (a0 + a1)/2 + (a1 + a2)/2 + (a2 + a3)/2 = a1 + a2 + (a0 + a3)/2 разность её и простой суммы (a1 + a2 + (a0 + a3)/2) - (a0 + a1 + a2) = (a3 - a0)/2 Цитата Хотелось бы услышать мнение относительно верности выбранного алгоритма (см пост 1). Абсолютно верный алгоритм. Если интересует предельное упрощение, то абсолютно тот же результат будет получен, если к простой сумме (N-1) отсчётов Вы добавите (aN - a0)/2. На всякий случай: если aN == a0, то ...
|
|
|
|
|
Aug 23 2012, 19:39
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 23-08-12
Пользователь №: 73 232

|
Цитата(smk @ Aug 8 2012, 18:33)  Мне нужно проинтегрировать показания датчика. Сами показания измеряются АЦП контроллера с дискретностью в 2 миллисекунды. Как я понимаю это должно быть численное интегрирование по методу трапеций. Начальное значение (обычно "а" в формулах) равно 0, как я понимаю. Количество проделанных измерений я могу посчитать. Это, как я понимаю будет "b" и "N" одновременно. Соответственно "h" получится всегда равно 1. А значит само интегрирование сведется к подсчету среднеарифметических значений между соседними замерами и их последующее суммирование? Наверняка я что-то понимаю не так. Если кто уже делал подобное, подскажите как правильно. Код я наверняка сам напишу, мне бы быть уверенным что алгоритм верный. Спасибо. По поводу взятия интеграла можно посмотреть исходники http://alglib.sources.ru/
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|