Моделирование цифровой обработки сигналов ЦОС в MATLAB. Часть 4. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: анализ характеристик КИХ-фильтров
Все статьи цикла:
- Часть 1. Синтез оптимальных (по Чебышеву) КИХ-фильтров программными средствами MATLAB
- Часть 2. Синтез оптимальных цифровых БИХ-фильтров программными средствами MATLAB
- Часть 3. Описание структур КИХ- и БИХ-фильтров в MATLAB
- Часть 4. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: анализ характеристик КИХ-фильтров
- Часть 5. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: анализ характеристик БИХ-фильтров
- Часть 6. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: квантование воздействия и вычисление реакции
- Часть 7. Моделирование цифровых фильтров средствами программ GUI MATLAB: GUI FDATool
- Часть 8. Моделирование цифровой фильтрации средствами программ GUI MATLAB: GUI SPTool
- Часть 9. Моделирование цифровых преобразователей Гильберта и дифференциаторов программными средствами и средствами GUI FDATool MATLAB
Квантование в структурах цифровых фильтровс фиксированной точкой
Квантованию представлению с помощью конечного числа двоичных разрядов (битов) могут подвергаться данные:
- бесконечной разрядности;
- конечной разрядности при усечении (округлении) до меньшего числа разрядов.
Как известно [2, 5], нелинейная процедура квантования сопровождается внесением в структуру ЦФ ошибок, источниками которых являются:
- Аналого-цифровой преобразователь (АЦП), вносящий в каждый момент нормированного времени n ошибку квантования, равную разности между дискретным x ( n ) и цифровым
( n ) сигналами, называемую шумом АЦП.
- Умножители, отображающие в структуре ЦФ операцию умножения.
В структурах ЦФ на выходах сумматоров накапливаются суммы локальных произведений, для чего в архитектуре современных ЦПОС предусмотрена операция умножения с накоплением MAC (Multiplier/Accumulator), выполняемая во внутренних регистрах в формате расширенного слова. При сохранении конечного результата в формате слова в каждый момент нормированного времени n вносится ошибка квантования, называемая собственным шумом.
- Квантование коэффициентов редаточной функции ЦФ.
На этапе синтеза коэффициенты bi, ak передаточной функции ЦФ (1) [8] представляются числами типа double (условно бесконечной разрядности). Однако в структуре ЦФ с ФТ они заменяются квантованными коэффициентами i,
k, что вносит не зависящую от времени ошибку квантования коэффициентов, влияющую на характеристики ЦФ.
- Сумматоры, отображающие в структуре ЦФ операцию сложения.
При сложении локальных произведений с ФТ промежуточный результат хранится в формате расширенного слова. Если при сохранении конечного результата в формате слова результат по модулю превосходит единицу, возникают ошибки переполнения.
Модели ЦФ линейная и нелинейная, соответственно, с неквантованными и квантованными данными изображены на рис. 1, где приняты условные обозначения:
-
x ( n ), y ( n ) дискретные, а
( n ),
( n ) цифровые (квантованные) входной и выходной сигналы;
-
H ( z ) передаточная функция с неквантованными, а
( z ) с квантованными коэффициентами.
![Рис. 1. Модели ЦФ: а) линейная с неквантованными данными; б) нелинейная с квантованными данными](https://kit-e.ru/wp-content/uploads/108_1-4.jpg)
а) линейная с неквантованными данными;
б) нелинейная с квантованными данными
Нелинейную модель ЦФ с квантованными данными (рис. 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, правый столбец).
Основные свойства | Полный список свойств |
---|---|
>> 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 (функции анализа квантованных фильтров).
Функция | Назначение |
---|---|
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 представляет собой вектор-столбец |
Квантование коэффициентовв КИХ-фильтрах с ФТ
Процедуру квантования коэффициентов в КИХ-фильтрах с ФТ поясним на примерах.
Пример 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.
общения с 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. АЧХ КИХ-фильтров с неквантованными и квантованными коэффициентами](https://kit-e.ru/wp-content/uploads/108_2-4.jpg)
Для вывода АЧХ вместо АЧХ (дБ) характеристики ослабления (5) [6], выводимой по умолчанию, в пункте меню Analysis (анализ) была выбрана команда Analysis Parameters (параметры анализа) и в раскрывающемся списке Magnitude Display (вывод АЧХ) значение Magnitude (АЧХ).
АЧХ исходного КИХ-фильтра и КИХфильтра с 16-разрядными коэффициентами практически совпали, а с 8-разрядными отличаются.
Выбирая в пункте меню Analysis соответствующие команды, можно вывести другие характеристики КИХ-фильтров.
Часть 5. Моделирование структур цифровых фильтров с фиксированной точкой программными средствами MATLAB: анализ характеристик БИХ-фильтров
1Версии MATLAB R2008a (MATLAB 7.6 Release 2008a).
Литература
- Ingle V., Proakis J. Digital Signal Processing Using MATLAB. Second Edition Thomson.
- Оппенгейм А., Шафер Р. Цифровая обработка сигналов. М.: Техносфера, 2006.
- Сергиенко А. Б. Цифровая обработка сигналов, 2-е изд. СПб.: ПИТЕР, 2006.
- Солонина А. И., Улахович Д. А., Арбузов С. М., Соловьева Е. Б. Основы цифровой обработки сигналов. 2-е изд. СПб.: БХВ-Петербург, 2005.
- Солонина А. И., Арбузов С. М. Цифровая обработка сигналов. Моделирование в MATLAB. СПб.: БХВ-Петербург, 2008.
- Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 1. Синтез оптимальных (по Чебышеву) КИХ-фильтров программными средствами MATLAB // Компоненты и технологии. 2008. № 11.
- Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 2. Синтез оптимальных БИХ-фильтров программными средствами MATLAB // Компоненты и технологии. 2008. № 12.
- Солонина А. Моделирование цифровой обработки сигналов в MATLAB. Часть 3. Описание структур КИХ- и БИХ-фильтров в MATLAB // Компоненты и технологии. 2009. № 1.