Моделирование цифровой обработки сигналов ЦОС в MATLAB. Часть 4. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: анализ характеристик КИХ-фильтров

№ 2’2009
PDF версия
Основные этапы проектирования цифровых фильтров (ЦФ) были рассмотрены в [6], первый этап проектирования — синтез оптимальных КИХ- и БИХфильтров программными средствами MATLAB1 — в [6, 7], второй этап — выбор структуры ЦФ и ее описание — в [8]. До сих пор предполагалось, что в структуре ЦФ все данные (входные, промежуточные и выходные) представлены числами бесконечной разрядности, которым в MATLAB условно сопоставлены числа максимальной разрядности типа double. В следующей серии статей будет рассмотрен третий этап проектирования ЦФ — моделирование программными средствами MATLAB структуры ЦФ с учетом эффектов квантования, обусловленных представлением данных с фиксированной точкой (ФТ), что необходимо при реализации ЦФ, например, на базе цифровых процессоров обработки сигналов (ЦПОС) с ФТ.

Все статьи цикла:

Квантование в структурах цифровых фильтровс фиксированной точкой

Квантованию — представлению с помощью конечного числа двоичных разрядов (битов) — могут подвергаться данные:

  • бесконечной разрядности;
  • конечной разрядности при усечении (округлении) до меньшего числа разрядов.

Как известно [2, 5], нелинейная процедура квантования сопровождается внесением в структуру ЦФ ошибок, источниками которых являются:

  • Аналого-цифровой преобразователь (АЦП), вносящий в каждый момент нормированного времени n ошибку квантования, равную разности между дискретным x ( n ) и цифровым tilde{x}( n ) сигналами, называемую шумом АЦП.
  • Умножители, отображающие в структуре ЦФ операцию умножения.

В структурах ЦФ на выходах сумматоров накапливаются суммы локальных произведений, для чего в архитектуре современных ЦПОС предусмотрена операция умножения с накоплением — MAC (Multiplier/Accumulator), выполняемая во внутренних регистрах в формате расширенного слова. При сохранении конечного результата в формате слова в каждый момент нормированного времени n вносится ошибка квантования, называемая собственным шумом.

  • Квантование коэффициентов редаточной функции ЦФ.

На этапе синтеза коэффициенты bi, ak передаточной функции ЦФ (1) [8] представляются числами типа double (условно бесконечной разрядности). Однако в структуре ЦФ с ФТ они заменяются квантованными коэффициентами tilde{b}i, tilde{a}k, что вносит не зависящую от времени ошибку квантования коэффициентов, влияющую на характеристики ЦФ.

  • Сумматоры, отображающие в структуре ЦФ операцию сложения.

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

Модели ЦФ — линейная и нелинейная, соответственно, с неквантованными и квантованными данными — изображены на рис. 1, где приняты условные обозначения:

  • x ( n ), y ( n ) — дискретные, а tilde{x}( n ), tilde{y}( n ) — цифровые (квантованные) входной и выходной сигналы;
  • H ( z ) — передаточная функция с неквантованными, а tilde{H}( z ) — с квантованными коэффициентами.
Рис. 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: [1×41 double]
PersistentMemory: false
CoeffWordLength: 16
CoeffAutoScale: true
Signed: true
InputWordLength: 16
InputFracLength: 15
FilterInternals: ‘FullPrecision’
>> get(Hq3)
PersistentMemory: 0
NumSamplesProcessed: 0
FilterStructure: ‘Direct-Form
Symmetric FIR’
States: [40×1 embedded.fi]
Numerator: [1×41 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 (функции анализа квантованных фильтров).

Таблица 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) — спектральная плотность мощности.

Квантование коэффициентовв КИХ-фильтрах с ФТ

Процедуру квантования коэффициентов в КИХ-фильтрах с ФТ поясним на примерах.

Пример 4

Вывести неквантованные коэффициенты передаточной функции исходного КИХ-фильтра (объекта Hf3 в примере 1), присваивая вектору коэффициентов (свойство Numerator) имя bf3:

