Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[103]

+v

-vw

R

C v = v0 + 1/C J0 idt + Ri

---

scale:R

i

scale1/C

integral

-5>

-i -

-

vo

Рис. 3.33: RC-цепь и связанная с ней диаграмма потока сигналов.

(cons-stream initial-value

(add-streams (scale-stream integrand dt) int)))

int)

На рисунке 3.32 показана система преобразования сигналов, соответствующая процедуре integral. Входной поток делится на отрезки dt и пропускается через сумматор, а вывод сумматора опять направляется на его вход. Ссылка на самого себя в определении int отражена на диаграмме в виде цикла обратной связи, соединяющего выход сумматора с одним из его входов.

Упражнение 3.73.

Можно моделировать электрические цепи с помощью потоков, представляющих значения тока или напряжения в определенные моменты времени. Допустим, например, что у нас имеется цепь RC (RC circuit), состоящая из резистора с сопротивлением R и конденсатора емкостью C, соединенных последовательно. Значение напряжения v в зависимости от заданного тока i определяется формулой, показанной на рис. 3.33. Структура формулы показана на прилагаемой диаграмме потока сигналов.

Напишите процедуру RC, моделирующую эту цепь. На входе RC должна получать значения R, C и dt, и выдавать процедуру, которая принимает на входе поток значений тока i и начальное значение напряжения v0, а на выходе выдает поток значений напряжения v. Например, у Вас должна быть возможность смоделировать при помощи RC RC-цепь с R = 5 ом, C = 1 фараде, и временным шагом в 0,5 секунды, вычислив (define RC1 (RC 5 1 0.5)). Здесь RC1 определяется как процедура, которая принимает на входе поток, представляющий временную последовательность токов, и исходное напряжение на конденсаторе, а на выходе дает временной поток напряжений.

Упражнение 3.74.

Лиза П. Хакер разрабатывает систему для обработки сигналов, приходящих от физических сенсоров. Один из важных инструментов, который она хочет построить, - это сигнал, описывающий переходы входного сигнала через ноль (zero crossings). Выходной сигнал должен равняться +1, когда сигнал на входе меняется с отрицательного на


положительный, -1, когда сигнал меняется с положительного на отрицательный, и 0 в остальных случаях. (Допустим, что знак нулевого входа положителен). Например, типичный входной сигнал и связанный с ним сигнал перехода через ноль могут выглядеть так:

... 1 2 1.5 1 0.5 -0.1 -2 -3 -2 -0.5 0.2 3 4 ... ... 00000 -1 000 0 10 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 (выражение)))

Завершите программу, вставив необходимое (выражение). Упражнение 3.75.

К сожалению, Лизин детектор перехода через ноль из упражнения 3.74 оказывается недостаточным, потому что зашумленный сигнал от сенсоров приводит к ложным срабатываниям. Инженер-электронщик Дайко Поправич предлагает Лизе сгладить сигнал, чтобы отфильтровать шум, прежде, чем отлавливать пересечение нуля. Лиза принимает его совет и решает извлечь переходы через ноль из сигнала, полученного взятием среднего арифметического каждого значения входных данных с предыдущим значением. Она объясняет задачу своему помощнику Хьюго Думу, и тот пытается реализовать идею, поправив Лизин текст следующим образом:

(define (make-zero-crossings input-stream last-value)

(let ((avpt (/ (+ (stream-car input-stream) last-value) 2))) (cons-stream (sign-change-detector avpt last-value)

(make-zero-crossings (stream-cdr input-stream)

avpt))))

Этот код неверно реализует замысел Лизы. Найдите ошибку, внесенную Хьюго, и исправьте ее, не меняя структуру программы. (Подсказка: придется увеличить число аргументов make-zero-crossings.)

Упражнение 3.76.

Ева Лу Атор недовольна подходом Хьюго из упражнения 3.75. Написанная им программа не модульна, поскольку смешивает операции сглаживания и отлова пересечений ноля. Например, тест на пересечение не должен изменяться, если Лизе удастся найти другой способ улучшить качество входного сигнала. Помогите Хьюго и напишите процедуру


map: f

dy

integral

-s=»

y

Рис. 3.34: «Аналоговая компьютерная цепь», которая решает уравнение dy/dt

f (y).

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

3.5.4 Потоки и задержанное вычисление

