Генератор функций – Использование функционального генератора с опцией формирования сигналов произвольной формы для генерации импульсов напряжения

Генератор функций UNIT | Описание, настройка, характеристики

Что такое генератор функций и чем он отличается от генератора частоты? Давайте как раз об этом и поговорим в нашей статье.

Что такое генератор функций

Не так давно на моем столе появился этот чудо-прибор. Сочетание дизайна и удобства использования очень даже ничего.

Итак, теперь давайте обо всем по порядку, что представляет из себя эта белая коробочка с кнопочками и с небольшим табло? Написано на ней “Function Generator”, то есть, в переводе с англ. “генератор функций”.

Что такое генератор функций? Это по сути источник периодических сигналов и не только, которые могут принимать любую форму и частоту, которую вы им зададите (в пределах рабочего диапазона прибора).

Знаете сколько тысяч баксов стоит такой фаршированный приборчик?)) Поэтому, это название слишком громкое для нашего героя. На самом же деле он представляет из себя просто крутой генератор частоты. Ну раз уж написано на нем, что он генератор функций, пусть так оно и будет.

Виды сигналов

Для простых обывателей и любителей пожарить канифоль, типа меня и вас, реальный генератор функций за +100500 баксов будет нецелесообразным приобретением, а на практике для нас бывает достаточно трех видов сигналов:

это синусоидальный

треугольный

и прямоугольный сигнал

Их более чем достаточно на все случаи жизни. В народе их называют синус, треугольник и прямоугольник, которые без проблем может выдать наш герой.

Как формировать сигналы

Для того, чтобы задать амплитуду сигнала, мы крутим крутилку “AMPLITUDE”. Здесь под этим словом понимается двойная амплитуда или как его еще называют “размах сигнала” или “амплитуда от пика до пика”.

Давайте зададим сигнал размахом в 10 В и частотой в 2 МГц. Для наблюдения сигнала нам понадобится осциллограф. Так как у меня есть цифровой осциллограф OWON SDS6062, поэтому я буду делать скрины с помощью него:

Итак, что имеем на генераторе:

Что имеем на осциллографе:

синусоиадльный сигнал на осциллографе

Ништяк)

Меняем форму сигнала на пилу:

треугольный сигнал

Нормальная пила.

Смотрим прямоугольный сигнал:

Генератор функций UNIT

Очень даже ничего 😉

Описание разъемов и кнопок

На панели такого прибора можно увидеть три заветные кнопочки переключения сигналов:

Слева на генераторе можно увидеть вот такие кнопки

Под внешним счетчиком здесь имеется ввиду какой-либо периодический сигнал с какого-нибудь генератора частоты либо схемы. Подавая такой сигнал на разъем нашего генератора функций, мы с легкостью можем определить частоту неизвестного сигнала вплоть до 10 Мегагерц. То есть в данном случае генератор функций выполняет роль

частотомера.

Как вы уже заметили, на лицевой панели также имеются еще три разъема, кроме  разъема для счета импульсов:

VCF – Voltage Controlled Frequency. По нашему ГУН. Расшифровывается как Генератор Управляемый Напряжением. Само название говорит о том, что мы можем менять частоту сигнала с генератора функций, подавая на этот разъем какое-либо напряжение. В зависимости от того, какое напряжение мы подаем, такая и будет частота 😉 Например, подавая переменное напряжение на такой разъем, мы можем на выходе генератора функций получить  сигнал с переменной частотой.

TTL OUT.  ТТЛ – Транзисторно-Транзисторная-Логика. OUT – выход. Этот выход предназначен для тактирования логических микросхем, построенных на так называемой транзисторно-транзисторной логике. То есть это логические элементы, которые в своем составе имеют только биполярные транзисторы и резисторы. Такие микросхемы делают в основном на питание +5 В.

Логический ноль – это уровень напряжения от 0 и до +0,5 В. Уровень логической единички от 2,4 и до +5 В. Поэтому, с этого выхода мы получаем прямоугольный периодический сигнал с чередующимися нулями и единицами: 0101010101… Частоту такого сигнала выставляем с помощью крутилки и кнопок выбора диапазона.

OUTPUT. Выход с генератора. Именно с этого разъема мы и получаем необходимый нам сигнал с генератора функций.

Также небольшой интерес представляют из себя эти две кнопочки:

Написано “attention”, что значит “внимание”. На самом деле там должно быть написано “attenuator”. Аттенюатор – слово не наше, означает как “ослабить, смягчить”. Видать, китайцы сэкономили на переводчике с китайского на английский, так как и “Амплитуда” на генераторе тоже написана с косяками ))

Итак, что за кнопочки -20dB и -40dB? dB – это децибелы (как-нибудь надо накарябать про них статью). А пока вот вам ссылочка на онлайн-калькулятор. Я за вас уже все посчитал. -20dB это значит, что мы можем ослабить выдаваемый генератором сигнал в 10 раз. -40dB – в 100 раз. А если нажмем сразу на 2 кнопочки разом, то у нас в сумме получится -60dB. Следовательно, мы можем ослабить сигнал в 1000 раз.

Повыше также еще есть кнопочка -10dB, которая ослабляет сигнал в 3 раза с копейками.

И остались у нас на разборе еще пара крутилок с кнопками

Кнопочки под ними задействуют соответствующую крутилку при нажатии.

R/PRump/Pulse – Уклон/Импульс.

С помощью этой крутилки мы можем чуток поиграться с формой сигнала, задавая уклон. Вот некоторые осциллограммы синусоиды и пилы, которые я немного видоизменил с помощью этой крутилки:

Крайнее левое положение крутилки

Генератор функций UNIT

Крайнее правое положение крутилки

Генератор функций UNIT

Крутнул чуть-чуть:

Генератор функций UNIT

Крайнее левое положение крутилки

Генератор функций UNIT

Крайнее правое положение крутилки

Генератор функций UNIT

Крутанул чуток:

Генератор функций UNIT

У прямоугольного сигнала с помощью этой крутилки мы можем менять ширину импульсов, тем самым меняя скважность сигнала, а следовательно и коэффициент заполнения.

Генератор функций UNIT

Крайнее левое положение крутилки

Генератор функций UNIT

Крайнее правое.

Генератор функций UNIT

Крутилка DC LEVEL. Direct Current Level. В переводе с англ. уровень постоянного тока. С помощью этой крутилки мы можем добавлять в сигнал постоянную составляющую, то есть добавлять постоянное напряжение или как говорится, “поднять или опустить сигнал над уровнем моря”. В данном случае на уровнем земли. А как вы помните, земля у нас с потенциалом 0 В.

Если показать рисунком, то получается вот так:

В первом случае мы к синусоиде прибавляем положительное напряжение, а во втором случае – отрицательное.

Давайте смешаем синусоиду с постоянным напряжением, добавляя или убавляя его с помощью крутилки DC LEVEL:

Прибавил постоянное напряжение к синусоидальному сигналу:

Генератор функций UNIT

А здесь я смешал синусоиду с отрицательным постоянным напряжением:

Генератор функций UNIT

В этих случая главное не забыть поставить в настройках осциллографа “измерение постоянного тока”, иначе у вас сигнал не сдвинется.

При желании можно также тактировать МК, задав 5 В и добавив постоянного напряжения с помощью крутилки DC, хотя, как я уже писал, можно подцепить МК  к выходу “TTL OUT” генератора функций.

выход TTL генератор функций

Генератор функций в роли частотомера

Давайте проверим, как он считает частоту. Подаю на него частоту в 15 Килогерц с другого китайского генератора. Смотрим, что насчитал наш генератор функций (на показания справа не обращайте внимание):

Ровно 15 КГц.

Характеристика генератора функций

Мой генератор выдает максимум частоты в 2,49 МГц и размах напряжения в 22,2 В. В принципе, для меня этого вполне будет достаточно, как для начинающего электронщика. Вот к нему инструкция на русском. Также прилагаю скриншот его характеристик:

генератор функций характеристика

Заключение

Как я уже сказал, взял я его на Алике в день распродажи 11 ноября и он мне обошелся в 8700 деревянных, при цене типа в 9600, но по крайней мере дешевле не нашел. Глянуть на Алике этот прибор и сравнить цены вы можете по этой ссылке. 

Где можно применить этот прибор?  В основном везде, где надо подать тестовый сигнал и посмотреть, что получится на выходе. Это усилительная аудиотехника, различные фильтры, резонансные контура и тд.

А вот также видеоролик этого генератора от ЧипаДипа

ПРОСТОЙ ГЕНЕРАТОР ФУНКЦИЙ | Техника и Программы

Л. АНУФРИЕВ (СССР)

Предлагаемый генератор, несмотря на простоту схемного решения, обладает разнообразными функциональными возможностями и хорошими характеристиками генерируемых сигналов. Он генерирует прямоугольные, треугольные и синусоидальные сигналы в диапазоне частот 0,6 Гц . . . 300 кГц. Весь диапазон разбит на пять поддиапазонов: 0,6 … 30 Гц, 6 … 300 Гц, 60 Гц… 3 кГц, 0,6 … 30 кГц и 6… 300 кГц. В любой точке диапазона имеется возможность изменять частоту на ±10% от установленной на шкале с помощью ручки „Расстройка”. Прибор может работать и как свип-генератор. Полоса качания частоты может плавно регулироваться от 0 до значения полосы каждого поддиапазона. Для управления ЧМ используется внешний источник сигнала. Выходные сигналы прямоугольной и треугольной формы постоянны по амплитуде, амплитуда синусоидального сигнала может регулироваться. Выходные напряжения во всем диапазоне частот практически постоянны. Прямоугольный сигнал соответствует параметрам ТТЛ логических схем (нижний уровень не более 0,3 В, верхний — не менее 2,4 В). Напряжение сигнала треугольной формы имеет размах 5 В (1 … 6 В), синусоидальной — около 1 В (300 мВ эфф.). Мощность, потребляемая генератором по постоянному току, 270 мВт (9 В, 30 мА). Прибор питается от сети переменного тока через встроенный стабилизированный выпрямитель. В функциональном генераторе для генерирования импульсов прямоугольной и треугольной формы используется замкнутая релаксационная система, состоящая из интегратора и компаратора, роль которого в данной схеме выполняет триггер. Напряжение синусоидальной формы получается преобразованием треугольного сигнала нелинейным усилителем.

Принципиальная схема генератора приведена на рис. 1. Он собран на двух логических интегральных микросхемах К155ЛА8 и К155ЛАЗ и девяти транзисторах. Интегратор выполнен на инверторе D1.1 и транзисторе V6; схема управления интегратором на транзисторах VI—V5. Транзистор V7 и инвертор D1.2 являются буферным эмитгерным повторителем. Преобразователь напряжения треугольной формы в синусоидальную собран на инверторе D1.3 н диодах V8, V9; триггер – на инверторах D2.1 и D2.2. Инвертор D2.3 является буферным каскадом. Инверторы D1.4 и D2.4 совместно с транзистором VII выполняют роль стабилизаторов напряжения питания интегральных микросхем. Данные схемы стабилизации не только обеспечивают дополнительную стабилизацию питающего напряжения, но и обеспечивают температурную стабилизацию режимов работы инверторов микросхем, что особенно важно для микросхемы D1, работающей в линейном режиме. Питающее напряжение микросхемы D1 уменьшено до 3,7 В, что позволило увеличить входное сопротивление инверторов, работающих в режиме линейных усилителей. Для улучшения режима по постоянному току транзисторов V4-V6 потенциал общего провода микросхемы D1 поднят до значения падения напряжения на диоде VI0 (около 0,7 В). Питание микросхемы D2 стандартное + 5 В.

Генератор работает следующим образом. Предположим, что напряжение на выходе инвертора D2.2 имеет высокий уровень. При этом правый по схеме транзистор переключателя тока V3 закрыт, а левый – открыт. Положительный ток от источника тока, собранного на транзисторе V2, поступает на вход интегратора (база транзистора V6) и начинает заряжать одну из емкостей С2—С6, например Сб прн положении переключателя, указанного на схеме. Напряжение на выходе интегратора (на нагрузке R12) начинает линейно уменьшаться. Через транзисторы V4 н V5, работающие в режиме инвертора тока, течет небольшой и постоянный ток смещения, определяемый резистором R10, который задает режим работы по постоянному току транзистору V6. Напряжение с выхода интегратора подается на вход триггера (верхний по схеме вход инвертора D2.1). Как только напряжение станет ниже порога срабатывания инвертора D2.1, триггер опрокидывается и на выходе инвертора D2.2 уровень становится низким. Напряжение этого уровня через делитель на резисторах R27 и R29 подается на второй вход инвертора D2.1 и фиксирует данное состояние триггера. Одновременно напряжение низкого уровня через делитель на резисторах R30, R28 подается на правый транзистор переключателя тока V3 и открывает его. При этом левый по схеме транзистор V3 закрывается, так как напряжение на его базе, подаваемое с делителя на резисторах R9 и R8, выше, чем на базе правого. В таком

Рис. 1