>> load Hf3
>> bf3=get(Hf3,'Numerator')
bf3 =
Columns 1 through 7 
–0.0008 0.0067 0.0017 –0.0002 0.0037 –0.0044 –0.0194
Columns 8 through 14 
–0.0022 0.0314 0.0180 –0.0207 –0.0141 –0.0015 –0.0342
Columns 15 through 21 
–0.0111 0.1021 0.0889 –0.1221 –0.1943 0.0554 0.2441
Columns 22 through 28 
0.0554 –0.1943 –0.1221 0.0889 0.1021 –0.0111 –0.0342
Columns 29 through 35 
–0.0015 –0.0141 –0.0207 0.0180 0.0314 –0.0022 –0.0194
Columns 36 through 41 
–0.0044 0.0037 –0.0002 0.0017 0.0067 –0.0008

Значения коэффициентов 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, но изменим длину дробной части NumFracLength, для чего предварительно установим 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 0 0 –0.0078 –0.0156
Columns 8 through 14 
0 0.0313 0.0156 –0.0234 –0.0156 0 –0.0313
Columns 15 through 21 
–0.0078 0.1016 0.0859 –0.1250 –0.1953 0.0547 0.2422
Columns 22 through 28 
0.0547 –0.1953 –0.1250 0.0859 0.1016 –0.0078 –0.0313
Columns 29 through 35 
0 –0.0156 –0.0234 0.0156 0.0313 0 –0.0156
Columns 36 through 41 
–0.0078 0 0 0 0.0078 0

Сравнивая полученные квантованные коэффициенты с неквантованными (пример 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);
  • КИХ-фильтра с ФТ с 16-разрядными коэффициентами — объекта Hq3c1 (пример 5);
  • КИХ-фильтра с ФТ с 8-разрядными коэффициентами — объекта Hq3c2 (пример 6).

Указать частоту дискретизации 8 кГц (она использовалась при синтезе исходного КИХфильтра [6]) и разместить легенду (рис. 2):

>> load Hf3
>> load Hq3c1
>> load Hq3c2
>> h=fvtool(Hf3,Hq3c1,Hq3c2);
>> set(h,'ShowReference','off')
>> set(h,'Fs',8,'legend','on')
>> legend(h,'Reference FIR','FIR 16 bits','FIR 8 bits')
Рис. 2. АЧХ КИХ-фильтров с неквантованными и квантованными коэффициентами
Рис. 2. АЧХ КИХ-фильтров с неквантованными и квантованными коэффициентами

Для вывода АЧХ вместо АЧХ (дБ) — характеристики ослабления (5) [6], выводимой по умолчанию, в пункте меню Analysis (анализ) была выбрана команда Analysis Parameters (параметры анализа) и в раскрывающемся списке Magnitude Display (вывод АЧХ) — значение Magnitude (АЧХ).

АЧХ исходного КИХ-фильтра и КИХфильтра с 16-разрядными коэффициентами практически совпали, а с 8-разрядными отличаются.

Выбирая в пункте меню Analysis соответствующие команды, можно вывести другие характеристики КИХ-фильтров.

Часть 5. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: анализ характеристик БИХ-фильтров


1Версии MATLAB R2008a (MATLAB 7.6 Release 2008a).

Литература

  1. Ingle V., Proakis J. Digital Signal Processing Using MATLAB. Second Edition — Thomson.
  2. Оппенгейм А., Шафер Р. Цифровая обработка сигналов. М.: Техносфера, 2006.
  3. Сергиенко А. Б. Цифровая обработка сигналов, 2-е изд. СПб.: ПИТЕР, 2006.
  4. Солонина А. И., Улахович Д. А., Арбузов С. М., Соловьева Е. Б. Основы цифровой обработки сигналов. 2-е изд. СПб.: БХВ-Петербург, 2005.
  5. Солонина А. И., Арбузов С. М. Цифровая обработка сигналов. Моделирование в MATLAB. СПб.: БХВ-Петербург, 2008.
  6. Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 1. Синтез оптимальных (по Чебышеву) КИХ-фильтров программными средствами MATLAB // Компоненты и технологии. 2008. № 11.
  7. Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 2. Синтез оптимальных БИХ-фильтров программными средствами MATLAB // Компоненты и технологии. 2008. № 12.
  8. Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 3. Описание структур КИХ- и БИХ-фильтров в MATLAB // Компоненты и технологии. 2009. № 1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *