Научно популярное →
Как работает оптический аналоговый процессор
Процессоры бывают разные: графические, аудио, текстовые, сигнальные и т.д. Процессором можно назвать любое устройство выполняющие какие-нибудь вычисления. Во всём их многообразии выделяют класс, использующий в вычислениях свет и операции со светом — это так называемые оптические процессоры. Оптические процессоры обладают огромным вычислительным потенциалом, что предвещает им хорошее будущее.
В статье рассмотрены базовые принципы работы аналоговых оптических процессоров и их применение в приложениях распознавания образов и криптографии.
Иллюстраций: 35, символов: 23 125, строк кода: 289.
Современная электроника для работы с информацией использует электрический заряд. Хранение, преобразование и передача совокупности электрических зарядов даёт огромное многообразие технических электронных средств, которые заполонили нашу с вами жизнь повсеместно и делают её, в некоторой степени, более комфортной. Однако, данная методика имеет и свои минусы, что заставляет учёных и инженеров по всему миру искать новые принципы в вычислительной технике.
Широкие возможности даёт применение света. Изучением данного вопроса занимается наука – фотоника. Чтобы понять каким образом свет используется в вычислениях, давайте рассмотрим, как для этих целей применяться электрический ток. Для простоты далее будем рассматривать только аналоговые системы. Также учтём, что информация в технических устройствах представляется как изменение какого-либо физического параметра какой-нибудь физической системы, которое именуется сигналом.
На рисунке ниже представлена простейшая электрическая цепь, в которой имеются два источника сигналов (информации), в данном случае информацию несёт величина тока каждого из источников. Провода, исходящие из источников, соединяются вместе и ток суммируется. Результат этот можно наблюдать на амперметре, который включён в цепь последовательно (цепь замыкается через «землю»). Таким образом, данная схема реализует математическую операцию «сложение».
На следующем рисунке электрическая цепь содержит один источник сигнала и информацию в этой система несёт уже не величина тока, а напряжение (можно построить аналогичную систему для величины тока). Данная схема реализует математическую операцию «умножение»: напряжение сигнала увеличивается в «К» раз при прохождении через усилитель. Результат можно наблюдать на вольтметре, включённом параллельно в цепь (напряжение падает на внутренней нагрузке прибора).
Что же со светом? С математической точки зрения представление сигналов электрическим током и светом схоже, следовательно, можно построить аналогичные системы. На рисунках ниже показан довольно простой принцип функционирования: совмещение монохроматических (одной частоты) пучков света реализует операцию «сложение» (аналогично совмещению токов в один провод), а отражение (или прохождение через полупрозрачную пластинку) реализует операцию «умножение».
Умножение, путём прохождения полупрозрачной пластинки:
Рассмотренные выше операции сложения и умножения позволяют производить параллельно (несколько пучков) большие вычисления со скоростью света!
Кодирование информации светом
Сигнал, представляющий собой физический процесс с некоторым меняющимся параметром, несёт информацию. Совокупность всех параметров света, которые можно менять, представляют набор способов кодирования информации. Это может быть интенсивность света, его частота, фаза, угол поляризации, амплитуда и т.д. Одним из способов кодирования является изменение поперечного сечения пучка излучения, это так называемая пространственная модуляция света, она обычно применяется для кодирования больших объёмов информации. Как происходит пространственное кодирование? Давайте возьмём источник излучения (лазер), который формирует пучок монохроматического частично-когерентного света
и направим его на пластинку, которая содержит некоторую информацию. Такие пластинки называются транспарантами, некоторые из них изображены на рисунке ниже.
Как видно, транспаранты могут быть разной формы и содержания. Также существуют полупрозрачные пластинки, вносящие фазовый сдвиг, примером такого транспаранта может служить обычная фотоплёнка. Рисунок (информация) на транспаранте формирует апертуру пучка излучения.
В итоге, мы получим схему, изображенную ниже:
Свет «точечного» источника излучения коллимируется линзой и падает на транспарант с размещенной информацией для кодирования.
Использование лазерного излучения в данных системах кодирования обусловлено когерентностью данного излучения. Если освещение светом некогерентно, то амплитуды и фазы в различных точках за транспарантом будут меняются по статистическим независимым законам, что вносит ограничения на использование такого сигнала1.
Спектры и анализ Фурье
Давайте рассмотрим систему линз и транспарантов немного сложнее: поместим на фокусном расстоянии от транспаранта сферическую линзу и поставим за ней экран (также на расстоянии фокуса линзы), как изображено на рисунке:
Данная схема выполняет некоторое преобразование. Что же получится на выходе? Давайте промоделируем оптическую схему. Воспользуемся для этих целей пакетом General Laser Analysis and Design (аббр. GLAD). Далее в статье некоторые экспериментальные части будем моделировать в данном пакете.
Пусть в качестве рисунка транспаранта будет обычный квадрат:
Принцип работы с GLAD схож с пакетом MatLAB. Для реализации процедуры модулирования необходимо написать скрипт, в нашем случае он будет выглядеть так:
delay = 10 # определяем задержку после вывода картинки
size_array = 2048 # размер массива пучка лазера
wave_lambda = 0.640 # длина волны излучения в мкм (красный)
width = 5 # длина транспаранта [см]
height = 5 # ширина транспаранта [см]
size_x = width/size_array # сколько см в 1 клетке массва пучка по x
size_y = height/size_array # сколько см в 1 клетке массва пучка по y
f_lens = 40 # фокусное расстояние линзы в см
array/set 1 size_array size_array # устанавливаем для пучка №1 размер массива
wavelength/s 1 wave_lambda # устанавливаемым для него же длину волны
units/set 1 size_x size_y # устанавливаем параметры шага массива
nbeam 2 # размножаем первый пучок на 2 (2-ой с такими же параметрами)
clap/rec 1 1 1 # создаем транспарант с квадратом по центру в 1-ом пучке размером 1x1 см
min=-2.5 # размеры области, выводимой на графиках
max=2.5
title Input aperture # заголовок графика
set/window/absolute min max min max # устанавливаем размеры области графика
plot/orthographic/intensity # рисуем график распределения интенсивности света
pause delay # ждём
title Section of input aperture # выводим сечение излучения
set/window/absolute min max min max
plot/xslice
pause delay
title Input aperture # выводим интенсивность в градациях серого
set/window/absolute min max min max
plot/bitmap/intensity/gray
pause delay
dist f_lens # отходим на расстояние фокуса
lens/sph 0 f_lens # ставим сферическую линзу, которая работает для всех пучком (0) с фокусом f_lens
dist f_lens # снова отходим на расстояние фокуса
min=-0.005 # опять размеры области выставляем
max=0.005
title Spectrum # смотрим распределение интенсивности
set/window/absolute min max min max
plot/orthographic/intensity 1
pause delay
title Section of spectrum # смотрим сечение интенсивности по x
set/window/absolute min max min max
plot/x/intensity 1
pause delay
title Spectrum [camera] # выводим интенсивность в градациях серого
set/window/absolute min max min max
plot/bitmap/intensity/gray
pause delay
title Contour of intensity # выводим контуры интенсивности
set/window/absolute min max min max
plot/contour
pause delay
end
Вот так выглядит распределение интенсивности на входном транспаранте:
Распределение интенсивности на экране:
А вот так бы его увидела камера, расположенная на месте экрана:
На что это похоже? Давайте посмотрим на сечение интенсивности до и после:
Если взглянуть на сечение после, то узнаваем кардинальный синус [sinc(x)]. Прямоугольный сигнал трансформируется в кардинальный синус в результате преобразования Фурье. Таким образом, система «транспарант – линза – экран» производит 2D преобразование Фурье входного сигнала со скоростью света! Чтобы не быть голословным, давайте посчитаем 2D-Фурье преобразование в MatLAB для следующих «транспарантов»:
Скрипт для преобразования:
clc; % очищаем окно
display('Запуск................................ [OK]');
cd('.'); % рабочий каталог - каталог скрипта
BMP_LIST = dir('*.bmp'); % ищим файлы в формате *.bmp
for i=1:length(BMP_LIST) % перебираем *.bmp в каталоге
display(['File.................... [',BMP_LIST(i).name,']']);
I=imread(BMP_LIST(i).name); % загружаем файл
display('Файл загружен......................... [OK]');
imshow(I); % отображаем загруженные данные (картинка)
pause; % ждём press any key
y = fft2(I); % производим 2D-Фурье преобразование
imshow(y); % смотрим, что получилось после преобразования
pause; % ждём press any key
s=size(y) % меряем размер данных (x:y)
g=abs(y(:,round(s(2)/2))); % смотрим модуль сечения по x в центре
plot(g); % смотри сечение
pause; % ждём press any key
end
Результат (спектры «транспарантов»):
Сечения по оси «x»:
Видно, что результат расчёта MatLAB и GLAD схожи. Таким образом, можно с уверенностью говорить, что линза, помещённая в некоторую оптическую систему, выполняет 2D преобразование Фурье входного сигнала. Добавлю, что если на линзу направить спектр сигнала, то на выходе получим сам сигнал, т.е. линза также выполняет и обратное 2D-Фурье преобразование. Тем самым мы получаем доступ к спектру, что открывает большие возможности по фильтрации и преобразованию. И особенно нужно отметить огромную скорость этих вычислений!
Системы распознавания образов
В качестве приложения, оптические системы могут применяться для решения задач распознавания образов. Рассмотрим классические схемы1, применяемые для решения данного класса задач.
Согласованная фильтрация
Что такое согласованный фильтр? В технике под этим термином понимают такую фильтрующую систему, которая согласована с сигналом, который ей необходимо отфильтровать. Что это значит? В идеале это означает, что через такую систему сможет пройти тот и только тот сигнал, для которого фильтрующая система была спроектирована, все остальные же сигналы пройти не смогут. В реальности же такое труднодостижимо, поэтому обычно требуют, чтобы на выходе системы сигнал, с которым согласован фильтр, давал максимальный отклик. Тем самым, поставив на выходе какое-нибудь пороговое устройство, можно с достоверностью утверждать, что на вход поступил именно интересующий нас сигнал, если отклик перевалил через заданный порог. Такие системы согласованной фильтрации могут применяться в задачах распознавания образов, когда на вход подаётся группа сигналов (даже с шумом) и система определяет, какой из них она «знает».
Давайте рассмотрим такую систему, которая будет фильтровать некоторый текст (ограничимся одним словом) и будет определять в нём буквы. Слово будет располагаться на входном транспаранте, который облучается лазерным излучением. Далее расположим на необходимом расстоянии линзу, что даст нам доступ к спектру. Вместо экрана, поставим ещё один транспарант, для того, чтобы внести изменения в спектр сигнала. И после разместим ещё одну линзу, чтобы посмотреть, что получается на выходе системы. Вся эта конструкция изображена на рисунке ниже:
Схема такого типа называется «4f» (4 фокусных расстояния) – это схема простейшего аналогового оптического процессора. Давайте искать в слове «ХАБР» самую русскую среди них букву «Б». Для начертания символов будем использовать шрифт a_Campus в виду его «угловатости» (это удобно из-за специфики описания конфигурации апертуры в GLAD). Промоделируем работу схемы в GLAD:
#Объявляем переменные
declare/integer N
declare/integer delay
declare/integer size_array
declare/real wave_lambda
declare/real width
declare/real height
declare/real size_x
declare/real size_y
declare/real symbol_size
declare/real f_lens
N=4 # количество символов
delay = 5 # задержка в сек.
size_array = 512 # размер массива
wave_lambda = 0.640 # длина волны в мкм
symbol_size=3 # размер символа в см
width = symbol_size*N*2 # длина транспаранта в см
height = 3*symbol_size # высота транспаранта в см
size_x = width/size_array # разрешение массива в см по x
size_y = height/size_array # разрешение массива в см по y
f_lens = 40 # фокус линзы в см
array/set 1 size_array size_array # устанавливаем для 1-го пучка размер массива
wavelength/s 1 wave_lambda # устанавливаем для 1-го пучка длину волны
units/set 1 size_x size_y # устанавливаем шаг массива
nbeam 5 # размножаем первый пучок на 5 пучков
clap/gen/disk h.dat 1 -symbol_size/2*4 0 1 1 # Добавляем символ 'Х'
clap/gen/disk a.dat 2 -symbol_size/2 0 1 1 # Добавляем символ 'А'
obs/gen/disk a_cut.dat 2 -symbol_size/2 0 1 1 # Корректируем символ 'А'
clap/gen/disk b.dat 3 symbol_size 0 1 1 # Добавляем символ 'Б'
obs/gen/disk b_cut.dat 3 symbol_size 0 1 1 # Корректируем символ 'Б'
clap/gen/disk r.dat 4 symbol_size/2*5 0 1 1 # Добавляем символ 'Р'
obs/gen/disk r_cut.dat 4 symbol_size/2*5 0 1 1 # Корректируем символ 'Р'
energy/norm 1 1 # нормируем энергию пучков
energy/norm 2 1
energy/norm 3 1
energy/norm 4 1
add/coh/con 1 2 3 4 # соединяем пучки в один (первый)
clap/gen/disk b.dat 5 0 0 1 1 # Добавляем символ 'Б' (для фильтра)
obs/gen/disk b_cut.dat 5 0 0 1 1 # Корректируем символ 'Б' (для фильтра)
energy/norm 5 1
title Symbol # Выводим символ для фильтра
set/window/absolute -3 3 -3 3
plot/orthographic/intensity 5
pause delay
title Input aperture # Выводим входной сигнал
set/window/absolute -10 11 -4 4
plot/orthographic/intensity
pause delay
dist f_lens # Отходим на фокусное расстояние
lens/sph 0 f_lens # Ставим сферическую линзу для всех пучков
dist f_lens # Отходим на фокусное расстояние
energy/norm 1 1
energy/norm 5 1
# Сейчас мы в частотной плоскости и оперируем спектрами
conjugate/amplitude 5 # Сопрягаем спектр символа (получаем передаточную функцию фильтра)
mult/beam/two 1 5 # Перемножаем передаточную функцию с сигналом получаем выход фильтра
energy/norm 1 1
dist f_lens # Отходим на фокусное расстояние
lens/sph 0 f_lens # Ставим сферическую линзу для всех пучков
dist f_lens # Отходим на фокусное расстояние
# Сейчас мы в выходной плоскости и выводим картинки
title Output aperture
plot/orthographic/intensity 1
pause delay
title Section of intensity
plot/x/intensity 1
pause delay
title Camera
plot/bitmap/intensity/gray 1
pause delay
title Contour of intensity [output]
plot/contour 1
pause delay
end
Данный скрипт описывает систему согласованной оптической фильтрации сигналов, где фильтр настроен на распознавание буквы «Б». Входной сигнал:
Искомый символ:
В теории согласованной фильтрации показывается, что амплитудная характеристика передаточная функция согласованного фильтра повторяет амплитудную характеристику сигнала с точностью до знака фазы (комплексно сопряжён), на который он настроен. Поэтому, достаточно получить спектр буквы «Б» и использовать его как фильтр для входного сигнала, что и описано в скрипте. В результате, на выходном транспаранте можно увидеть следующее распределение:
Символ, имеющий максимальный отклик, и является искомым. Следует обратить внимание, что в результате обратного преобразования, на выходном транспаранте сигнал имеет перевёрнутую форму (показывается в математике). Выходной сигнал интерпретируется как корреляционная функция.
Побочные отклики могу характеризовать степень схожести входных символов на букву «Б».
Голографическая фильтрация
Давайте посмотрим немного другую схему, которая решает задачу распознавания образов нагляднее. Это так называемый фильтр Ван-дер-Люгта (Vanderlugt) или голографический фильтр. Принцип фильтрации схож со схемой 4f. Единственным и существенным отличием является то, что в качестве фильтрующего транспаранта используется пластинка, на которой помимо бинарной матрицы амплитудного распределения (как в 4f схеме) записана также и фаза. Подобные вещи позволяют записывать голограммы. Как это происходит? В физике есть такое явление как интерференция волн, которое можно наблюдать при взаимодействии когерентных лучей, результатом которого является наблюдение пространственного распределения интенсивности излучения. Данное распределение именуется интерференционной картиной и его структура «хранит» в себе информацию о фазах взаимодействующих волн. Поэтому, для создания голограммы нужно 2 пучка когерентно света, которые можно получить от одного лазера, разделив зеркалами свет, например такими:
На схеме ниже представлена структура фильтра Ван-дер-Люгта:
Будем решать туже самую задачу поиска символа «Б» в слове «ХАБР». Промоделируем схему в GLAD:
#Объявляем переменные
declare/integer N
declare/integer delay
declare/integer size_array
declare/real wave_lambda
declare/real width
declare/real height
declare/real size_x
declare/real size_y
declare/real symbol_size
declare/real f_lens
N=4 # количество символов
delay = 5 # задержка в сек.
size_array = 512 # размер массива
wave_lambda = 0.640 # длина волны в мкм
symbol_size=3 # размер символа в см
width = symbol_size*N*2 # длина транспаранта в см
height = 3*symbol_size # высота транспаранта в см
size_x = width/size_array # разрешение массива в см по x
size_y = height/size_array # разрешение массива в см по y
f_lens = 40 # фокус линзы в см
array/set 1 size_array size_array # устанавливаем для 1-го пучка размер массива
wavelength/s 1 wave_lambda # устанавливаем для 1-го пучка длину волны
units/set 1 size_x size_y # устанавливаем шаг массива
nbeam 5 # размножаем первый пучок на 7 пучков
# добавляем сигнал
clap/gen/disk h.dat 4 -symbol_size/2*4 0 1 1
clap/gen/disk a.dat 5 -symbol_size/2 0 1 1
obs/gen/disk a_cut.dat 5 -symbol_size/2 0 1 1
clap/gen/disk b.dat 6 symbol_size 0 1 1
obs/gen/disk b_cut.dat 6 symbol_size 0 1 1
clap/gen/disk r.dat 7 symbol_size/2*5 0 1 1
obs/gen/disk r_cut.dat 7 symbol_size/2*5 0 1 1
# нормируем пучки
energy/norm 4 1
energy/norm 5 1
energy/norm 6 1
energy/norm 7 1
add/coh/con 4 5 6 7
energy/norm 4 1
rotate 4 90 # поворачиваем на 90 градусов апертуру
# выводим, что получилось
title Input aperture
plot/orthographic/intensity 4
pause delay
# добавляем фильтруемый символ
clap/gen/disk b.dat 1 0 0 1 1
obs/gen/disk b_cut.dat 1 0 0 1 1
rotate 1 90
energy/norm 1 1
# смотрим символ
title Input aperture
plot/orthographic/intensity
pause delay
# переменные для дельта-функции
variable/dec/int delta_size # переменная, управляющая размером дельта-функции (понятнее будет ниже)
variable/dec/real delta_x # x-смещение
variable/dec/real delta_y # y-смещение
#имитируем дельта-функцию
delta_x = 8 # смещение дельта-функции от центра (нужно, для имитации падения со стороны пучка)
delta_size = 10000
clap/cir 2 size_y/delta_size delta_x # маленький радиус + большая энергия = дельта функция
energy/norm 2 delta_size # задаем энергию
title X-slice of delta function # выводим сечение дельта-функции
plot/xslice 2 delta_y
pause delay
dist f_lens # Отходим на фокусное расстояние
lens/sph 0 f_lens # Ставим сферическую линзу для всех пучков
dist f_lens # Отходим на фокусное расстояние
# Мы в спектральной плоскости, выводим картинки
title X-section of spectrum [general]
plot/xslice 1
pause delay
title X-section of spectrum [delta]
plot/xslice 2
pause delay
add/coh 2 1 # складываем спектры символа и дельта функции(для интерференции)
copy 2 3 # копируем в пучок-переменную то, что получилось
conjugate/amplitude 3 # сопрягаем пучок-переменную
mult/beam 2 3 # перемножаем пучок переменную с пучком 2 [создаем чисто амплитудный фильтр, удалив фазу]
# выводим картинки, получившегося фильтра
title X-section of filter transfer
plot/xslice 2
pause delay
title Gray bitmap of filter transfer
plot/bitmap/intensity/gray 2
pause delay
# перемножаем сигнал с фильтром = выходной сигнал
mult/beam 1 2
mult/beam 4 2
dist f_lens # Отходим на фокусное расстояние
lens/sph 0 f_lens # Ставим сферическую линзу для всех пучков
dist f_lens # Отходим на фокусное расстояние
# выводим картинки выходного сигнала
title Contour of output signal
plot/contour 4
pause delay
title Gray bitmap of output signal
plot/bitmap/intensity/gray 4
pause delay
end
Входной транспарант (при фильтрации) имеет вид:
Входной транспарант (при записи голограммы) имеет вид:
Справа изображен спектр записываемого сигнала на пластинку. В качестве опорного пучка в модели используется дельта-функция, которая выглядит вот так (справа спектр):
После интерференции на плёнке получаем картинку, сечение которой имеет вид:
Камера бы увидела это вот так:
В конечном счете, на выходе фильтра будем иметь следующее особое распределение:
Криптографические системы
Помимо применения в задачах распознавания образов, оптические процессоры могут также применяться и для систем криптографии для шифрования информации «на лету» со скоростью света! При этом технически схема аналогична системам фильтрации. Базовым звеном является схема 4f, которая для шифрования может иметь такой вид:
Особо приятно, что для дешифрирования применима аналогичная схема:
Следует подчеркнуть обязательное условие, налагаемое на ключи, используемые при шифровании и дешифровании. К примеру, это могут быть бинарные двумерные псевдослучайные последовательности.
Заключение
Совместное применение современных цифровых вычислительных средств и оптических аналоговых процессоров открывает широкие горизонты по формированию быстрых систем. На базе только одной схемы 4f можно спроектировать устройства для таких областей как криптография, распознавание и детектирование сигналов (образов), фильтрация и т.д. И всё это происходит на очень больших скоростях! Естественно использование цифровых узлов для сопряжения оптических процессоров будет накладывать ограничения на производительность всей системы обработки информации, однако даже такой шаг позволит иметь значимый выигрыш в скорости, возможно даже и в конечной стоимости устройства. Прогресс не стоит на месте, происходят постоянно новые открытия и возможно даже в недалёком будущем мы сможем пользоваться приборами на полностью оптической архитектуре. Для всех интересующихся данной тематикой могу посоветовать книгу, указанную под №1 в списке литературы.
Почитать
- Joseph W. Goodman Introduction to Fourier optics. Department of Electrical Engineering Stanford University, 1968. [купить] (существует перевод на русский язык)
- П.А. Белов, В.Г. Беспалов, В.Н. Васильев, С.А. Козлов, А.В. Павлов, К.Р. Симовский, Ю.А. Шполянский. Оптические процессоры: достижения и нововведения. [читать]
- Ахманов, Никитин. Физическая оптика. 2-е изд. МГУ. 2004 [читать]
- Власов Д.В., Дайнеко А.Н., Фадеев А.В. Оптические процессоры (электронное пособие). [читать]
P.S. Соблюдайте правила ресурса и условия Creative Commons Attribution 3.0 Unported (CC BY 3.0)
15.08.2011 16:05+0400