состоянии ток от источника тока на транзисторе V2 поступает на коллектор и базу V4 и базу V5. Работа инвертора тока основана на том, что если считать ток баз транзисторов V4 и V5 Достаточно малым, то на базе транзистора V4 создается такое напряжение, при котором весь ток проходит через коллектор транзистора V4. Если транзисторы V4 и V5 идентичны, то поскольку базы их соединены, то ток V5 будет равен току V4. Потенциометр R11 позволяет выравнивать токи. Ток, подаваемый на вход транзистора V6 (вход интегратора) с коллектора транзистора V5, имеет обратный знак, и, следовательно, конденсатор С6 будет разряжаться. Напряжение на выходе интегратора будет нарастать. Поскольку токи разряда и заряда равны, то скорости изменения напряжения на выходе интегратора одинаковы и отличаются только знаком, а напряжение треугольной формы симметрично. При достижении напряжения на выходе интегратора уровня 6,5 В открывается диод V13 и ток с выхода интегратора начинает поступать на второй вход D2.1 через переход эмиттер – коллектор транзистора VI2. При достижении потенциала иа входе 2 D2.1, соответствующего порогу срабатывания, триггер опрокидывается, и на выходе D2.2 уровень напряжения снова становится высоким В схеме возникают незатухающие колебания треугольной и прямоугольной формы. Прямоугольные колебания подаются на выход через инвертор D2.3. Треугольное напряжение снимается с выхода интегратора через буферный эмиттерный повторитель, собранный на транзисторе V7, и развязывающий регистр R20. Инвертор D1.2 в данном случае выполняет роль источника тока в цепи эмиттера транзистора V7, что обеспечивает высокую линейность и большой динамический диапазон буферного каскада. Изменение частоты колебаний внутри поддиапазона осуществляется изменением тока коллектора транзистора V2, а частоту поддиапазона – переключением емкостей С2—С6.

Управляемый источник тока собран на транзисторах VI и V2 по схеме составного эмиттерного повторителя, что позволяет получить большое входное сопротивление. Использование транзисторов с разной проводимостью существенно уменьшает температурный дрейф на эмиттере транзистора V2 по отношению к базе транзистора VI, так как значения потенциалов участков база – эмиттер транзисторов, температурный дрейф которых около 2 мВ на градус, являющийся основным источником погрешности, вычитаются. Напряжение управления снимается с потенциометра R3 и через резистор R2 подается на базу транзистора VI. Это напряжение задает эмиттерный ток транзистора V2. Если коэффициент усиления по току достаточно велик, то его коллекторный ток, являющийся выходным током источника тока, равен напряжению управления, деленному на R6+R 7. (Напряжение управления отсчитывается от уровня +9 В.) Если соотношение сопротивлений резисторов выбрать так, что изменение сопротивления резистора R6 будет менять общую сумму на ±10%, то и частота генератора будет меняться также на ±10%. Таким способом осуществляется расстройка частоты в любой точке основной шкалы генератора. Величина расстройки отсчитывается в процентах по лимбу переменного резистора R6. Частотная модуляция генератора осуществляется подачей на вход XI (вход ЧМ) модулирующего напряжения. Складываясь с напряжением управления, модулирующий сигнал соответствующим образом изменяет ток источника тока и, следовательно, частоту генератора. Так как постоянная составляющая модулирующей Частоты не проходит на базу транзистора VI, то качание частоты осуществляется симметрично относительно частоты, установленной по лимбу потенциометра R3 (при условии, что модулирующая частота имеет ось симметрии, что, как правило, всегда выполняется). Глубина модуляции ЧМ в пределах от 0 до максимального значения поддиапазона (приблизительно в 50 раз) изменяется потенциометром R1.

Функциональный преобразователь колебаний треугольной формы в синусоидальную представляет собой инвертирующий усилитель с нелинейной обратной связью. Через резистор R14 с выхода интегратора на вход усилителя поступает симметричное треугольное напряжение. Пока разность между входом и выходом по напряжению меньше порога открывания диодов V8 и V9 (примерно 0,5 В), он работает как линейный усилитель Как только напряжение на диодах станет больше 0,5 В, они начинают открываться и шунтировать резисторы R17 и R18 и коэффициент усиления уменьшается. Так как характеристика диода при малых значениях тока близка к логарифмической, а форма синусоидальной кривой в ее верхней и нижней частях также близка к логарифмической, то и напряжение на выходе усилителя мало отличается от синусоидального. Необходимо отметить, что коэффициент гармоник синусоидального сигнала зависит от режима работы усилителя, коэффициент гармоник становится минимальным прн использовании в режиме ограничения логарифмического участка ВАХ диодов. На высших частотах диапазона на искажение формы синусоидального сигнала начинает сказываться быстродействие диодов. У диодов Д105 оказалось довольно большое сопротивление в открытом состоянии. Диоды Д223А имели недостаточное быстродействие на частотах, близких к 300 кГц. Наиболее подходящими по форме ВАХ и остальным характеристикам оказались диоды КД522А. Режим работы функционального преобразователя устанавливается резисторами R16 и R18. Первым подстраивают симметрию ограничения, вторым — коэффициент усиления усилителя, или, что то же самое, уровень ограничения треугольного напряжения Амплитуда синусоидального сигнала регулируется переменным резистором R21 Его максимальный размах составляет примерно 1 В (300 мВ эфф ). Желательно использовать потенциометр с зависимостью типа В, что значительно облегчает установку малых значений выходного напряжения.

Питается функциональный генератор от встроенного стабилизированного блока питания (рис. 2). Особенностью блока питания является то, что сетевой трансформатор работает в режиме трансформатора тока, значение которого нормируется емкостью С1+С2. Это позволяет применить трансформатор с максимально допустимым входным напряжением около 70 В и, следовательно, существенно снизить число витков первичной обмотки трансформатора и его габариты. Резистор R1 служит для разряда конденсаторов С1 и С2 прн отключении прибора от сети, а резистор R2 ограничивает ток включения. Использование балластного конденсатора вместо резистора имеет ряд преимуществ. Конденсатор практически не расходует активную мощность и, следовательно, не нагревается Он лучше стабили-

зирует ток нагрузки и тем самым улучшает коэффициент стабилизации параметрического стабилизатора, образованного выходным сопротивлением трансформатора и стабилитроном V5. При коротком замыкании выхода стабилизатора ток нарастает меньше, чем при использовании балластного резистора. Стабилитрон V7 и транзистор