Процедура integral в конце предыдущего раздела показывает, как с помощью потоков можно моделировать системы обработки сигналов, которые содержат циклы обратной связи. Цикл обратной связи для сумматора, показанный на рис. 3.32, моделируется тем, что внутренний поток int в процедуре integral определяется с использованием себя самого:

(define int

(cons-stream initial-value

(add-streams (scale-stream integrand dt) int)))

Способность интерпретатора работать с таким косвенным определением зависит от delay, встроенного в cons-stream. Без этой задержки интерпретатор не мог бы построить int, не вычислив оба аргумента cons-stream, а для этого нужно, чтобы int уже был определен. В общем случае, delay играет ключевую роль, когда мы моделируем системы обработки сигналов с обратной связью при помощи потоков. В отсутствие задержки нам приходилось бы формулировать модели так, чтобы вход всякого обрабатывающего блока полностью вычислялся, прежде чем блок выдает что-либо на выходе. Такое условие исключает циклы.

К сожалению, потоковые модели систем с циклами могут требовать применения задержек помимо той, которая «спрятана» в cons-stream. Например, на рисунке 3.34 показана система обработки сигналов, решающая дифференциальное уравнение dy/dt = f (y), где f - заданная функция. На рисунке показан отображающий блок, который применяет f ко входному сигналу, связанный в цикл обратной связи с интегратором. Это очень похоже на работу аналоговых схем, действительно используемых для решения такого рода уравнений.

Если нам дано начальное значение yo, мы могли бы попытаться смоделировать эту систему с помощью процедуры

(define (solve f y0 dt)

(define y (integral dy y0 dt))



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13] [стр.14] [стр.15] [стр.16] [стр.17] [стр.18] [стр.19] [стр.20] [стр.21] [стр.22] [стр.23] [стр.24] [стр.25] [стр.26] [стр.27] [стр.28] [стр.29] [стр.30] [стр.31] [стр.32] [стр.33] [стр.34] [стр.35] [стр.36] [стр.37] [стр.38] [стр.39] [стр.40] [стр.41] [стр.42] [стр.43] [стр.44] [стр.45] [стр.46] [стр.47] [стр.48] [стр.49] [стр.50] [стр.51] [стр.52] [стр.53] [стр.54] [стр.55] [стр.56] [стр.57] [стр.58] [стр.59] [стр.60] [стр.61] [стр.62] [стр.63] [стр.64] [стр.65] [стр.66] [стр.67] [стр.68] [стр.69] [стр.70] [стр.71] [стр.72] [стр.73] [стр.74] [стр.75] [стр.76] [стр.77] [стр.78] [стр.79] [стр.80] [стр.81] [стр.82] [стр.83] [стр.84] [стр.85] [стр.86] [стр.87] [стр.88] [стр.89] [стр.90] [стр.91] [стр.92] [стр.93] [стр.94] [стр.95] [стр.96] [стр.97] [стр.98] [стр.99] [стр.100] [стр.101] [стр.102] [стр.103] [стр.104] [стр.105] [стр.106] [стр.107] [стр.108] [стр.109] [стр.110] [стр.111] [стр.112] [стр.113] [стр.114] [стр.115] [стр.116] [стр.117] [стр.118] [стр.119] [стр.120] [стр.121] [стр.122] [стр.123] [стр.124] [стр.125] [стр.126] [стр.127] [стр.128] [стр.129] [стр.130] [стр.131] [стр.132] [стр.133] [стр.134] [стр.135] [стр.136] [стр.137] [стр.138] [стр.139] [стр.140] [стр.141] [стр.142] [стр.143] [стр.144] [стр.145] [стр.146] [стр.147] [стр.148] [стр.149] [стр.150] [стр.151] [стр.152] [стр.153] [стр.154] [стр.155] [стр.156] [стр.157] [стр.158] [стр.159] [стр.160] [стр.161] [стр.162] [стр.163] [стр.164] [стр.165] [стр.166] [стр.167] [стр.168] [стр.169] [стр.170] [стр.171] [стр.172] [стр.173] [стр.174] [стр.175] [стр.176] [стр.177] [стр.178] [стр.179] [стр.180] [стр.181] [стр.182] [стр.183] [стр.184] [стр.185] [стр.186] [стр.187] [стр.188] [стр.189] [стр.190] [стр.191] [стр.192] [стр.193] [стр.194] [стр.195] [стр.196]