Алла СОЛОНИНА
Квантование
в структурах цифровых фильтров с фиксированной точкой
Квантованию — представлению с помощью конечного числа двоичных разрядов (битов) — могут подвергаться данные:
• бесконечной разрядности;
• конечной разрядности при усечении (округлении) до меньшего числа разрядов.
Как известно [2, 5], нелинейная процедура квантования сопровождается внесением в структуру ЦФ ошибок, источниками которых являются:
• Аналого-цифровой преобразователь (АЦП), вносящий в каждый момент нормированного времени п ошибку квантования, равную разности между дискретным х(п) и цифровым Х(п) сигналами, называемую шумом АЦП.
• Умножители, отображающие в структуре ЦФ операцию умножения.
В структурах ЦФ на выходах сумматоров накапливаются суммы локальных произведений, для чего в архитектуре современных ЦПОС предусмотрена операция умножения с накоп-
1 Версии MATLAB R2008a (MATLAB 7.6 Release 2008a).
Моделирование цифровой обработки сигналов в MATLAB.
Часть 4. Моделирование структур цифровых фильтров
I W W
с фиксированной точкой программными средствами MATLAB: анализ характеристик КИХ-фильтров
Основные этапы проектирования цифровых фильтров (ЦФ) были рассмотрены в [6], первый этап проектирования — синтез оптимальных КИХ- и БИХ-фильтров программными средствами MATLAB1 — в [6, 7], второй этап — выбор структуры ЦФ и ее описание — в [8]. До сих пор предполагалось, что в структуре ЦФ все данные (входные, промежуточные и выходные) представлены числами бесконечной разрядности, которым в MATLAB условно сопоставлены числа максимальной разрядности типа double. В следующей серии статей будет рассмотрен третий этап проектирования ЦФ — моделирование программными средствами MATLAB структуры ЦФ с учетом эффектов квантования, обусловленных представлением данных с фиксированной точкой (ФТ), что необходимо при реализации ЦФ, например, на базе цифровых процессоров обработки сигналов (ЦПОС) с ФТ.
лением — MAC (Multiplier/Accumulator), выполняемая во внутренних регистрах в формате расширенного слова. При сохранении конечного результата в формате слова в каждый момент нормированного времени n вносится ошибка квантования, называемая собственным шумом.
• Квантование коэффициентов передаточной функции ЦФ.
На этапе синтеза коэффициенты Ъ;, ак передаточной функции ЦФ (1) [8] представляются числами типа double (условно бесконечной разрядности). Однако в структуре ЦФ с ФТ они заменяются квантованными коэф-
фициентами Ц, ак, что вносит не зависящую от времени ошибку квантования коэффициентов, влияющую на характеристики ЦФ.
• Сумматоры, отображающие в структуре ЦФ операцию сложения.
При сложении локальных произведений с ФТ промежуточный результат хранится в формате расширенного слова. Если при сохранении конечного результата в формате слова результат по модулю превосходит единицу, возникают ошибки переполнения.
Модели ЦФ — линейная и нелинейная, соответственно, с неквантованными и квантованными данными — изображены на рис. 1, где приняты условные обозначения:
• х (п), у (п) — дискретные, а Х(п), у(п) — цифровые (квантованные) входной и выходной сигналы;
• Й(£) — передаточная функция с неквантованными, а Й(£) — с квантованными коэффициентами.
Нелинейную модель ЦФ с квантованными данными (рис. 1б) коротко называют ЦФ с ФТ.
Теоретический анализ шумов квантования в ЦФ с ФТ чрезвычайно сложен, вследствие явных и неявных взаимосвязей шумов с квантуемыми сигналами и между собой. Нелинейная модель обычно исследуется посредством
Рис. 1. Модели ЦФ:
а) линейная с неквантованными данными;
б) нелинейная с квантованными данными
компьютерного моделирования. Аналитические же оценки шумов (детерминированные и вероятностные) получены лишь при определенных допущениях, позволяющих существенно упростить анализ случайного процесса в ЦФ с ФТ [1, 2, 5].
Моделирование структуры КИХ-фильтра с фиксированной точкой
В MATLAB весьма широко представлены средства моделирования структур ЦФ с ФТ в пакетах расширения Filter Design Toolbox и Fixed Point Toolbox. В серии статей, начиная с настоящей, рассматривается методика моделирования структур ЦФ с ФТ, иллюстрируемая конкретными примерами. Данная методика согласуется с предлагаемой в MATLAB; с ней можно познакомиться, обратившись к справочной системе в формате HTML, используя поиск по ключевой фразе “Quantized Filters” (квантованные фильтры).
Моделирование структуры КИХ-фильтра с ФТ начитается с описания его исходной структуры (с неквантованными данными) в виде объекта dfilt, что можно сделать двумя способами, с которыми мы познакомились ранее [8]:
• синтезировать КИХ-фильтр по заданным требованиям к АЧХ, выбрать требуемую структуру фильтра и описать ее в виде объекта dfilt;
• синтезировать КИХ-фильтр непосредственно в виде объекта dfilt по требованиям к АЧХ, описанным в виде объекта fdesign; в этом случае структура КИХ-фильтра выбирается автоматически, и для ее изменения придется воспользоваться функцией convert.
Характерной особенностью исходных структур КИХ-фильтров (объектов dfilt) является значение свойства Arithmetic: 'double'. Это значит, что в исходной структуре КИХ-фильтра все данные — коэффициенты передаточной функции, воздействие, результаты выполнения арифметических операций при вычислении реакции и сама реакция — представлены числами максимальной разрядности типа double (условно бесконечной).
В дальнейшем для краткости используем терминологию: исходным КИХ-фильтром будем называть исходную структуру КИХ-фильтра, описанную в виде объекта dfilt со значением свойства Arithmetic: 'double'.
Для моделирования структур ЦФ с ФТ в пакете расширения Filter Design Toolbox предусмотрена возможность модификации объекта dfilt при значении свойства Arithmetic: 'fixed'.
Соответствующие структуры ЦФ с ФТ в MATLAB называются Quantized Filters (квантованными фильтрами) или Fixed-Point Filters (фильтрами с ФТ); группа фильтров Quantized Filters включает в себя Fixed-Point Filters, а также Floating-Point Filters (фильтры с плавающей точкой).
В дальнейшем используем принятую в MATLAB терминологию: КИХ-фильтром с ФТ (Fixed-Point FIR Filter) будем называть структуру КИХ-фильтра с ФТ, описанную в виде объекта dfilt со значением свойства Arithmetic: 'fixed'.
Исходный КИХ-фильтр
В качестве исходного КИХ-фильтра выберем объект Hf3 — оптимальный КИХ-фильтр (Equiripple filter), синтезированный непосредственно в виде объекта dfilt с автоматически выбранной прямой структурой Direct-Form FIR, впоследствии с помощью функции convert преобразованной в прямую приведенную структуру Direct-Form Symmetric FIR (пример 9 в [8]).
Пример 1
Вывести свойства исходного КИХ-фильт-ра — объекта Hf3:
>> load Hf3 >> Hf3 Hf3 =
FilterStructure: ’Direct-Form Symmetric FIR’
Arithmetic: 'double'
Numerator: [1x41 double]
PersistentMemory: false
Выведенные свойства объекта Hf3 — объекта dfilt с Arithmetic: 'double' — комментировались в [8].
КИХ-фильтр с ФТ и его свойства
КИХ-фильтр с ФТ формируется на основе исходного КИХ-фильтра путем присваивания свойству Arithmetic значения 'fixed'.
Пример 2
Сформировать КИХ-фильтр с ФТ в виде объекта Hq3 на основе исходного КИХ-филь-тра— объекта Hf3 (пример 1) и сохранить объект Hq3 на диске:
>> load Hf3 >> Hq3=copy(Hf3);
>> set(Hq3,'Arithmetic','fixed')
>> save Hq3
Список основных свойств КИХ-фильтра с ФТ, доступных пользователю, выводится по имени объекта dfilt. Полный список свойств, включающий основные свойства, а также свойства, при определенных условиях доступные пользователю, выводится с помощью функции:
get(<имя объекта>)
Пример 3
Для КИХ-фильтра с ФТ — объекта Hq3 (пример 2) — вывести список основных свойств по его имени (табл. 1, левый столбец) и полный список свойств с помощью функции get (табл. 1, правый столбец).
Таблица 1. Список основных свойств КИХ-фильтра с ФТ
Основные свойства
>> Hq3
Hq3 =
FilterStructure: 'Direct-Form Symmetric FIR' Arithmetic: 'fixed' Numerator: [1x41 double] PersistentMemory: false CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 Filterlnternals: 'FullPrecision'
Полный список свойств
>> get(Hq3)
PersistentMemory: 0 NumSamplesProcessed: 0 FilterStructure: 'Direct-Form Symmetric FIR' States: [40x1 embedded.fi] Numerator: [1x41 double] Arithmetic: 'fixed' CoeffWordLength: 16 CoeffAutoScale: 1 Signed: 1 RoundMode: 'convergent' OverflowMode: 'wrap' InputWordLength: 16 InputFracLength: 15 NumFracLength: 17 FilterInternals: 'FullPrecision' OutputWordLength: 34 OutputFracLength: 32 ProductWordLength: 32 ProductFracLength: 32 AccumWordLength: 34 AccumFracLength: 32 TapSumWordLength: 17 TapSumFracLength: 15
Свойства, выделенные полужирным шрифтом (табл. 1, правый столбец), будут использованы далее.
Назначение свойств ЦФ с ФТ дается в [5]. (Отметим, что в версии MATLAB 7.0, описываемой в [5], имеются расхождения в свойствах по сравнению с версией MATLAB 7.6, используемой в данной статье.)
Подробную информацию о свойствах объектов dfilt с различными структурами можно получить с помощью справочной системы MATLAB в формате HTML, используя поиск по ключевой фразе “Quantized Filters” и обращаясь к разделам, описывающим объекты dfilt с различными структурами.
Необходимые свойства, используемые далее, будут поясняться по мере изложения материала.
Дополнительные функции MATLAB для объектов с ФТ
В [8] рассмотрены основные функции MATLAB из пакетов Signal Processing Toolbox и Filter Design Toolbox для объектов dfilt (см. табл. 2 в [8]). Большинство из них можно использовать и для объектов dfilt с ФТ. Помимо этого в пакет Filter Design Toolbox включен набор дополнительных функций для объектов dfilt с ФТ (табл. 2). Полный список функций может быть выведен с помощью справочной системы MATLAB в формате HTML, при помощи поиска по ключевой фразе “Quantized Filters”, при обращении к разделу Function Reference (справка по функциям) и гипертекстовой ссылке Quantized Filters Analysis Functions (функции анализа квантованных фильтров).
Квантование коэффициентов в КИХ-фильтрах с ФТ
Процедуру квантования коэффициентов в КИХ-фильтрах с ФТ поясним на примерах.
Пример 4
Вывести неквантованные коэффициенты передаточной функции исходного КИХ-филь-
Таблица 2. Дополнительные функции MATLAB для объектов dfilt с ФТ
Функция Назначение
denormalize(Hq) Возвращает исходный объект Hq с ненормированными коэффициентами (отменяет действие функции normalize). Не вносит изменений, если коэффициенты не нормировались
Hpsd=noisepsd(Hq,L) Возвращает массив записей Hpsd, поле Hpsd.data которого хранит значения PSD* выходного шума объекта Hq (ЦФ с ФТ). L — количество реализаций, по которым усредняется PSD (по умолчанию L = 10). Средняя мощность шума вычисляется с помощью функции avgpower(Hpsd). График PSD выводится с помощью функции plot(Hpsd)
norm(Hq,'norm') Для каскадных структур БИХ-фильтров с ФТ выполняет масштабирование, предотвращающее или минимизирующее ошибки переполнения
normalize(Hq) K=normalize(Hq) Нормирует коэффициенты числителя передаточной функции объекта Hq к максимальному по модулю значению и возвращает нормирующий множитель K. Для каскадных структур БИХ-фильтров с ФТ нормируются коэффициенты числителей передаточных функций каждого звена отдельно, и K представляет собой вектор-столбец
* PSD (Power Spectral Density) — спектральная плотность мощности.
тра (объекта Hf3 в примере 1), присваивая вектору коэффициентов (свойство Numerator) имя bf3:
>> load Hf3
>> bf3=get(Hf3,'Numerator')
bf3 =
Columns 1 through 7
-0.0008 0.0067 0.0017 -О.ООО2 О.ООЗ7 -О.ОО44 -О.О194
Columns 8 through 14
-0.0022 0.0314 0.0180 -О.О2О7 -О.О141 -О.ОО1З -О.ОЗ42
Columns 15 through 21
-0.0111 0.1021 0.0889 -О.1221 -О.194З О.ОЗЗ4 О.2441
Columns 22 through 28
0.0554 -0.1943 -0.1221 О.ОВВ9 О.1О21 -О.О111 -О.ОЗ42
Columns 29 through 35
-0.0015 -0.0141 -0.0207 О.О1ВО О.ОЗ14 -О.ОО22 -О.О194
Columns 36 through 41
-0.0044 0.0037 -0.0002 О.ОО17 О.ОО67 -О.ОООВ
Значения коэффициентов bf3 по модулю не превосходят единицы, поэтому их нормирование не требуется, и для дальнейших исследований можно воспользоваться ранее созданным КИХ-фильтром с ФТ — объектом Hq3 (пример 2).
Пример 5
Создать объект Hq3c1 — копию объекта Hq3 (пример 2). Установить в нем требуемые значения свойств, связанных с квантованием коэффициентов, и сохранить объект Hq3c1 на диске.
Свойства объекта Hq3, установленные по умолчанию, были выведены ранее (табл. 1). Среди них с квантованием коэффициентов КИХ-фильтров связаны следующие свойства (в табл. 1 они выделены полужирным шрифтом):
CoeffWordLength:16
CoeffAutoScale:1
Signed:1
NumFracLength:17
Поясним коротко их смысл:
• CoeffWordLength — отображает формат представления коэффициентов передаточной функции КИХ-фильтра (см. формулу (5) в [8]) — слово.
• NumFracLength — длина дробной части в слове CoeffWordLength.
• CoeffAutoScale — флаг, при сбросе которого (значении 0) можно произвольно задавать длину дробной части NumFracLength.
• Signed — флаг, управляющий знаковыми (при установке) или беззнаковыми (при
сбросе) коэффициентами передаточной
функции КИХ-фильтра.
В объекте Hq3c1 оставим неизменными значения свойств CoeffWordLength: 16 и Signed: 1, но изменим длину дробной части NumFrac-Length, для чего предварительно установим CoeffAutoScale: 0. Сохраним объект Hq3c1 с новыми свойствами на диске:
>> load Hq3 >> Hq3c1=copy(Hq3);
>> set(Hq3c1,'CoeffAutoScale',0)
>> set(Hq3c1,'NumFracLength',15)
>> save Hq3c1
Значения квантованных коэффициентов bq3 объекта Hq3c1 можно вывести с помощью функции:
>> bq3c1=get(Hq3c1,'Numerator')
Для того чтобы увидеть отличие квантованных коэффициентов от неквантованных, выведенных в примере 4, следует установить формат format long.
Пример 6
Создать объект Hq3c2 — копию объекта Hq3 (пример 2). Установить в нем требуемые значения свойств, связанных с квантованием коэффициентов, и сохранить объект Hq3c2 на диске:
>> load Hq3 >> Hq3c2=copy(Hq3);
>> set(Hq3c2,'CoeffWordLength',8)
>> set(Hq3c2,'CoeffAutoScale',0)
>> set(Hq3c2,'NumFracLength',7)
>> save Hq3c2
Выведем значения квантованных коэффициентов bq3c2 объекта Hq3c2:
>> bq3c2=get(Hq3c2,'Numerator')
bq3c2 =
Columns 1 through 7
0 0.0078 0 О О -О.ОО7В -О.О1З6
Columns 8 through 14
0 0.0313 0.0156 -О.О2З4 -О.О156 О -О.ОЗ1З
Columns 15 through 21
-0.0078 0.1016 0.0859 -О.12ЗО -О.195З О.ОЗ47 О.2422
Columns 22 through 28
0.0547 -0.1953 -0.1250 О.ОВЗ9 О.1О16 - -О.ОО7В -О.ОЗ1З
Columns 29 through 35
0 -0.0156 -0.0234 О.О156 О.ОЗ1З О -О.О1З6
Columns 36 through 41
-0.0078 0 0 О О.ОО7В О
Сравнивая полученные квантованные коэффициенты с неквантованными (пример 4), видим их отличия и без установки format long.
Анализ характеристик КИХ-фильтров с ФТ
Для анализа характеристик КИХ- и БИХ-фильтров с ФТ можно воспользоваться функцией fvtool следующего формата:
h=fvtool(Hd1,Hd2,...)
Здесь h — объект, представляющий собой окно Figure...: Filter Visualization Tool программы GUI FVTool с автоматически выведенными характеристиками ослабления АЧХ (дБ) (см. формулу (5) в [6]) объектов Hd1, Hd2 и т. д.
Как обычно, свойства объекта h выводятся с помощью функции:
get(h)
а устанавливаются с помощью функции:
set(h,'name1',value1,'name2',value2,...)
Функция fvtool указанного формата обеспечивает интерактивное общение с GUI FVTool. Основные свойства объекта h представлены в таблице 3.
Таблица 3. Основные свойства интерактивного общения с GUI FVTool
Свойство Назначение
Filters Возвращает информацию о структурах объектов dfilt в виде массива ячеек (cell array)
Analysis Управляет выводом характеристик в графическом окне GUI FVTool и может принимать значения, соответствующие командам пункта меню Analysis: • 'magnitude' — Magnitude Response (АЧХ); • 'phase' — Phase Response (ФЧХ); • freq' — Magnitude and Phase Responses (АЧХ и ФЧХ); • 'grpdelay' — Group Delay Response (ГВЗ); • 'phasedelay' — Phase Delay (фазовая задержка); • impulse' — Impulse Response (импульсная характеристика); • 'step' — Step Response (переходная характеристика); • 'polezero' — Pole/Zero Plot (карта нулей и полюсов); • 'coefficints' — Filter Coefficints (коэффициенты передаточной функции); • info' — Filter Information (свойства фильтра — объекта dfilt); • magestimate' — Magnitude Response Estimate (оценка АЧХ); • noisepower' — Round-off Noice Power Spectrum (энергетический спектр шума округления*)
grid Управляет наличием сетки при выводе графика и может принимать значение 'on' (по умолчанию) или 'off'
legend Управляет размещением легенды и может принимать значение 'on' или 'off' (по умолчанию). Размещение легенды выполняется с помощью функции: set(h,'legend','on'), после чего размещается легенда с помощью функции legend
Fs Позволяет указывать частоту дискретизации в килогерцах вместо нормированной частоты, указываемой по умолчанию. Например: set(h,'Fs',8)
Show- Reference Управляет автоматическим выводом характеристики исходного фильтра (с неквантованными коэффициентами) и может принимать значения 'on' (по умолчанию), если характеристика исходного фильтра выводится, или 'off' — если не выводится
* Вычисляется для квадратов мгновенных значений шума.
Пример 7
Вывести графики АЧХ:
• исходного КИХ-фильтра с неквантованными коэффициентами — объекта Hf3 (пример 4);
• КИХ-фильтра с ФT с ^-разрядными коэффициентами — объекта Hq3cl (пример З);
• КИХ-фильтра с ФT с В-разрядными коэффициентами — объекта Hq3c2 (пример б). Указать частоту дискретизации В кГц (она
использовалась при синтезе исходного КИХ-
фильтра [б]) и разместить легенду (рис. 2):
>> load Hf3 >> load Hq3cl >> load Hq3c2
>> h=fvtool(Hf3,Hq3cl,Hq3c2);
>> set(h,'ShowReference','off')
>> setfo'Fs'A'legendVon')
>> legend(h,'Reference FIR','FIR 16 bits','FIR В bits')
Для вывода АЧХ вместо АЧХ (дБ) — характеристики ослабления (З) [б], выводимой по умолчанию, в пункте меню Analysis (анализ) была выбрана команда Analysis Parameters (параметры анализа) и в раскрывающемся списке Magnitude Display (вывод АЧХ) — значение Magnitude (АЧХ).
АЧХ исходного КИХ-фильтра и КИХ-фильтра с ^-разрядными коэффициентами практически совпали, а с В-разрядными отличаются.
Выбирая в пункте меню Analysis соответствующие команды, можно вывести другие характеристики КИХ-фильтров. ■
Литература
1. Ingle V., Proakis J. Digital Signal Processing Using MATLAB. Second Edition — Thomson.
2. Оппенгейм А., Шафер Р. Цифровая обработка сигналов. М.: Tехносфера, 200б.
3. Сергиенко А. Б. Цифровая обработка сигналов, 2-е изд. СПб.: ПОТЕР, 200б.
4. Солонина А. И., Улахович Д. А., Арбузов С. М., Соловьева Е. Б. Основы цифровой обработки сигналов. 2-е изд. СПб.: БХВ-Петербург, 200З.
З. Солонина А. И., Арбузов С. М. Цифровая обработка сигналов. Моделирование в MATLAB. СПб.: БХВ-Петербург, 200В.
6. Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть l. Синтез оптимальных (по Чебышеву) КИХ-фильтров программными средствами MATLAB // Компоненты и технологии. 200В. № ll.
7. Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 2. Синтез оптимальных БИХ-фильтров программными средствами MATLAB // Компоненты и технологии. 200В. № l2.
В. Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть З. Описание структур КИХ- и БИХ-фильтров в MATLAB // Компоненты и технологии. 2009. № l.