дифференцирование графика

Захват, обработка и генерирование сигнала
Radioboter
interested
interested
Сообщения: 7
Зарегистрирован: 09 июл 2013, 22:06
Репутация: 0
Версия LabVIEW: 8.2
Контактная информация:

дифференцирование графика

Сообщение Radioboter »

Здравствуйте!
Помогите, пожалуйста, сделать следующее:
у меня есть точки (X ,Y) 10 штук, например. Мне нужно по этим точкам построить график, найти его производную и нарисовать в виде графика.

Meteor
junior
junior
Сообщения: 69
Зарегистрирован: 25 окт 2013, 17:37
Репутация: 0
Версия LabVIEW: 2012

Re: дифференцирование графика

Сообщение Meteor »

Вспоминайте геометрический смысл производной - берите две соседние точки (Xi,Yi и Xi+1,Yi+1), найдите разности dY=Yi+1-Yi и dX=Xi+1-Xi, по результатам находите dY/dX это и будет производная. Из ваших 10 исходных точек, получится 9 точек с производными. График и цикл думаю разберетесь как получить

bartex
user
user
Сообщения: 73
Зарегистрирован: 14 апр 2014, 21:09
Репутация: 0
Версия LabVIEW: 2015
Откуда: Санкт-Петербург

Re: дифференцирование графика

Сообщение bartex »

Вот два примера - вариант1 - попроще, вариант 2 -поинтересней.
В обоих вариантах решается классическая задача: скорость = путь/время.
P.S. При сохранении в версии 8.2 у меня выскакивают предупреждения, не знаю, сможете ли Вы открыть у себя программу... :shok:
Поэтому дополнительно выкладываю сканы
Вложения
Вар1.PNG
Вар1.vi
(15.17 КБ) 181 скачивание
Вар2 бл-диагр.PNG
Вар2.vi
(30.04 КБ) 183 скачивания

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

Всем привет! Поставил себе задачку написать просмотрщик .dat файлов с ВАХами. ВАХи строит, а вот производную как-то по-дурацки... производную считал также как советовал bartex. Есть есть какие идеи или хотя бы догадки, буду рад услышать. Спасибо!
P.S. в приложении картинка дифференциального сопротивления (производной ВАХ) построенная по простейшему алгоритму, предложенному выше, и по алгоритму Origin'a (не знаю какому).
Изображение
Изображение

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

Картинки
Вложения
IV-Rd_pic.jpg
IV-Rd_origin.jpg

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

ВАХа пишется так: свипирую ток 0...Imax...0...-Imax...0. Если взять dat файл и вырезать все минуса + оставить только проход от 0...Imax, производная более-менее берётся. Можно конечно что-то придумать чтобы бить входные данные, но как-то не очень хочется...
Вложения
IV-Rd_pic_only_plus.jpg
subvi_IVtoRd.jpg

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

А вот txt-файл если кто вдруг решит поразвлекаться...
Вложения
IVC-#4-40mkm-D2-858-4K.txt
(115.42 КБ) 75 скачиваний

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: дифференцирование графика

Сообщение IvanLis »

Andrey Petrzhik писал(а):А вот txt-файл если кто вдруг решит поразвлекаться...

Для корректного вычисления производной (численными методами) необходимо чтобы массив (аргумента) был отсортирован по возрастанию (ну и значение функции нужно переставлять тогда).
У Вас сейчас это условие не выполняется, по этому и косяки такие.

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

IvanLis,
т.е. я выстраиваю табличку данных по токам от -Imax до +Imax и каким то образом сохраняю привязку каждого тока к "своему" напряжению... ага, ща подумаю как бы это сделать. Спасибо!

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: дифференцирование графика

Сообщение IvanLis »

Andrey Petrzhik писал(а):IvanLis,
т.е. я выстраиваю табличку данных по токам от -Imax до +Imax и каким то образом сохраняю привязку каждого тока к "своему" напряжению... ага, ща подумаю как бы это сделать. Спасибо!


Нет, у вас сейчас напряжение изменяется от 0 -> min -> max -> 0
Лучше взять участок min..max, проверить на монотонность, и по нему уже строить производную.
Снимок экрана от 2018-05-23 13-42-02.png
Снимок экрана от 2018-05-23 13-42-02.png (4.82 КБ) 3985 просмотров

А Вы сейчас считаете производную от функции имеющей разрывы.

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

