Как посчитать среднее значение?

Простейшие вопросы в области инженерной разработки
Ответить
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Как посчитать среднее значение?

Сообщение lexa »

есть массив данных(1-d array double). Как посчитать среднее значение?
Вот сейчас график строится так: на x идет число от 1 до 100 с шагом 1, на y
идет отношение 2х каналов. Каждые каждые 20 секунд сдвигается координата x на 1. За эти 20 секунд на y поступает 40 значений. Для каждого x на графике получается разброс точек по вертикали. Мне нужно чтобы вместо этого разброса была одна точка(среднее значение этого разброса) для каждой координаты x.
Научите, кто может.
Вложения
Снимок.JPG
Снимок.JPG (28.88 КБ) 11540 просмотров
Аватара пользователя
Pavel Krivozubov

Activity Bronze
professor
professor
Сообщения: 4421
Зарегистрирован: 07 фев 2008, 16:39
Награды: 3
Версия LabVIEW: 7.0 - 2013
Откуда: г. Электросталь
Благодарил (а): 24 раза
Поблагодарили: 9 раз
Контактная информация:

Re: как посчитать среднее значение?

Сообщение Pavel Krivozubov »

Среднее значение массива считается путем суммирования элементов массива и деления полученного значения на количество элементов массива. Тебе помогут модули add array elements и array size.
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Re: как посчитать среднее значение?

Сообщение lexa »

так пробовал, но всё равно он рисует разброс, а не одну точку.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: как посчитать среднее значение?

Сообщение Konstantin Sumenko »

Как брать среднее уже сказали (Есть еще Mean.Vi). Тебе среднее надо за весь период поступления данных или нет?
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение lexa »

нет, не за весь период. Вот поступают постоянно данные для y, они мне не нужны все, а только то что намереется пока я не поменяю значение x. Допустим сперва значение x равно 1, на y идут данные и на графике строится разброс точек для x=1. Надо чтобы он копил данные, пока я не поменяю x на 2, и по этим данным находил среднее и ставил 1 точку вместо нескольких. Потом когда на x=2 опять копил данные, пока не сменится x, считал среднее уже для x=2 и ставил еще 1 точку.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение Konstantin Sumenko »

Введи буфер в цикл, где накапливаются данные (через shift регистр. например) и по условию появления нового x- усредняй весь буфер с его последующим обнулением, а полученное число- на график.
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение lexa »

Извиняюсь за свою тупизну, но не могу понять что понимается под буфером. Для задания условия появления нового x нужно создать case structure в цикле, так? Как обнулить? Что почитать по этим вопросам, чтобы так не тупить?
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение mzu2006 »

Например можно посмотреть внутренности svl_Running Equivalent Continuous Sound Level (1 Ch).vi (из пакета Sound and Vibration Toolkit). Он работает на этом принципе.
Условие появления нового X - это вызов товего VI

Эта тема уже всплывала не раз. Посмотри этот пост.

Я не исключаю, что задачу можно решить фильтром высоких частот из палитры Point by Point. Вопрос к специалистам по фильтрам.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение Konstantin Sumenko »

Вот избыточный пример. Можно и фильтры полноценные привлечь, если необходимость будет.
Вложения
Buffer.vi
(27.14 КБ) 399 скачиваний
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение lexa »

вот в этом примере усреднение идет, как я понимаю, по каждому отсчету времени. Как сделать в этом примере чтобы заместо этого времени я мог менять с помощью например Num ctrl число и при его изменении выдавалось на график среднее значение данных поступивших при значении числа до его изменения.
Еще раз извиняюсь за тупизну и невменяемость.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение Konstantin Sumenko »

Посмотри
Вложения
Buffer-2.vi
(30.69 КБ) 352 скачивания
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение lexa »

Crowbar
благодарю. Ещё вопрос небольшой. Что делает в этом примере верхний цикл?
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: Как посчитать среднее значение?

Сообщение FireFly »

lexa писал(а):Как сделать в этом примере чтобы заместо этого времени я мог менять с помощью например Num ctrl число и при его изменении выдавалось на график среднее значение данных поступивших при значении числа до его изменения.
А зачем число? Почему бы не сделать кнопку "Посчитать среднее всех накопившихся измерений":
Копишь в Shift Register "Накопления" измерения, каждый цикл проверяешь кнопку, как только кнопка (внешняя команда) стала True - считаешь среднее Shift Register "Накопления" и результат добавляешь в Shift Register "Средние результаты", Shift Register "Накопления" обнуляешь, а кнопку сбрасываешь в False (ждешь новую команду).
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
Konstantin Sumenko

Activity Bronze
expert
expert
Сообщения: 1439
Зарегистрирован: 17 июл 2008, 12:20
Награды: 2
Версия LabVIEW: 2010
Откуда: Moscow
Поблагодарили: 1 раз
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение Konstantin Sumenko »

Верхний цикл создает временные отсчеты. Его конечно же можно убрать и генерировать временные точки в нижнем. Я его отделил, чтобы ситуация была ближе к реальной. И еще: накапливаемые точки не удаляются, это надо иметь в виду (массивы раздуваются). Второе: обрати внимание на массив history (он хранит в себе уже набранные значения Trigger LVL, и если ты еще раз это число в контрол запишешь- точка не отрисуется (это сделано, чтобы не захламлять буфер график)).
lexa
beginner
beginner
Сообщения: 20
Зарегистрирован: 06 фев 2010, 10:37
Версия LabVIEW: 2009
Контактная информация:

Re: Как посчитать среднее значение?

Сообщение lexa »

В общем хотел прийти от простой темы к сложной. Не получилось. Вот пример который предложил Crowbar делает примерно то что надо, но при применении его в используемой мной программе почему то должным образом не работает.
Попробую описать подробнее. Есть два датчика. Они измеряют интенсивность лазерных импульсов. Исходное излучение делится на 2 луча. Один идет сразу на 1й датчик, а другой проходя через образец(тонкое стекло) на 2й. Меняя положение образца измеряем интенсивность. Частота следования импульсов 2 Гц.
Изначально программа записывала в файл значения 1,2 каналов, строила график зависимости значений 1 канала от 2 канала и управляла подвижкой, перемещающей образец. Я добавил график, который строит зависимость отношения 1 и 2 канала от координаты образца. Координата х образца это цифра, которую я просто беру с подвижки. Шаг с которым перемещается образец 1 мм. На каждом значении координаты измерения длятся 20 секунд. На графике получается куча точек на каждом значении х, мне нужна 1 средняя из этой кучи точка для каждой координаты.
Когда вставляю Buffer-2.vi после запуска проверяю пробником провода и выясняется, что значения никуда не идут. Единственное что есть это в Buffer-2.vi мгновенные значения отношения каналов и координаты х, но они как замороженные, никуда не меняются.
Вот в этой теме http://www.labviewportal.org/viewtopic. ... 920#p14920
близко к моему вопросу только вот это http://www.labviewportal.org/download/file.php?id=4364
но это только для 3 измерений, у меня же их получается около 40.
Вразумите...
Вложения
Снимок.JPG
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»