Банк фильтров - Filter bank

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

В цифровой обработке сигналов термин « банк фильтров» также обычно применяется к группе приемников. Разница в том, что приемники также преобразуют поддиапазоны с понижением частоты до низкой центральной частоты, которая может быть повторно дискретизирована с пониженной скоростью. Тот же результат иногда может быть достигнут за счет недостаточной дискретизации поддиапазонов полосы пропускания.

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

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

Изображение реализации и работы банка фильтров взвешенного перекрытия (WOLA). Обращение кругового входного буфера используется для компенсации скачков фазы, вызванных отсутствием истинного эталона времени для преобразования Фурье (ДПФ).

Банки фильтров БПФ

Банк приемников может быть создан путем выполнения последовательности БПФ на перекрывающихся сегментах потока входных данных. К каждому сегменту применяется функция взвешивания (также известная как оконная функция ) для управления формой частотных характеристик фильтров. Чем шире форма, тем чаще нужно выполнять БПФ, чтобы удовлетворить критериям выборки Найквиста . Для фиксированной длины сегмента величина перекрытия определяет, как часто выполняется БПФ (и наоборот). Кроме того, чем шире форма фильтров, тем меньше фильтров необходимо для охвата входной полосы пропускания. Устранение ненужных фильтров (то есть прореживание по частоте) эффективно выполняется путем обработки каждого взвешенного сегмента как последовательности меньших блоков , а БПФ выполняется только для суммы блоков. Это называется суммированием с перекрытием весов (WOLA) и БПФ с взвешенной предварительной суммой . (см. § Выборка ДВПФ )

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

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

Банки фильтров как частотно-временные распределения

При частотно-временной обработке сигналов блок фильтров представляет собой специальное квадратичное частотно-временное распределение (TFD), которое представляет сигнал в совместной частотно-временной области . Это связано с распределением Вигнера – Вилля с помощью двумерной фильтрации, которая определяет класс квадратичных (или билинейных) частотно-временных распределений . Банк фильтров и спектрограмма - это два простейших способа построения квадратичного TFD; по сути, они похожи, поскольку одна (спектрограмма) получается путем разделения временной области на срезы и последующего преобразования Фурье, в то время как другая (набор фильтров) получается путем деления частотной области на срезы, формирующие полосовые фильтры, которые возбуждаются. по анализируемому сигналу.

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

Банк многоскоростных фильтров делит сигнал на несколько поддиапазонов, которые можно анализировать с разными скоростями, соответствующими ширине полосы частот. Реализация использует понижающую дискретизацию (прореживание) и повышающую дискретизацию (расширение) . См. Раздел « Дискретное преобразование Фурье» § Свойства и Z-преобразование § Свойства для получения дополнительной информации об эффектах этих операций в областях преобразования.

Узкий фильтр нижних частот

Узкий фильтр нижних частот можно определить как фильтр нижних частот с узкой полосой пропускания. Для создания многоскоростного узкого КИХ-фильтра нижних частот можно заменить не зависящий от времени КИХ-фильтр на фильтр нижних частот сглаживания и дециматор, а также интерполятор и фильтр нижних частот, предотвращающий формирование изображения. Таким образом, результирующая многоскоростная система представляет собой изменяющийся во времени линейно-фазовый фильтр через прореживатель и интерполятор. Фильтр нижних частот состоит из двух многофазных фильтров, один для дециматора и один для интерполятора.

Банк фильтров делит входной сигнал на набор сигналов . Таким образом, каждый из генерируемых сигналов соответствует отдельной области спектра . В этом процессе регионы могут перекрываться (или нет, в зависимости от приложения).


Сгенерированные сигналы могут быть сгенерированы с помощью набора полосовых фильтров с полосой пропускания и центральными частотами (соответственно). Банк многоскоростных фильтров использует один входной сигнал, а затем производит несколько выходных сигналов путем фильтрации и субдискретизации. Чтобы разделить входной сигнал на два или более сигналов, можно использовать систему анализа-синтеза.

Сигнал будет разделен с помощью четырех фильтров для k = 0,1,2,3 на 4 полосы с одинаковой шириной полосы (в банке анализа), а затем каждый субсигнал прореживается с коэффициентом 4. В каждой полосе разделив сигнал на каждую полосу, мы получим разные характеристики сигнала.