V6, работающие з режиме источника тока, образуют источник опорного напряжения. Особенностью схемы источника тока является наличие резистора R4. Если отношение R3 и R4 сделать равным отношению дифференциального сопротивления диода V8 к сопротивлению R5, то при изменении напряжения на выходе выпрямителя разность потенциалов участка эмиттер — база транзистора V6 не меняется и, следовательно, ток источника тока становится неизменным Температурная зависимость снижена за счет частичной компенсации дрейфа напряжения эмиттер – база транзистора V6 диодом V8. Остальная часть схемы обычная, не имеет особенностей. Диод V10, обеспечивает температурную компенсацию напряжения эмиттер — база транзистора V9 Источник питания не боится короткого замыкания нагрузки и ие требует специальной защиты.

Конструкция генератора приведена на рис. 3, а—б. Как видно из рисунка, конструкция блока состоит из одинаковых (по размерам) передней и задней панелей, соединенных между собой с помощью двух стяжек из Т-образного алюминиевого профиля, и двух одинаковых крышек. Панели и крышки изготовлены из алюминия. Перед-

Рис. 4

няя панель оклеена слоистым декоративным пластиком с помощью эпоксидного клея. На передней панели укреплены только фиксаторы положения лимбов переменных сопротивлений. Все остальные элементы управления – переключатель диапазонов, переменные сопротивления — укреплены на вспомогательной панели, которая крепится к монтажной плате винтами с помощью уголков. Аналогична конструкция крепления выключателя сети, предохранителя и сетевого разъема, выходящих на заднюю панель. Передняя и задняя панели крепятся к стяжкам заклепками с помощью уголков.

Монтаж генератора и блока питания выполнен на отдельных платах из фольгированного стеклотекстолита толщиной 2 мм. Расположение деталей и монтажные схемы плат приведены на рис. 4. Можно использовать и другой не фолироз энный изоляционный материал, так как фольга используется только как общий провод. В местах расположения деталей она удалена, а монтаж ведется неизолированным луженым проводом диаметром 0,3 мм с использованием изоляционного кембрика в местах пересечений.

В генераторе использованы следующие детали: постоянные резисторы типа МЛТ, МТ, конденсаторы К50-16, К50-6, МБМ, КМ-4, КТ; подстроечные резисторы типа СПЗ-27а; переменные резисторы R1 и R21 типа СПЗ-З аМ, R3 – ПТП-11, R6 — ППЗ-41; тумблер сети — МТ-1; переключатель диапазона S1 галетный типа5П2НПМ; трансформатор Т1 унифицированный типа БТК (магнитопровод ПЛОХ 15,обмотка I имеет 2600 витков, обмотка II —            1300 витков провода ПЭЛ-2 0,08 мм).

Налаживание прибора начинается с проверки блока питания. Подключив сеть и .отключив выход +9 В, проверяют напряжение на конденсаторе СЗ. Оно должно быть равно 13 … 15 В, а ток через стабилитрон V5 при напряжении сети 220 В не менее 36 мА. Далее проверяют выходное напряжение. При необходимости его подстраивают в сторону уменьшения – заменой диода VI0 с меньшим падением напряжения, например КД522А, или заменой стабилитрона V7, если напряжение меньше заданного, то установкой резистора небольшого сопротивления последовательно с диодом VI0. Затем проверяют блок под нагрузкой, подключив на выход резистор 300 Ом. Выходное напряжение должно уменьшиться не более чем на 0,1 В, а на стабилитроне V5 не более чем на 1 В. Настройку генератора начинают с подбора сопротивлений резисторов R22 и R24. Первым устанавливают напряжение на контакте 14 D1, равным 4,5 В, вторым – на контакте 14 D2 – 5 В. Для дальнейшей настройки необходим осциллограф, например Н313. Переменный резистор R2 устанавливают в положение, при котором частота максимальна (нижнее по схеме), а переключатель S1 – в любое положение, но лучше начинать проверку на средних частотах, например, соответствующих подключенному конденсатору С4. Осциллограф подключают к гнезду ХЗ и проверяют наличие треугольных колебаний. Затем осциллограф подключают к гнезду Х2 и подстройкой резистора R11 добиваются симметрии прямоугольного напряжения (равенства по длительности положительного и отрицательного полупериодов). Резистор R2 устанавливают в положение, соответствующее минимальной частоте диапазона (крайнее верхнее по схеме), и добиваются симметрии сигнала подбором резистора R10. Следует отметить, что сопротивление резистора R10, определяющего ток смещения транзистора V6, может очень сильно отличаться от указанного на схеме (7,5 МОм), аз некоторых случаях резистор R10 может оказаться ненужным. Регулировку функционального преобразователя осуществляют резисторами R16 и R18, контролируя форму сигналов на гнезде Х4. Резистором R16 устанавливают симметрию ограничения, а резистором R18 – порог ограничения по наилучшей форме синусоидального сигнала. Далее переключатель диапазонов S1 устанавливают в положение, при котором подключен конденсатор С2, а резистор R3 — з крайнее нижнее, и проверяют частоту сигнала. Переменным резистором R6 устанавливают ее значение, равное 30 Гц, и отмечают на лимбе „Расстройка” 0. Вращая ручку „Расстройка” по часовой и против часовой стрелки, проверяют величину изменения частоты. Запаса регулировки потенциометра R6 должно хватать для изменения частоты не менее чем на ±10%. Если регулировки в одну из сторон недостаточно, то необходимо несколько изменить значение резистора R 7. После этого проверяют работу генератора на остальных поддиапазонах. Совмещения шкал поддиапазонов добиваются подстройкой емкостей СЗ~С6 на наивысшей частоте поддиапазона. Работу генератора в режиме ЧМ удобно проверять по осциллографу, подключив его к выходу Х2 в режиме ждущей развертки при внутренней синхронизации. При подаче на вход ЧМ сигнала (например, 50 Гц) наблюдается расплывчатый задний фронт прямоугольного сигнала, величина которого пропорциональна амплитуде модуляционного сигнала. Необходимо отметить, что сумма амплитуды модуляционного сигнала и сигнала управления не должна превышать пределы изменения сигнала управления, снимаемого с потенциометра R3, иначе генератор „выйдет” из линейного режима. Чем больше частотная девиация, тем меньше диапазон установки центральной частоты. При максимальной девиации лимб изменения частоты должен быть установлен в среднее положение.

Источник: Конструкции советских и чехословацких радиолюбителей: Сб. статей. – Кн. 3. – М.: Радио и связь, 1987. — 144 с.: ил. – (Массовая радиобиблиотека; Вып. 1113)

Введение в генераторы Python — Еще один блог веб разработчика

Оглавление

Генераторы – это функции, которые можно приостанавливать и возобновлять во время их выполнения, при этом они возвращают объект, который можно итерировать. В отличие от списков, они ленивы и поэтому работают с текущим элемент только по запросу. Таким образом, они намного эффективнее используют память при работе с большими наборами данных. В этой статье подробно описывается, как создавать функции генератор и выражения генератор, а также рассматривается пример их использования.

