3.5. Потоки
323
(RC circuit), состоящая из резистора с сопротивлением R и конденсатора емкостью C, соединен-
ных последовательно. Значение напряжения v в зависимости от заданного тока i определяется
формулой, показанной на рис. 3.33. Структура формулы показана на прилагаемой диаграмме по-
тока сигналов.
Напишите процедуру RC, моделирующую эту цепь. На входе RC должна получать значения
R, C и dt, и выдавать процедуру, которая принимает на входе поток значений тока i и началь-
ное значение напряжения v
0
, а на выходе выдает поток значений напряжения v. Например, у
Вас должна быть возможность смоделировать при помощи RC RC-цепь с R = 5 ом, C = 1 фа-
раде, и временным шагом в 0,5 секунды, вычислив (define RC1 (RC 5 1 0.5)). Здесь RC1
определяе тся как процедура, которая принимает на входе поток, представляющий временную по-
следовательность токов, и исходное напряжение на конденсаторе, а на выходе дает временной
поток напряжений.
Упражнение 3.74.
Лиза П. Хакер разрабатывает систему для обработки сигналов, приходящих от физических сенсо-
ров. Один из важных инструментов, который она хочет построить, — это сигнал, описывающий
переходы входного сигнала через ноль (z ero crossings). Выходной сигнал должен равняться +1,
когда сигнал на входе меняется с отрицательного на положительный, -1, когда сигнал меняется с
положительного на отрицательный, и 0 в остальных случаях. (Допустим, что знак нулевого входа
положителен). Например, типичный входной сигнал и связанный с ним сигнал перехода через ноль
могут выглядеть так:
. . .1 2 1.5 1 0.5 −0.1 −2 −3 −2 −0.5 0.2 3 4 . . .
. . . 0 0 0 0 0 −1 0 0 0 0 1 0 0. . .
В Лизиной системе сигнал от сенсора представляется как поток sense-data, а zero-
crossings представляет соответствующий поток пересечений нуля. Для начала Лиза пишет
процедуру sign-change-detector, которая берет два значения в качестве аргументов и, срав-
нив их знаки, выдает 0, 1 или -1. Затем она строит поток переходов через ноль следующим
образом:
(define (make-zero-crossings input-stream last-value)
(cons-stream
(sign-change-detector (stream-car input-stream) last-value)
(make-zero-crossings (stream-cdr input-stream)
(stream-car input-stream))))
(define zero-crossings (make-zero-crossings sense-data 0))
Мимо проходит Лизина начальница Ева Лу Атор и замечает, что программа приблизительно рав-
носильна следующей, написанной с использованием обобщенной версии stream-map из упраж-
нения 3. 50:
(define zero-crossings
(stream-map sign-change-detector sense-data hвыражениеi))
Завершите программу, вставив необходимое hвыражениеi.
Упражнение 3.75.
К сожалению, Лизин детектор перехода через ноль из упражнения 3.74 оказывается недостаточ-
ным, потому что зашумленный сигнал от сенсоров приводит к ложным срабатываниям. Инженер-
электронщик Дайко Поправич предлагает Лизе сгладить сигнал, чтобы отфильтровать шум, преж-
де, чем отлавливать пересечение нуля. Лиза принимает его совет и решает извлечь переходы