В секции синтеза фильтр восстановит исходный сигнал: сначала повышающая дискретизация 4 субсигналов на выходе блока обработки с коэффициентом 4, а затем фильтрация 4 фильтрами синтеза для k = 0,1,2,3. Наконец, добавляются выходы этих четырех фильтров.

Банки многомерных фильтров

Решетка квинконса

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

Полный набор фильтров состоит из стороны анализа и синтеза. Банк фильтров анализа разделяет входной сигнал на разные поддиапазоны с разными частотными спектрами. Часть синтеза повторно собирает различные сигналы поддиапазонов и генерирует восстановленный сигнал. Двумя основными строительными блоками являются прореживатель и расширитель. Например, входной сигнал делится на четыре направленных поддиапазона, каждый из которых покрывает одну из клиновидных частотных областей. В системах 1D прореживатели M-кратного прореживания сохраняют только те отсчеты, которые кратны M, а остальные отбрасывают. в то время как в многомерных системах дециматоры представляют собой невырожденную целочисленную матрицу размера D × D. он учитывает только те отсчеты, которые находятся на решетке, созданной дециматором. Обычно используемым дециматором является дециматор квинканкс, решетка которого генерируется из матрицы Квинканкс, которая определяется как

Решетка quincunx, порожденная матрицей quincunx, выглядит так, как показано; часть синтеза двойственна части анализа. Банки фильтров могут быть проанализированы с точки зрения частотной области с точки зрения декомпозиции и восстановления поддиапазонов. Однако не менее важна интерпретация банков фильтров в гильбертовом пространстве , которая играет ключевую роль в геометрических представлениях сигналов. Для общего банка фильтров K- каналов с фильтрами анализа, фильтрами синтеза и матрицами выборки . Что касается анализа, мы можем определить векторы в виде

,

каждый индекс по двум параметрам: и .

Точно так же мы можем определить фильтры синтеза .

Рассматривая определение сторон анализа / синтеза, мы можем убедиться, что и для части реконструкции:

.

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

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

Банки фильтров идеальной реконструкции

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

Точно так же для выходного сигнала у нас будет , где . Также G - матрица, где обозначает i-ю многофазную составляющую j-го фильтра синтеза Gj (z).

Банк фильтров имеет идеальную реконструкцию, если для любого входа, или, что эквивалентно, что означает, что G (z) является левым обратным H (z).

Многомерный дизайн фильтра

Банк 1D фильтров
Банк 2D фильтров

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

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

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

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

Банк фильтров состоит из этапа анализа и этапа синтеза. Каждый этап состоит из набора параллельно установленных фильтров. Конструкция банка фильтров - это конструкция фильтров на стадиях анализа и синтеза. Фильтры анализа разделяют сигнал на перекрывающиеся или неперекрывающиеся поддиапазоны в зависимости от требований приложения. Фильтры синтеза должны быть спроектированы так, чтобы восстанавливать входной сигнал из поддиапазонов, когда выходы этих фильтров объединяются вместе. Обработка обычно выполняется после этапа анализа. Эти блоки фильтров могут быть сконструированы как с бесконечной импульсной характеристикой (IIR) или с конечной импульсной характеристикой (FIR). Чтобы снизить скорость передачи данных, на этапах анализа и синтеза выполняются понижающая и повышающая дискретизация соответственно.

Существующие подходы

Ниже приведены несколько подходов к проектированию многомерных банков фильтров. Для получения более подробной информации, пожалуйста, проверьте ОРИГИНАЛЬНЫЕ ссылки.

Банки многомерных фильтров с идеальной реконструкцией

Когда необходимо восстановить разделенный сигнал обратно в исходный, можно использовать блоки фильтров совершенной реконструкции (PR).

Пусть H ( z ) - передаточная функция фильтра. Размер фильтра определяется как порядок соответствующего многочлена в каждом измерении. Симметрия или антисимметрия полинома определяет свойство линейной фазы соответствующего фильтра и связано с его размером. Как и в случае 1D, член наложения спектров A (z) и передаточная функция T (z) для двухканального набора фильтров:

A ( z ) = 1/2 (H 0 (- z ) F 0 ( z ) + H 1 (- z ) F 1 ( z )); T ( z ) = 1/2 (H 0 ( z ) F 0 ( z ) + H 1 ( z ) F 1 ( z )), где H 0 и H 1 - фильтры разложения, а F 0 и F 1 - восстановительные фильтры.

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