Функции генератора

Чтобы создать генератор, необходимо определить функцию, как обычно, но использовать yield вместо return, указывая интерпретатору, что эту функцию следует рассматривать как итератор:

def countdown(num):
    print('Starting')
    while num > 0:
        yield num
        num -= 1

Оператор yield приостанавливает функцию и сохраняет локальное состояние, чтобы его можно было возобновить с того места, где оно было остановлено.

Что происходит, когда вы вызываете эту функцию?

>>> def countdown(num):
...     print('Starting')
...     while num > 0:
...         yield num
...         num -= 1
...
>>> val = countdown(5)
>>> val
<generator object countdown at 0x10213aee8>

Вызов функции не выполняет ее. Мы знаем это, потому что строка Starting не печатается. Вместо этого функция возвращает объект-генератор, который используется для управления выполнением.

Объекты генератора выполняются при вызове next():

>>> next(val)
Starting
5

При первом вызове next() выполнение начинается с начала тела функции и продолжается до следующего оператора yield, где возвращается значение справа от оператора, последующие вызовы next() продолжаются с оператора yield до конец функции, затем новый обход цикла и продолжение с начала тела функции, пока не будет вызван другой выход. Если yield не вызывается (что в нашем случае означает, что условие while не отрабатывается, потому что num <= 0), возникает исключение StopIteration:

>>> next(val)
4
>>> next(val)
3
>>> next(val)
2
>>> next(val)
1
>>> next(val)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

Выражения-генератор (Generator Expressions)

Как и списки, генераторы также могут быть написаны таким же образом, за исключением того, что они возвращают объект генератора, а не список:

>>> my_list = ['a', 'b', 'c', 'd']
>>> gen_obj = (x for x in my_list)
>>> for val in gen_obj:
...     print(val)
...
a
b
c
d

Обратите внимание на круглые скобки по обеим сторонам второй строки, обозначающие выражение генератора, которое, по большей части, делает то же самое, что и генератор списка, но делает это лениво (то есть в момент запроса объекта):

>>> import sys
>>> g = (i * 2 for i in range(10000) if i % 3 == 0 or i % 5 == 0)
>>> print(sys.getsizeof(g))
72
>>> l = [i * 2 for i in range(10000) if i % 3 == 0 or i % 5 == 0]
>>> print(sys.getsizeof(l))
38216

Будьте внимательны, чтобы не перепутать синтаксис генератор списка с выражением генератора – [] vs () – поскольку выражения генератора могут работать медленнее, чем генератор списка (при не хватки памяти):

>>> import cProfile
>>> cProfile.run('sum((i * 2 for i in range(10000000) if i % 3 == 0 or i % 5 == 0))')
         4666672 function calls in 3.531 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
  4666668    2.936    0.000    2.936    0.000 <string>:1(<genexpr>)
        1    0.001    0.001    3.529    3.529 <string>:1(<module>)
        1    0.002    0.002    3.531    3.531 {built-in method exec}
        1    0.592    0.592    3.528    3.528 {built-in method sum}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}


>>> cProfile.run('sum([i * 2 for i in range(10000000) if i % 3 == 0 or i % 5 == 0])')
         5 function calls in 3.054 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    2.725    2.725    2.725    2.725 <string>:1(<listcomp>)
        1    0.078    0.078    3.054    3.054 <string>:1(<module>)
        1    0.000    0.000    3.054    3.054 {built-in method exec}
        1    0.251    0.251    0.251    0.251 {built-in method sum}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Это особенно заметно в приведенном выше примере.

ПРИМЕЧАНИЕ. Имейте в виду, что выражения генератора значительно быстрее, когда размер ваших данных превышает доступную память.

Случаи применения

Генераторы идеально подходят для чтения большого количества больших файлов, поскольку они выдают данные по одному фрагменту за раз, независимо от размера входного потока. Они также могут привести к более чистому коду путем разделения процесса итерации на более мелкие компоненты.

Пример 1

def emit_lines(pattern=None):
    lines = []
    for dir_path, dir_names, file_names in os.walk('test/'):
        for file_name in file_names:
            if file_name.endswith('.py'):
                for line in open(os.path.join(dir_path, file_name)):
                    if pattern in line:
                        lines.append(line)
    return lines

Эта функция просматривает набор файлов в указанном каталоге. Она открывает каждый файл и затем просматривает каждую строку, чтобы проверить соответствие шаблону.

Это прекрасно работает с небольшим количеством небольших файлов. Но что, если мы имеем дело с очень большими файлами? А что, если их много? К счастью, функция Python open() достаточно эффективна и не загружает весь файл в память. Но что, если наш список совпадений намного превышает доступную память на нашей машине?

Таким образом, вместо обработки нехватки места (при больших списках) и времени (почти бесконечный объем потока данных) при обработке больших объемов данных генераторы являются идеальным решением для использования, поскольку они выдают данные по одному за раз (вместо создание промежуточных списков).

Давайте посмотрим на версию вышеупомянутой проблемы для генератора и попытаемся понять, почему генераторы подходят для таких случаев использования с использованием конвейеров обработки.

Мы разделили весь наш процесс на три разных компонента:

  • Генерация множества имен файлов
  • Генерация всех строк из всех файлов
  • Фильтрация строк на основе сопоставления с образцом
def generate_filenames():
    """
    generates a sequence of opened files
    matching a specific extension
    """
    for dir_path, dir_names, file_names in os.walk('test/'):
        for file_name in file_names:
            if file_name.endswith('.py'):
                yield open(os.path.join(dir_path, file_name))

def cat_files(files):
    """
    takes in an iterable of filenames
    """
    for fname in files:
        for line in fname:
            yield line

def grep_files(lines, pattern=None):
    """
    takes in an iterable of lines
    """
    for line in lines:
        if pattern in line:
            yield line


py_files = generate_filenames()
py_file = cat_files(py_files)
lines = grep_files(py_file, 'python')
for line in lines:
    print (line)

В приведенном выше фрагменте мы не используем никаких дополнительных переменных для формирования списка строк, вместо этого мы создаем конвейер, который подает свои компоненты через процесс итерации по одному элементу за раз. grep_files принимает объект-генератор всех строк файлов *.py. Точно так же cat_file вставляет в объект генератора все имена файлов в каталоге. Таким образом весь конвейер склеивается с помощью итераций.

Пример 2

Генераторы отлично работают и для рекурсивного парсинга веб-страниц:

import requests
import re


def get_pages(link):
    links_to_visit = []
    links_to_visit.append(link)
    while links_to_visit:
        current_link = links_to_visit.pop(0)
        page = requests.get(current_link)
        for url in re.findall('<a href="([^"]+)">', str(page.content)):
            if url[0] == '/':
                url = current_link + url[1:]
            pattern = re.compile('https?')
            if pattern.match(url):
                links_to_visit.append(url)
        yield current_link


webpage = get_pages('http://sample.com')
for result in webpage:
    print(result)

Здесь мы просто выбираем по одной странице за раз, а затем выполняем какое-то действие на странице. Как бы это выглядело без генератора? Либо выборка и обработка должны происходить в одной и той же функции (что приводит к высокосвязанному коду, который трудно протестировать), либо нам нужно получить все ссылки перед обработкой одной страницы.

Заключение

Генераторы позволяют нам запрашивать значения по мере необходимости, делая наши приложения более эффективными в использовании памяти и идеально подходящими для бесконечных потоков данных. Они также могут быть использованы для рефакторинга обработки из циклов, что приводит к более чистому, разъединенному коду. Если вы хотите увидеть больше примеров, ознакомьтесь с Generator Tricks for Systems Programmers и Iterator Chains as Pythonic Data Processing Pipelines.

Оригинальная статья:  Real Python  Introduction to Python Generators

Была ли вам полезна эта статья?

[3 / 3.7]

Как создать генератор функций

Администратор

Генератор функций является необходимым элементом электрического испытательного оборудования, которое используется для  генерации разнообразных стабильных сигналов. Большинство генераторов функций способны создавать квадратные, треугольные, синусоидальные и даже пилообразные сигналы на разных частотах. Построение собственного генератора функций удивит вас своей простотой и относительно невысокой стоимостью.
 
Определение форм генерации

Существует много разных типов сигналов, и первым шагом построения любого генератора функций является выбор форм сигнала, который вы хотите сгенерировать. Все генераторы функций должны иметь возможность генерировать, по крайней мере, прямоугольную и синусоидальную волны. Тем не менее, вы можете решить, будут ли вам доступны варианты пульса, треугольника, пилообразного, рампы или даже белого шума. Чтобы решить, рассмотрите возможность выбора доступных генераторов функций. Генератор функций, построенный с помощью этого руководства, генерирует квадратные, синусоидальные и треугольные формы сигналов.

Форма сердечника

Почти все генераторы функций работают, генерируя основной сигнал, а затем передают его через множество формирователей волн. В этом примере основной сигнал генерируется с использованием простого релаксационного осциллятора, вариации на триггер Шмидта. Вы можете построить это с использованием одного операционного усилителя, предпочтительно высококачественной модели, такой как TL072. Подключите выход усилителя к неинвертирующему входу через резистор положительной обратной связи 100K. Также подключите неинвертирующий вход к земле через резистор 1M. Отрицательная обратная связь может быть создана путем присоединения потенциометра 1M к последовательному резистору 10K, а затем размещения этой последовательности между выходным сигналом операционного усилителя и его инвертирующим входом. Инвертирующий вход также должен быть подключен к земле через конденсатор 0,01 мкФ.

Буферизация прямоугольных и треугольных сигналов

Выход релаксационного генератора должен иметь форму квадратной волны, частота которой может быть изменена путем коррекции положения потенциометра. Чтобы подготовить эту прямоугольную волну, используйте инвертирующий усилитель. Более дешевый операционный усилитель, такой как LM324, можно было бы использовать, чтобы сэкономить деньги на этом этапе, но лучше всего использовать, по возможности,  высококачественные материалы. Чтобы построить инвертирующий усилитель, запустите выход релаксационного генератора через резистор (R1) и инвертирующий вход операционного усилителя. Неинвертирующий вход должен быть закорочен непосредственно на землю. Отправлять отрицательную обратную связь с выхода ОУ через другой резистор (R2) и на инвертирующий вход. Соотношение между R1 и R2 определяет коэффициент усиления сигнала. Например, выбор 10K и резисторов 22K усилит сигнал в 2,2 раза. Подумайте о внедрении триммера в пути обратной связи для обеспечения точного контроля коэффициента усиления.

Аналогично извлекается форма треугольника, которая возникает рядом с конденсатором в релаксационном генераторе. В этом случае, однако, вы будете использовать неинвертирующий усилитель. Чтобы построить это, запустите треугольную форму сигнала, найденную с одной стороны конденсатора, непосредственно в неинвертирующий вход ОУ. Инвертирующий вход должен идти на землю через R1, а также подключаться к выходу ОУ через R2. Опять же, соотношение между R1 и R2 определяет коэффициент усиления. Используйте триммеры, чтобы пики треугольника и квадратные формы были одинаковыми, предпочтительно около +/- 5V.

Создание синусоидальной волны

Для преобразования треугольной волны в синусоидальную волну необходим операционный усилитель сопротивления или ОТА. LM13700 является примером такой ИС. Чтобы использовать этот чип, запустите усиленный сигнал треугольника через потенциометр 100K и резистор 22K в контакт 3 LM13700. Удлинитель смещения, подключенный к положительному и отрицательному напряжениям, должен также подаваться на контакт 3. Затем подключите контакт 3 к выходу 4 через резистор 1K. Контакт 4 должен быть подведен к земле.
Чтобы настроить смещение синуса, запустите 9V через потенциометр 1M в контакт 1 OTA. Более того, контакт 8 должен подключаться к -9V через резистор 4.7K. Наконец, создайте делитель напряжения между 9 В и землей, используя резистор 470К и 82К. Выход делителя напряжения подключается к выходу 5 OTA. Конечный выход синусоидального генератора находится на контакте 8 на OTA.

Обеспечение мощности

Последним шагом в этом проекте является обеспечение питания. Самый безопасный способ сделать это — использовать источник питания 18 В. Создайте сбалансированный делитель напряжения, используя два резистора 10K для установки плавающего грунта на 9V. С плавающей площадки теперь вы можете получить доступ + 9В и -9В. Обязательно используйте цифровой мультиметр, чтобы проверить правильность работы питания, прежде чем подключать его к цепи.

  Как купить генератор функций в строительном магазине

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

Теги: генератор функций


РадиоКот :: Простой аналоговый функциональный генератор (0,1 Гц

РадиоКот >Схемы >Аналоговые схемы >Генераторы >

Простой аналоговый функциональный генератор (0,1 Гц — 8 МГц)

           Лет 10-15 назад у радиолюбителей заслуженной популярностью пользовалась микросхема MAX038, на основе которой можно было собрать несложный функциональный генератор, перекрывающий полосу частот 0,1 Гц – 20 МГц. Правда цена микросхемы сильно кусалась, а в последнее время достать MAX038 стало практически невозможно. Такая вот странная политика у производителя. Появившиеся клоны MAX038 имеют по сравнению с ней весьма скромные параметры. Так, у ICL8038 максимальная рабочая частота составляет 300 кГц, а у XR2206 – 1 МГц. Встречающиеся в радиолюбительской литературе схемы простых аналоговых функциональных генераторов также имеют максимальную частоту в несколько десятков, и очень редко, сотен кГц.

            Поэтому в своё время автором для настройки разнообразных схем был разработан и изготовлен аналоговый функциональный генератор, формирующий сигналы синусоидальной, прямоугольной, треугольной формы и работающий в диапазоне частот от 0,1 Гц до 8 МГц.

Вид спереди:

 

Вид сзади:

 

 

Генератор имеет следующие параметры:

            амплитуда выходных сигналов:

              синусоидальный……………………………1,4 В;

              прямоугольный……………………………..2,0 В;

              треугольный…………………………………2,0 В;

            диапазоны частот:

               0,1…1 Гц;

               1…10 Гц;

               10…100 Гц;

               100…1000 Гц;

               1…10 кГц;

               10…100 кГц;

               100…1000 кГц;

               1…10 МГц;

           напряжение питание………………………….220 В, 50 Гц.

 

           За основу разработанной схемы функционального генератора, приведенной ниже, была взята схема из [1]:

 

 

           Генератор выполнен по классической схеме: интегратор + компаратор, только собран на высокочастотных компонентах.

           Интегратор собран на ОУ DA1 AD8038AR, имеющем полосу пропускания 350 МГц и скорость нарастания выходного напряжения 425 В/мкс. На DD1.1, DD1.2 выполнен компаратор. Прямоугольные импульсы с выхода компаратора (выв. 6 DD1.2) поступают на инвертирующий вход интегратора. На VT1 выполнен эмиттерный повторитель, с которого снимаются импульсы треугольной формы, управляющие компаратором. Переключателем SA1 выбирают требуемый диапазон частот, потенциометр R1 служит для  плавной регулировки частоты. Подстроечным резистором R15 устанавливается режим работы генератора и регулируется амплитуда треугольного напряжения. Подстроечным резистором R17 регулируется постоянная составляющая треугольного напряжения. С эмиттера VT1 напряжение треугольной формы поступает на переключатель SA2 и на   формирователь синусоидального напряжения, выполненный на VT2, VD1, VD2. Подстроечным резистором R6 выставляются минимальные искажения синусоиды, а подстроечным резистором R12 регулируется симметрия синусоидального напряжения. С целью уменьшения коэффициента гармоник верхушки треугольного сигнала ограничиваются цепями VD3, R9, C14, C16 и VD4, R10, C15, C17. С буфера DD1.4 снимаются импульсы прямоугольной формы. Сигнал, выбранный переключателем SA2, подаётся на потенциометр R19 (амплитуда), а с него — на выходной усилитель DA5, выполненный на  AD8038AR. На элементах R24, R25, SA3 выполнен выходной аттенюатор напряжения  1:1 / 1:10.

           Для питания генератора использован классический трансформаторный источник с линейными стабилизаторами, формирующими напряжения +5В, ±6В и ±3 В.

 

           Для индикации частоты генератора была использована часть схемы от уже готового частотомера, взятая из [2]:

 

           На транзисторе VT3 выполнен усилитель-формирователь прямоугольных импульсов, с выхода которого сигнал поступает на вход микроконтроллера DD2 PIC16F84A. МК тактируется от кварцевого резонатора ZQ1 на 4 МГц. Кнопкой SB1 выбирается по кольцу цена младшего разряда 10, 1 или 0.1 Гц и соответствующее время измерения 0.1, 1 и 10 сек. В качестве индикатора использован Wh2602D-TMI-CT с белыми символами на синем фоне. Правда угол обзора у этого индикатора оказался 6:00, что не соответствовало его установке в корпус с углом обзора 12:00. Но эта неприятность была устранена, как будет описано ниже. Резистор R31 задаёт ток подсветки, а резистором R28 регулируется оптимальная контрастность. Следует отметить, что программа для МК была написана автором [2] для индикаторов типа DV-16210, DV-16230, DV-16236, DV-16244, DV-16252 фирмы DataVision, у которых процедура начальной инициализации по-видимому не подходит к  индикаторам Wh2602 фирмы WinStar. В результате после сборки частотомера на индикатор ничего не выводилось. Других малогабаритных индикаторов в продаже на тот момент не было, поэтому пришлось вносить изменения в исходник программы частотомера. Попутно в ходе экспериментов была выявлена такая комбинация в процедуре инициализации, при которой двухстрочный дисплей с углом обзора 6:00 становился однострочным, причём достаточно комфортно читаемым при угле обзора 12:00. Выводимые в нижней строке надписи-подсказки о режиме работы частотомера стали не видны, но они особо и не нужны, т.к. дополнительные функции этого частотомера не использованы.

           Конструктивно функциональный генератор выполнен на печатной плате из одностороннего фольгированного стеклотекстолита размерами 110х133 мм, разработанной под стандартный пластиковый корпус Z4. Индикатор установлен на палате вертикально на двух уголках. С основной платой он соединён при помощи шлейфа с разъёмом под IDC-16. Для соединения высокочастотных цепей в схеме использован тонкий экранированный кабель. Вот фото генератора со снятой верхней крышкой корпуса:

 

           Перечень элементов и чертёж платы в Layout5 прилагаются.

           После первого включения генератора необходимо проконтролировать питающие напряжения, а также установить подстроечным резистором R29 напряжение -3В на выходе DA7 LM337L. Резистором R28 устанавливается оптимальная контрастность индикатора. Для настройки генератора необходимо подключить осциллограф к его выходу, переключатель SA3 установить в положение 1:1, SA2 —  в положение, соответствующее напряжению треугольной формы, SA1 – в положение 100…1000 Гц. Резистором R15 добиваются устойчивой генерации сигнала. Переместив движок резистора R1 в нижнее по схеме положение, подстроечным резистором R17 добиваются симметричности треугольного сигнала относительно нуля. Далее переключатель SA2 необходимо перевести в положение, соответствующее синусоидальной форме выходного сигнала, и подстроечными резисторами R12 и R6 добиться соответственно симметричности и минимальных искажений синусоиды.

           Вот что получилось в итоге:

Меандр 1 Мгц:

 

Меандр 4 Мгц:

 

Треугольник 1 Мгц:

 

Треугольник 4 Мгц:

 

Синус 8 Мгц:

 

            Следует отметить, что на частотах свыше 4 Мгц на треугольном и прямоугольном сигналах начинают наблюдаться искажения, связанные с недостаточной полосой пропускания выходного усилителя. При желании этот недостаток можно легко устранить, если перенести усилитель выходного каскада DA5 в цепь от истока VT2 к SA2, т.е. использовать его как усилитель синусоидального сигнала, а вместо выходного усилителя применить повторитель на ещё одном ОУ AD8038AR, пересчитав соответственно сопротивления делителей треугольного (R18, R36) и прямоугольного (R21, R35) сигналов  на меньший коэффициент деления.

 

    Литература:

    1) Широкодиапазонный функциональный генератор. А.Ишутинов. Радио №1/1987г.

    2) Экономичный многофункциональный частотомер. А.Шарыпов. Радио №10-2002.