Ага, да, разумно, так и сделал. Пока что руками. Оставил участок -I...+I. В нуле ещё руками вбил 0 напряжения на всякий случай. Лучше, но кривая сдвинута оказывается... что ещё не так может быть? Приложил iv-rdv.vi - тут всё и происходит, а потом передаётся в iv_ascii_tab_viewer.vi. 12я labview. Также приложил скомпилированный вариант, который откроет .dat файл по щелчку, если его в windows ассоциировать с программкой.
Вложения
minesI_to_plusI.jpg
IVC-#4-40mkm-D2-858-4Kcuted.dat.txt
(57.69 КБ) 68 скачиваний
iv_ascii_tab_viewer.vi
(116.23 КБ) 69 скачиваний
iv-rdv.vi
(113.71 КБ) 71 скачивание
iv_ascii_tab_viewer.exe.txt
(515.5 КБ) 68 скачиваний

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: дифференцирование графика

Сообщение IvanLis »

Andrey Petrzhik писал(а):Ага, да, разумно, так и сделал. Пока что руками. Оставил участок -I...+I. В нуле ещё руками вбил 0 напряжения на всякий случай. Лучше, но кривая сдвинута оказывается... что ещё не так может быть?


Возможно Вы где-то еще накосячили, у меня все нормально получается, хотя я "0" не добавлял.
Снимок экрана от 2018-05-23 22-36-28.png

Наверняка он как раз и оказался лишним.
Искать ошибки в Вашем коде уже нет возможности.
Посмотрите, как у меня реализовано.
1.png

Untitled 1.vi
lv2010
(20.79 КБ) 67 скачиваний


----------------
Я что-то глянул.... не производная у нас получилась.
Производная, это отношение изменения функции к изменению аргумента: df/dx
Тогда должно получиться нечто:
Снимок экрана от 2018-05-24 00-09-48.png

Либо исходная зависимость примет вид:
Снимок экрана от 2018-05-24 00-14-13.png
Снимок экрана от 2018-05-24 00-14-13.png (6.84 КБ) 3953 просмотра

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

О сколько всего... класс. У вас как-то не так сделано как у меня... пока не понял, но постараюсь разобраться. По поводу производная - не производная... У меня есть 2 колонки: нулевая это напряжение, а первая - это ток. Ток задаю (аргумент), напряжение измеряю (функция). Чтобы узнать сопротивление я делю напряжение на ток. Также могу поделить ток на напряжение, и получу проводимость. Потом уже эту проводимость переверну... сходу не соображу будет ли разница.

Да, и у вас тоже кривая вышла смещенная, а в Origin она получается практически идеально симметричная... как так не пойму... хоть я там строил по всем имеющимся в файле-исходнике точкам (не вырезал данные).

В любом случае ещё покопаю в этом направлении и отпишусь чего выйдет. dat файлов намерил куча - все фиг построишь в сторонней программе...

Спасибо за помощь!

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4933
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

Re: дифференцирование графика

Сообщение IvanLis »

Andrey Petrzhik писал(а):Да, и у вас тоже кривая вышла смещенная, а в Origin она получается практически идеально симметричная... как так не пойму... хоть я там строил по всем имеющимся в файле-исходнике точкам (не вырезал данные).

В любом случае ещё покопаю в этом направлении и отпишусь чего выйдет. dat файлов намерил куча - все фиг построишь в сторонней программе..

Наверняка там используется аппарат интерполяции, аппроксимации, ресемплинга.
По этому и кривые гладкие получаются.

Но если хотите по честному, то уменьшайте шаг при измерении характеристики.

Andrey Petrzhik
junior
junior
Сообщения: 55
Зарегистрирован: 17 ноя 2015, 11:57
Репутация: 0
Версия LabVIEW: 12
Контактная информация:

Re: дифференцирование графика

Сообщение Andrey Petrzhik »

Пока оставил как есть, хоть у меня и немного по-другому строит, но пока сойдёт. Алгоритм самый простейший (Вар. 1 bartex)... я скачал его и даже скопипастил себе на всякий случай... программа работает также, т.е. вроде как я не облажался;)
А вот теперь встала задачка сортировать данные автоматом. Поставил себе OpenG, и ну думаю она сама всё отсортирует... так вот не сортирует. Знатоки, подскажите пож что не так? Когда сортирую по 2й (от нуля считаем) колонке, она строит, а по 1й не строит. Неужели отрицательные значения не понимает?
Вложения
sort_2d_array.jpg
column2.jpg

Ответить

Вернуться в «Обработка сигнала»