Фильтры PR с линейной фазой очень полезны для обработки изображений. Этот двухканальный набор фильтров относительно легко реализовать. Но двух каналов иногда бывает недостаточно. Банки двухканальных фильтров можно каскадировать для создания банков многоканальных фильтров.

Банки и поверхности многомерных направленных фильтров

Банки фильтров многомерного анализа

M-мерные блоки направленных фильтров (MDFB) представляют собой семейство банков фильтров, которые могут обеспечить направленное разложение произвольных M-мерных сигналов с помощью простой и эффективной древовидной конструкции. Он имеет множество отличительных свойств, таких как: направленная декомпозиция, эффективное построение дерева, угловое разрешение и идеальная реконструкция. В общем M-мерном случае идеальные частотные опоры MDFB представляют собой гиперпирамиды на основе гиперкуба. Первый уровень декомпозиции для MDFB достигается N-канальным нерасчетным блоком фильтров, составные фильтры которого представляют собой MD-фильтр в форме «песочных часов», выровненный по осям w 1 , ..., w M соответственно. После этого входной сигнал дополнительно разлагается серией двумерных итеративно повторно дискретизированных банков фильтров шахматной доски IRC li ( Li ) (i = 2,3, ..., M), где IRC li ( Li ) работает на 2- D срезы входного сигнала, представленные парой измерений (n 1 , n i ) и верхним индексом (Li), означают уровни разложения для i-го банка фильтров уровня. Обратите внимание, что, начиная со второго уровня, мы присоединяем банк фильтров IRC к каждому выходному каналу с предыдущего уровня, и, следовательно, весь фильтр имеет всего 2 ( L 1 + ... + L N ) выходных каналов.

Банки многомерных фильтров с избыточной дискретизацией

Банки фильтров многомерного синтеза

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

Для банка фильтров с избыточной дискретизацией БИХ идеальная реконструкция изучалась в Wolovich и Kailath. в контексте теории управления. В то время как для банка фильтров с передискретизацией FIR мы должны использовать разные стратегии для 1-D и MD. КИХ-фильтры более популярны, поскольку их проще реализовать. Для банков КИХ-фильтров с избыточной дискретизацией 1-мерный алгоритм Евклида играет ключевую роль в матричной обратной задаче. Однако алгоритм Евклида не работает для многомерных (MD) фильтров. Для фильтра MD мы можем преобразовать представление FIR в полиномиальное представление. Затем используйте алгебраическую геометрию и основы Грёбнера, чтобы получить структуру и условие восстановления многомерных банков фильтров с избыточной дискретизацией.

Банки многомерных несубдискретизированных КИХ-фильтров

Банки фильтров без субдискретизации - это конкретные банки фильтров с передискретизацией без понижающей или повышающей дискретизации. Условие идеальной реконструкции для несубдискретизированных банков КИХ-фильтров приводит к векторной обратной задаче: даны фильтры анализа и КИХ- фильтр , и цель состоит в том, чтобы найти набор удовлетворяющих КИХ-фильтров синтеза .

Использование баз Грёбнера

Банки многомерных M-канальных фильтров

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

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

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

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

Общая многомерная банк фильтров (рисунок 7) может быть представлена парой матриц анализа и синтез многофазных и размера и , где N есть число каналов , и является абсолютным значением детерминанта матрицы выборки. Также и являются z-преобразованием многофазных компонентов фильтров анализа и синтеза. Следовательно, они являются многомерными многочленами Лорана , которые имеют общий вид:

.

Уравнение полиномиальной матрицы Лорана необходимо решить, чтобы спроектировать блоки фильтров идеальной реконструкции:

.

В многомерном случае с многомерными многочленами необходимо использовать теорию и алгоритмы базисов Грёбнера.

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

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

где - многочлены.

Модуль аналогичен диапазону набора векторов в линейной алгебре. Теория базисов Грёбнера подразумевает, что Модуль имеет уникальный редуцированный базис Грёбнера для данного порядка степенных произведений в полиномах.

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

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

Банки многомерных фильтров на основе картографии

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

Подходы к отображению имеют определенные ограничения на типы фильтров; тем не менее, это дает много важных преимуществ, таких как эффективная реализация с помощью подъемных / лестничных конструкций. Здесь мы приводим пример двухканальных банков фильтров в 2D с матрицей дискретизации. У нас было бы несколько возможных вариантов идеальных частотных характеристик канального фильтра и . (Обратите внимание, что два других фильтра и поддерживаются в дополнительных областях.) Все частотные области на рисунке могут быть критически дискретизированы прямоугольной решеткой, охватываемой . Итак, представьте, что набор фильтров обеспечивает идеальную реконструкцию с помощью КИХ-фильтров. Тогда из характеристики многофазной области следует, что фильтры H1 (z) и G1 (z) полностью задаются H0 (z) и G0 (z) соответственно. Следовательно, нам необходимо разработать H0 (x) и G0 (z), которые имеют желаемые частотные характеристики и удовлетворяют условиям многофазной области. Существуют разные техники отображения, которые можно использовать для получения вышеуказанного результата.



Дизайн банка фильтров в частотной области

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

Прямая оптимизация в частотной области

Многие из существующих методов проектирования двухканальных банков фильтров основаны на методе преобразования переменных. Например, преобразование Макклеллана можно использовать для разработки одномерных двухканальных банков фильтров. Хотя блоки двухмерных фильтров имеют много схожих свойств с одномерным прототипом, их трудно распространить на более чем двухканальные случаи.

В Nguyen авторы рассказывают о разработке многомерных банков фильтров путем прямой оптимизации в частотной области. Предлагаемый здесь метод в основном ориентирован на создание M-канальных блоков 2D фильтров. Метод гибок в отношении конфигураций поддержки частоты. Банки 2D-фильтров, разработанные путем оптимизации в частотной области, использовались в Wei и Lu. В статье Нгуена предлагаемый метод не ограничивается проектированием двухканальных двухмерных блоков фильтров; подход обобщен для банков M-каналов фильтров с любой критической матрицей субдискретизации. Согласно реализации в статье, его можно использовать для создания до 8-канальных блоков 2D фильтров.

(6) Матрица обратной куртки

В статье Ли 1999 года авторы говорят о конструкции многомерного банка фильтров с использованием обратной матрицы оболочки . Пусть H - матрица Адамара порядка n , транспонированная матрица H тесно связана с ее обратной. Правильная формула: , где п есть N × N единичная матрица , а Н Т является транспонированием H . В статье 1999 г. авторы обобщают матрицу обратной оболочки [RJ] N, используя матрицы Адамара и взвешенные матрицы Адамара.

В этой статье авторы предложили использовать КИХ-фильтр со 128 отводами в качестве основного фильтра, а коэффициент децимации вычисляется для матриц RJ. Они провели моделирование на основе различных параметров и достигли хороших качественных характеристик при низком коэффициенте децимации.

Блоки направленных фильтров

Бамбергер и Смит предложили двухмерный набор направленных фильтров (DFB). DFB эффективно реализуется через l- уровневое древовидное разложение, которое приводит к поддиапазонам с клинообразным частотным разделением (см. Рисунок). Оригинальная конструкция DFB включает модуляцию входного сигнала и использование ромбовидных фильтров. Более того, чтобы получить желаемое частотное разделение, необходимо следовать сложному правилу расширения дерева. В результате частотные области для результирующих поддиапазонов не следуют простому порядку, как показано на рисунке 9, на основе индексов каналов.

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

Банки направленных фильтров могут быть расширены до более высоких размеров. Его можно использовать в 3-D для достижения частотного разделения.

Приемопередатчик банка фильтров

Банки фильтров являются важными элементами для физического уровня в широкополосной беспроводной связи, где проблема заключается в эффективной обработке нескольких каналов в основной полосе частот. Архитектура приемопередатчика на основе банка фильтров устраняет проблемы масштабируемости и эффективности, наблюдаемые в предыдущих схемах в случае несмежных каналов. Соответствующая конструкция фильтра необходима для уменьшения снижения производительности, вызванного блоком фильтров. Чтобы получить универсально применимые конструкции, можно сделать умеренные предположения относительно формата сигнала, статистики канала и схемы кодирования / декодирования. Могут использоваться как эвристические, так и оптимальные методологии проектирования, а отличная производительность возможна при низкой сложности, если приемопередатчик работает с достаточно большим коэффициентом передискретизации. Практическое применение - передача OFDM, где они обеспечивают очень хорошую производительность с небольшой дополнительной сложностью.

Заметки

Рекомендации

дальнейшее чтение

  • Харрис, Фредрик Дж. (2004). Многоскоростная обработка сигналов для систем связи . Река Аппер Сэдл, Нью-Джерси: Prentice Hall PTR. ISBN 0-13-146511-2.