Переходы входного сигнала через ноль
Лиза П. Хакер разрабатывает систему для обработки сигналов, приходящих от физических сенсоров. Один из важных инструментов, который она хочет построить, — это сигнал, описывающий переходы входного сигнала через ноль (zero 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 <expression>))
Завершите программу, вставив необходимое
<expression>
.
Комментарии отсутствуют.