Файлы:
Плата в Layout, перечень элементов, прошивка, исходник, наклейки

Все вопросы в Форум.


Как вам эта статья?

Заработало ли это устройство у вас?

генератор функций — это… Что такое генератор функций?


генератор функций

 

генератор функций
функциональный преобразователь

[Л.Г.Суменко. Англо-русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.]

Тематики

  • информационные технологии в целом

Синонимы

  • функциональный преобразователь

Справочник технического переводчика. – Интент. 2009-2013.

  • генератор формирования символов в видеосигнале
  • генератор хронирующих опорных импульсов

Смотреть что такое «генератор функций» в других словарях:

  • генератор функций — funkcijų generatorius statusas T sritis Standartizacija ir metrologija apibrėžtis Generatorius, kurio išėjimo dydžio vertės yra tam tikra netiesinė įėjimo dydžio verčių funkcija. atitikmenys: angl. function generator vok. Funktionsgeber, m;… …   Penkiakalbis aiškinamasis metrologijos terminų žodynas

  • генератор функций — funkcijų generatorius statusas T sritis fizika atitikmenys: angl. function generator vok. Funktionsgenerator, m rus. генератор функций, m pranc. générateur de fonctions, m …   Fizikos terminų žodynas

  • диодный генератор функций — diodinis funkcijų generatorius statusas T sritis automatika atitikmenys: angl. diode function generator vok. Diodenfunktionsgenerator, m rus. диодный генератор функций, m pranc. générateur de fonctions à diode, m …   Automatikos terminų žodynas

  • генератор кусочно-линейных функций — кусочно линейный функциональный преобразователь — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом Синонимы кусочно линейный функциональный преобразователь EN …   Справочник технического переводчика

  • генератор случайных функций — — [Л.Г.Суменко. Англо русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.] Тематики информационные технологии в целом EN random function generator …   Справочник технического переводчика

  • Криптографически стойкий генератор псевдослучайных чисел — (англ. Cryptographically secure pseudorandom number generator, CSPRNG)  это генератор псевдослучайных чисел с определенными свойствами, позволяющими использовать его в криптографии. Многие прикладные задачи криптографии требуют случайных… …   Википедия

  • Diodenfunktionsgenerator — diodinis funkcijų generatorius statusas T sritis automatika atitikmenys: angl. diode function generator vok. Diodenfunktionsgenerator, m rus. диодный генератор функций, m pranc. générateur de fonctions à diode, m …   Automatikos terminų žodynas

  • diode function generator — diodinis funkcijų generatorius statusas T sritis automatika atitikmenys: angl. diode function generator vok. Diodenfunktionsgenerator, m rus. диодный генератор функций, m pranc. générateur de fonctions à diode, m …   Automatikos terminų žodynas

  • diodinis funkcijų generatorius — statusas T sritis automatika atitikmenys: angl. diode function generator vok. Diodenfunktionsgenerator, m rus. диодный генератор функций, m pranc. générateur de fonctions à diode, m …   Automatikos terminų žodynas

  • générateur de fonctions à diode — diodinis funkcijų generatorius statusas T sritis automatika atitikmenys: angl. diode function generator vok. Diodenfunktionsgenerator, m rus. диодный генератор функций, m pranc. générateur de fonctions à diode, m …   Automatikos terminų žodynas


Про Python — Справочник — Generator (генератор)

Функция, возвращающая подвид итератора, генерирующий значения.

Словом «генератор» обычно обозначается функция-генератор (или метод-генератор), возвращающая итератор генератора. Однако иногда слово может быть использовано и для обозначения самого итератора. В случаях, когда контекст непонятен лучше использовать полные термины: функция-генератор и итератор генератора. Итератор генератора — это объект, порождаемый функцией-генератором.
Генераторы являются простым средством для создания итераторов. Всё, что можно сделать при помощи генераторов можно также сделать при помощи итераторов, построенных на классах. Но в случае генераторов методы __iter__() и __next__() создаются автоматически, также автоматически возбуждается StopIteration, да и поддерживать генераторы проще и удобнее, чем реализовывать то же с использованием классов.
Выглядят функции-генераторы также как и обычные, но содержат выражения с ключевым словом yield для последовательного генерирования значений, которые могут быть использованы в циклах for in, либо их получения при помощи функции next().

На каждой yield работа функции временно приостанавливается, при этом сохраняется состояние исполнения, включая локальные переменные, указатель на текущую инструкцию, внутренний стек и состояние обработки исключения. При последующем обращении к итератору генератора (при вызовах его методов) функция продолжает своё исполнение с места, на котором была приостановлена. Этим функции-генераторы отличаются от обычных функций, при вызове которых исполнение всякий раз начинается с начала.

Если функция достигает инструкции return, либо конца (без указания упомянутой инструкции), возбуждается исключение StopIteration и итератор исчерпывает себя.

    def my_animal_generator():

yield 'корова'

for animal in ['кот', 'собака', 'медведь']:
yield animal

yield 'кит'

for animal in my_animal_generator():
print(animal)
# корова кот собака медведь кит


Функции-генераторы весьма похожи на сопрограммы: могут выдывать значения несколько раз, имеют более одной точки входа, их выполнение может быть приостановлено. Единственным различием является то, что функции-генераторы не могут определять то, как должно продолжаться исполнение (что должно происходить) после выдачи значения — управление всегда передаётся коду, вызвавшему генератор.


Инструкция yield может употребляться и в конструкции try except. Если к генератору не обратились до его финализации (финализация происходит, когда счётчик ссылок доходит до нуля, либо когда происходит сборка мусора), будет вызван метод итератора .close(), что позволяет выполнить оставшиеся в блоке finally инструкции.

В версии +py2.2, была возможность использовать генераторы при помощи импорта from __future__ import generators.

Отправить ответ

avatar
  Подписаться  
Уведомление о