Как сделать смещение?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
- beginner
- Сообщения: 10
- Зарегистрирован: 11 сен 2010, 17:00
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Как сделать смещение?
Я как раз через Shift Register и делал. И все сходилось с матлабовскими результатами. Через Feedback Node, впрочем, тоже.Обратная связь - не проблема. Она уже неоднократно тестировалась и все работало правильно. Просто в данной задачи есть это смещение, которое я никак не пойму как реализовать.
А задача - управление двигателем в реальном времени. Та переходная характеристика - примерное уравнение движка.
А задача - управление двигателем в реальном времени. Та переходная характеристика - примерное уравнение движка.
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Как сделать смещение?
Дополни массив (предназначеный для смещения) нулями в начале и обрежь на то же количество в конце. Конечно, если я правильно понял задачу.
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Как сделать смещение?
Задержку - да, зелёную проволочку - нет (она направлена назад и должна нести не предыдущее значение а то же самое). Можно сделать шаг по времени очень маленьким, написать прибор решающий этот диффур с переменным шагом по времени, итп но зачем изобретать simulation toolkit, в котором эта модель создаётся один к одному (внутренность simulation loop не связана правилами Dataflow)
А VI работает вроде правильно, только нужно обрезать начало + внутри в Shift register завести буфер на время сдвига
А VI работает вроде правильно, только нужно обрезать начало + внутри в Shift register завести буфер на время сдвига
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
- beginner
- Сообщения: 22
- Зарегистрирован: 11 авг 2010, 18:22
- Версия LabVIEW: 10
- Откуда: Москва
- Контактная информация:
Re: Как сделать смещение?
Меня очень умный мужик, мой дипломный руководитель учил работать с простыми элементами, чтобы решить любую задачу. В результате вышесказанного я нифига не понял как вы тут вообще чего то сделали и получили. Сейчас напиши и я выложу свой код, который попроще (для кого то) будет. А вышепреведенные диаграмы правильны. Вся ваша путанница происходит из за слудующего:
- в еденицы времени вы ставите числа от балды;
- время равное числу 1 соответсвует период сигнала, что приводит к кратности на результирующем графике;
- включено автомасштабирование, что сбивает и поэтому вы не замечаете что амплтитуда при определенных "кратных (синфазных)" моментах возрастает к 2 и наоборот при "противофазе" падает до "0".
+++ Обратим внимание что при данной реализации одной еденице времени соответсвует 10 полных перодов сигнала, т.е. 1 перод равен 0,1++++++
Рассмотирим именно эти диаграммы:
- t= -0,095
сигнал не задержан а смещен обратно на -0,095 что фактически равно 0,1 а это 1 период гармонического колебания. Посмотрим на диаграмму. В ней 9 периодов сложились с эталоном и получилось соответственно синфазыное сложение (амплитуда возрасла с 1 до 2 едениц). А там, где согнал "котроткий" уже пропал (ограниченая длинна при формировании) его авто дополняют нули (автоматическое приравнивание длинн масивов при опредации с 2-мя и более массивами в LV) и эти нули складываются с эталоном давая гармоническийсигнал с неизменной амплитудой.
- t= 0,5
Тут проще. Пол периода сложилось в синфазе и дало возрастаниее амплитуды до 2, а половина сложилась с нулями.
- t= 0,05
Вспомним, что 0,1 соответсвует одному гармоническому колебанию, соответственно 0,05 половина одного гармонического колебания. Сдвигаем эталон на пол периода одного гармонического колебания и он в этом полупериоде складывается с нулями давая соответсвующую половину синусоидального периода. А остальная часть сигнала получается при сложении SIN эталона и смещенного на pi\2 sin что эвляется его протифазой, что в сумме дает "0".
Вот и все. И все правильно работает, мйо совет. Бростье срандартные блоки на костер сделайте генераторы сигналов как импульсных так гармонических вручную. Сделав своими руками все точно уясните. U(t)= A*sin (2pi *omega*T+FI0), Где T по теореме котельникова = i\2Fmax, Fmax=частота дескритизации равная верхней гармонике сигнала.
- в еденицы времени вы ставите числа от балды;
- время равное числу 1 соответсвует период сигнала, что приводит к кратности на результирующем графике;
- включено автомасштабирование, что сбивает и поэтому вы не замечаете что амплтитуда при определенных "кратных (синфазных)" моментах возрастает к 2 и наоборот при "противофазе" падает до "0".
+++ Обратим внимание что при данной реализации одной еденице времени соответсвует 10 полных перодов сигнала, т.е. 1 перод равен 0,1++++++
Рассмотирим именно эти диаграммы:
- t= -0,095
сигнал не задержан а смещен обратно на -0,095 что фактически равно 0,1 а это 1 период гармонического колебания. Посмотрим на диаграмму. В ней 9 периодов сложились с эталоном и получилось соответственно синфазыное сложение (амплитуда возрасла с 1 до 2 едениц). А там, где согнал "котроткий" уже пропал (ограниченая длинна при формировании) его авто дополняют нули (автоматическое приравнивание длинн масивов при опредации с 2-мя и более массивами в LV) и эти нули складываются с эталоном давая гармоническийсигнал с неизменной амплитудой.
- t= 0,5
Тут проще. Пол периода сложилось в синфазе и дало возрастаниее амплитуды до 2, а половина сложилась с нулями.
- t= 0,05
Вспомним, что 0,1 соответсвует одному гармоническому колебанию, соответственно 0,05 половина одного гармонического колебания. Сдвигаем эталон на пол периода одного гармонического колебания и он в этом полупериоде складывается с нулями давая соответсвующую половину синусоидального периода. А остальная часть сигнала получается при сложении SIN эталона и смещенного на pi\2 sin что эвляется его протифазой, что в сумме дает "0".
Вот и все. И все правильно работает, мйо совет. Бростье срандартные блоки на костер сделайте генераторы сигналов как импульсных так гармонических вручную. Сделав своими руками все точно уясните. U(t)= A*sin (2pi *omega*T+FI0), Где T по теореме котельникова = i\2Fmax, Fmax=частота дескритизации равная верхней гармонике сигнала.
-
- beginner
- Сообщения: 10
- Зарегистрирован: 11 сен 2010, 17:00
- Версия LabVIEW: 8.5
- Контактная информация:
Re: Как сделать смещение?
Вот, нашел такую Експрес - Delay Values. Сдвигает по кол-ву итераций. Неудобно, но более-менее интуитивно, с небольшой корректировкой коэффициентов задание решено, правда не так, как хотел (не люблю експрес ви). Если бы время немножко больше позволяло, попробовал бы и другие варианты, но к сожалению время поджимает.
Спасибо всем большое за советы и помощь!!!
UPD:
А перейти от стандартных блоков для пока слишком сложно...
Обратная связь через shift register и feedback node работает 100% правильно - это проверено как посредством сравнения с матлабом, так и на реальных устройствах.Задержку - да, зелёную проволочку - нет (она направлена назад и должна нести не предыдущее значение а то же самое).
Попробовал его на виндовом лабвью (на линь так и не нашел). Для задачи управления в реальном времени он, как мне показалось, не подходит, так как он работает как матлаб - отрезками времени, сбрасывая все значения после окончания итерации. Хотя я может и не прав, ибо еще мало с ним поработал. Чуть позже попробую с этим набором разобраться получше.но зачем изобретать simulation toolkit
Немножко муторно будет, как мне кажется, с определением количества необходимых элементов для замены.Дополни массив (предназначеный для смещения) нулями в начале и обрежь на то же количество в конце. Конечно, если я правильно понял задачу.
Я тоже начинаю так думать... Спасибо за совет. Будет время, обязательно поразбираюсь в этой схеме еще, ибо некоторые моменты мне еще не ясны (не зря же в теме для новичков))А VI работает вроде правильно, только нужно обрезать начало + внутри в Shift register завести буфер на время сдвига
Спасибо всем большое за советы и помощь!!!
UPD:
Спасибо, что немного лучше разъяснили графики. Правда, меня в них еще волновало, что дальше график со смещением не продолжался, то есть дальше того значения, что на скринах, он не изменялся, в то время как задающий(без смещения) шел дальше......Вот и все. И все правильно работает, мйо совет. Бростье срандартные блоки на костер сделайте генераторы сигналов как импульсных так гармонических вручную. Сделав своими руками все точно уясните. U(t)= A*sin (2pi *omega*T+FI0), Где T по теореме котельникова = i\2Fmax, Fmax=частота дескритизации равная верхней гармонике сигнала.
А перейти от стандартных блоков для пока слишком сложно...
Мне интересно. Жду)и я выложу свой код
-
- beginner
- Сообщения: 22
- Зарегистрирован: 11 авг 2010, 18:22
- Версия LabVIEW: 10
- Откуда: Москва
- Контактная информация:
Re: Как сделать смещение?
все зависит от варианта исполнения и варианта в голове. Посмотри мой код, там все понятно кто смещяется, а кто стоит.меня в них еще волновало, что дальше график со смещением не продолжался, то есть дальше того значения, что на скринах, он не изменялся, в то время как задающий(без смещения) шел дальше.
Отнюдь. Намного проще работать с нуля, чем исползьвать блоки созданные другими людьми. Помни, сколько людей столько и мнений и вариантов решения тривиальной задачи. "два + два". Кто то решает на яблоках, а кто то на спичках, впрочем кто то на пальцах. Кто то перебирает по одному, кто то по 2, кто то от пяти вычитает и т.п.А перейти от стандартных блоков для пока слишком сложно...
Вот мои исходники.Мне интересно. Жду)
LV 10 LV 9 LV 8
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение