- •Занятие 4. Построение виртуального прибора, реализующего периодический сигнал с шумом
- •4.1. Создание VI – генератора синусоидального сигнала
- •4.2. Исследование биения частот
- •4.3. Исследование влияния шума на периодический сигнал
- •4.4. Запись данных в файл
- •Занятие 5. Ввод и вывод данных
- •5.1. Работа со строковыми переменными
- •5.2. Запись числовых данных
- •5.3. Считывание числовых данных
- •Занятие 6. Реализация прибора свертки функций
- •6.1. Свертка функций
- •6.2. Моделирование виртуального прибора
- •6.3. Исследование работы свертки
- •Занятие 7. Формулы, массивы, циклы. Функция гаусса
- •7.1. Структуры в LabView
- •7.2. Цикл For
- •Шаблон массива
- •Тип элементов
- •Массива не задан
- •7.3. Представление массивов данных
- •7.4. Считывание значений с графика. Узел Property Node
- •Занятие 8. Дифференцирование и интегрирование в labview
- •8.1. Численное дифференцирование
- •8.2. Численное интегрирование
- •Занятие 9. Интерполяция данных
- •9.1. Задание исходного массива
- •9.2. Использование структуры Sequence
- •9.3. Интерполяция полиномом
- •9.4. Интерполяция дробно-рациональной функцией
- •9.5. Сплайн-интерполяция
- •Занятие 10. Быстрое преобразование фурье. Фильтрация шумящих данных
- •10.1. Алгоритм быстрого преобразования Фурье
- •10.2. Фурье-образ шумящего периодического сигнала
- •10.3. Аподизация верхних частот Фурье-разложения
- •10.4. Фильтрация шумящей функции Гаусса
- •Занятие 11. Расчет фракталов. Экранная лупа
- •11.1. Построение фрактальной кривой
- •11.2. Самоподобие фрактала. Экранная лупа
- •Занятие 12. Примеры фильтрации шумящих экспериментальных данных
- •Занятие 13. Обращение свертки. Вычитание аппаратной функции
- •13.1. Свертка функций
- •13.2. Реализация обращения свертки
- •Занятие 14. Моделирование двухстробового интегратора
- •14.1. Принцип двухстробового интегратора
- •14.2. Генерация массива данных нестационарной емкостной спектроскопии
- •14.3. Построение VI, реализующего двухстробовый метод dlts
- •Занятие 15. Встраиваемые платы сбора и обработки информации. Цифровая плата pc-dio-96
- •15.1. Устройства связи с объектом
- •15.2. Конфигурирование платы сбора и обработки информации
- •15.3. Определение области адресов памяти, занимаемой daq-платой
- •15.4. Функциональная схема платы цифрового ввода-вывода pc-dio-96
- •Занятие 16. Пример построения информационно-измерительной системы с использованием технологии виртуальных приборов
- •16.1. Блок-схема установки c-V-измерений
- •16.2. Двоично-десятичная система счисления
- •16.3. Тестирование информационно-измерительной системы
11.1. Построение фрактальной кривой
Типичным примером геометрического фрактала является кривая Коха. Процесс её построения выглядит следующим образом: берётся единичный отрезок, делится на три равные части и средний интервал заменяется равносторонним треугольником без этого сегмента. В результате образуется ломаная, состоящая из четырех звеньев длины 1/3. На следующем шаге операция повторяется для каждого из четырёх получившихся звеньев и т. д. Предельная кривая и есть кривая Коха. Таким образом, кривая Коха состоит из четырёх равных частей, каждая из которых подобна всей кривой с коэффициентом подобия 1/3. На рис. 11.1 приведены 1, 2 и 4 итерации построения кривой Коха.
Обычно для построения фрактальных структур вместо геометрического подхода используют алгебраический способ, а именно, метод “Систем итерируемых функций” (Iterated Functions System – IFS). В наиболее простом виде IFS состоит из аффинных преобразований плоскости:
X
(11.1)
где X0, Y0 – начальные координаты точки, X, Y – конечные координаты, а A, B, C, D, E, F – некие константы.
Создадим виртуальный прибор, который строит кривую Коха на дисплее. Как видно из рис. 11.1, эта кривая имеет четыре части, подобные целой кривой. Для ее построения требуется набор аффинных преобразований координат, состоящий из четырех преобразований:
Константы в (11.2) подобраны так, чтобы расположить фрактал на сетке координат дисплея с разрешением 640 × 350. Это существенно для построения кривой в традиционных языках программирования, когда программист сам формирует попиксельный вывод графика на экран. В то же время в LаbVIEW, где построение осуществляется средствами XY Graph, эти константы следует рассматривать только как удобные масштабные коэффициенты.
Откройте новый виртуальный прибор. Расположите на блок-диаграмме 4 узла Formula Node для каждого из сегментов кривой Коха. Запрограммируйте в них формулы аффинных преобразований координат (11.2).
Добавьте входные переменные (X0 и Y0) и выходные (X и Y). Если нужно, отрегулируйте размеры узлов и выровняйте их с помощью инструментов Align Objects и Distribute Objects в строчке меню.
X = X0/3 + 13.333 Y = Y0/3 + 200
X = X0/6 + 0.289*Y0 + 130 Y = – 0.289*X0 + Y0/6 + 256 (11.2)
X = X0/6 – 0.289*Y0 + 403 Y = 0.289*X0 + Y0/6 + 71
X = X0/3 + 413.333 Y = Y0/3 + 200.
Поместите все узлы Formula Node внутрь цикла For Loop. Этот цикл будет необходим для расчета текущих координат точек. Еще один, внешний цикл, сформированный структурой While Loop, будет задавать количество итераций (т. е. количество изломов). С помощью узла Greater Or Equal? обеспечьте остановку While Loop при достижении заданного числа итераций, которое будет задаваться с лицевой панели управляющ им элементом. Внутри каждой итерации количество циклов N для For Loop, естественно, будет являться функцией номера итерации, точнее N = 4 ^ i.
Расчет фрактала Кох стартует с исходной координаты (X0, Y0) и далее следующие координаты получаются из предыдущих с помощью формул (11.2). Следовательно, в расчете необходимо хранить предыдущие значения, что достигается в LabVIEW использованием сдвиговых регистров (Shift Register). Спозиционируйте курсор точно на границе While Loop, нажмите правую кнопку мыши и выберите Add Shift Register из всплывающего меню. Маленькие квадратики с закрашенным треугольником появляются парой на входе и выходе While Loop, символизируя передачу данных с выхода на вход. Создайте два сдвиговых регистра. Вне While Loop с помощью Initialize Array задайте нулевые исходные значения и подсоедините к сдвиговым регистрам. Внутри While Loop соедините вход первого сдвигового регистра с переменными X0 всех Formula Node, а вход второго – с переменными Y0. Проследите, чтобы на каждом туннеле выполнялось Enable indexing.
На выходе For Loop соберите обратно четыре элемента сегмента линии с помощью Build Array (отдельно для X и Y) и подсоедините к выходу соответствующего сдвигового регистра. В свойствах Build Array нужно выбрать Concatenate Inputs (В этом случае данный узел последовательно соединяет все входные массивы, длина выходного массива увеличивается, а его размерность остается неизменной).
Разместите на лицевой панели дисплей XY Graph. Объедините массивы X и Y с выхода сдвиговых регистров с помощью операции Bundle (палитра Programming >> Cluster, …) и подсоедините ко входу дисплея. Задайте небольшое (3–5) количество итераций. Запустите программу.
Внимание! Количество точек фрактальной кривой очень сильно (экспоненциально) возрастает с увеличением числа итераций (при i = 9 – более 1 млн. точек). Чтобы предотвратить зависание компьютера, выбирайте небольшое количество итераций, соизмеряя его с объемом оперативной памяти и быстродействием вычислительной машины.
Усовершенствуйте внешний вид виртуального прибора. Войдите в свойства XY Graph. На закладке Scales снимите видимые атрибуты X- и Y-осей (Show Scale Label, Show Scale). Здесь же уберите сетку (Grid Style and Colors). При желании смените цвета различных элементов дисплея.