Свойства фильтра фиксированной точки

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

Существует различие между фильтрами фиксированной точки и квантованными фильтрами — квантованные фильтры представляют надмножество, которое включает фильтры фиксированной точки.

Когда объекты dfilt имеют свой набор свойств Arithmetic к single или fixed, они квантуются фильтры. Однако после того, как вы устанавливаете свойство Arithmetic на fixed, получившийся фильтр и квантуется и фиксированная точка. Фильтры фиксированной точки выполняют арифметические операции, не позволяя двоичной точке переместиться в ответ на вычисление — отсюда имя фиксированная точка.

С набором свойств Arithmetic к single, означая фильтр использует арифметику с плавающей точкой с одинарной точностью, фильтр позволяет двоичной точке перемещаться во время математических операций, таких как суммы или продукты. Поэтому эти фильтры не могут быть рассмотрены фильтрами фиксированной точки. Но они квантуются фильтры.

Следующие разделы представляют свойства для фильтров фиксированной точки, которые включают все свойства для фильтров с плавающей точкой с одинарной точностью и с двойной точностью также.

Объекты фиксированной точки и фильтры

Фильтры фиксированной точки зависят частично от объектов фиксированной точки из программного обеспечения Fixed-Point Designer™. Вы видите это, когда вы отображаете фильтр фиксированной точки в командной строке.

hd=dfilt.df2t
 
hd =
 
         FilterStructure: 'Direct-Form II Transposed'
              Arithmetic: 'double'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [0x1 double]

set(hd,'arithmetic','fixed')
hd
 
hd =
 
         FilterStructure: 'Direct-Form II Transposed'
              Arithmetic: 'fixed'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
        OutputFracLength: 15             
                                         
         StateWordLength: 16             
          StateAutoScale: true           
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

Посмотрите на свойство Штатов, показанное здесь

States: [1x1 embedded.fi]

embedded.fi обозначения указывает, что состояния представляются объектами фиксированной точки, обычно называемыми объектами fi. Если вы более тщательно изучаете в свойстве States, вы видите, как свойства объекта fi представляют значения для состояний фильтра.

hd.states
 
ans =
 
[]

              DataType: Fixed
               Scaling: BinaryPoint
                Signed: true
            WordLength: 16
        FractionLength: 15

             RoundMode: round
          OverflowMode: saturate
           ProductMode: FullPrecision
  MaxProductWordLength: 128
               SumMode: FullPrecision
      MaxSumWordLength: 128
         CastBeforeSum: true

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

Сводные данные — свойства фильтра фиксированной точки

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

Динамические свойства

Когда вы используете dfilt.structure функция, чтобы создать фильтр, MATLAB® отображает свойства фильтра в командном окне в ответ (если вы не заканчиваете команду точкой с запятой, которая подавляет выходное отображение). Обычно вы видите шесть или семь свойств, в пределах от свойства FilterStructure к PersistentMemory. Эти первые свойства всегда присутствуют в фильтре. Одним из самых важных свойств является Arithmetic. Свойство Arithmetic управляет всеми динамическими свойствами для фильтра.

Динамические свойства становятся доступными, когда вы изменяете другое свойство в фильтре. Например, когда вы изменяете значение свойства Arithmetic на fixed, отображение теперь показывает намного больше свойств для фильтра, все они считали динамическим. Вот пример, который использует прямую форму II фильтров. Сначала создайте фильтр по умолчанию:

hd=dfilt.df2
 
hd =
 
         FilterStructure: 'Direct-Form II'
              Arithmetic: 'double'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [0x1 double]

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

hd.arithmetic='fixed'
 
hd =
 
         FilterStructure: 'Direct-Form II'
              Arithmetic: 'fixed'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

Даже этот список свойств еще не завершен. Изменение значения других свойств, таких как свойства ProductMode или CoeffAutoScale может показать еще больше свойств, которые управляют, как фильтр работает. Помните эту функцию об объектах dfilt и динамических свойствах, когда вы рассматриваете остальную часть этого раздела о свойствах фильтров фиксированной точки.

Важное различие - вы, не может изменить значение свойства, если вы не видите свойство, перечисленное в отображении по умолчанию для фильтра. Ввод имени фильтра в посдказке MATLAB генерирует отображение свойства по умолчанию для именованного фильтра. Используя get (filtername) не генерирует отображение по умолчанию — это перечисляет все свойства фильтра, и те, которых можно изменить и те, которые еще не доступны.

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

PropertyName

Допустимые значения [значение по умолчанию]

Краткое описание

AccumFracLength

Любое положительное или отрицательное целое число битов [29]

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

AccumWordLength

Любое положительное целое число битов [40]

Устанавливает размер слова, используемый, чтобы хранить данные в аккумуляторе/буфере.

Arithmetic

[Двойной], один, зафиксированный

Задает арифметику использование фильтра. Дает вам опции double, single и fixed. Короче говоря, это свойство задает рабочий режим для вашего фильтра.

CastBeforeSum

[Верный] или ложный

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

CoeffAutoScale

[Верный] или ложный

Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы представлять коэффициенты фильтра без переполнения. Выключение этого путем устанавливания значения к false позволяет вам изменить свойства NumFracLength и DenFracLength задать используемую точность.

CoeffFracLength

Любое положительное или отрицательное целое число битов [14]

Установите дробную длину использование фильтра интерпретировать коэффициенты. CoeffFracLength не доступен, пока вы не устанавливаете CoeffAutoScale на false. Скалярные фильтры включают это свойство.

CoeffWordLength

Любое положительное целое число битов [16]

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

DenAccumFracLength

Любое положительное или отрицательное целое число битов [29]

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

DenFracLength

Любое положительное или отрицательное целое число битов [14]

Устанавливает дробную длину использование фильтра интерпретировать коэффициенты знаменателя. DenFracLength всегда доступен, но это только для чтения, пока вы не устанавливаете CoeffAutoScale на false.

Denominator

Любое содействующее значение фильтра [1]

Содержит коэффициенты знаменателя для БИХ-фильтров.

DenProdFracLength

Любое положительное или отрицательное целое число битов [29]

Задает, как алгоритм фильтра интерпретирует результаты операций продукта включающие коэффициенты знаменателя. Можно изменить это значение свойства после того, как вы установите ProductMode на SpecifyPrecision.

DenStateFracLength

Любое положительное или отрицательное целое число битов [15]

Указывает, что дробная длина раньше интерпретировала состояния, сопоставленные с коэффициентами знаменателя в фильтре.

FracDelayЛюбое десятичное значение между 0 и 1 выборкойЗадает дробную задержку, обеспеченную фильтром, в десятичных дробях выборки.
FDAutoScale

[Верный] или ложный

Задает, выбирает ли фильтр автоматически соответствующее масштабирование, чтобы представлять дробное значение задержки без переполнения. Выключение этого путем устанавливания значения к false позволяет вам изменить свойства FDWordLength и FDFracLength задать примененный формат данных.

FDFracLength

Любое положительное или отрицательное целое число битов [5]

Задает дробную длину, чтобы представлять дробную задержку.
FDProdFracLength

Любое положительное или отрицательное целое число битов [34]

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

Любое положительное или отрицательное целое число битов [39]

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

Любое положительное или отрицательное целое число битов [6]

Задает размер слова, чтобы представлять дробную задержку.

DenStateWordLength

Любое положительное целое число битов [16]

Указывает, что размер слова раньше представлял состояния, сопоставленные с коэффициентами знаменателя в фильтре.

FilterInternals

[FullPrecision], SpecifyPrecision

Средства управления, устанавливает ли фильтр выходное слово и дробные длины, и слово аккумулятора и дробные длины автоматически поддерживать лучшие результаты точности во время фильтрации. Значение по умолчанию, FullPrecision, устанавливает автоматическое слово и дробное определение длины фильтром. SpecifyPrecision представляет вывод и связанные с аккумулятором свойства, таким образом, можно установить собственное слово и фракционировать длины для них.

FilterStructure

Не применяется.

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

InputFracLength

Любое положительное или отрицательное целое число битов [15]

Задает дробную длину использование фильтра, чтобы интерпретировать данные, которые будут обработаны фильтром.

InputWordLength

Любое положительное целое число битов [16]

Задает размер слова, примененный, чтобы представлять входные данные.

Ladder

Любые лестничные коэффициенты в типе данных с двойной точностью [1]

Фильтры latticearma включают это свойство сохранить лестничные коэффициенты.

LadderAccumFrac Length

Любое положительное или отрицательное целое число битов [29]

Фильтры latticearma используют, это, чтобы задать дробную длину применилось к значениям, выведенным аккумулятором, который хранит результаты лестничных вычислений.

LadderFracLength

Любое положительное или отрицательное целое число битов [14]

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

Lattice

Любые коэффициенты структуры решетки. Никакое значение по умолчанию.

Хранит коэффициенты решетки для основанных на решетке фильтров.

LatticeAccumFrac Length

Любое положительное или отрицательное целое число битов [29]

Задает, как аккумулятор выводит результаты операций на коэффициентах решетки.

LatticeFracLength

Любое положительное или отрицательное целое число битов [15]

Указывает, что дробная длина применилась к коэффициентам решетки.

MultiplicandFrac Length

Любое положительное или отрицательное целое число битов [15]

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

MultiplicandWord Length

Любое положительное целое число битов [16]

Наборы размер слова применились к входу значений умножить операции (множимые). Структура фильтра df1t включает это свойство.

NumAccumFracLength

Любое положительное или отрицательное целое число битов [29]

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

Numerator

Любые коэффициенты фильтра с двойной точностью [1]

Содержит содействующие значения числителя для фильтра.

NumFracLength

Любое положительное или отрицательное целое число битов [14]

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

NumProdFracLength

Любое положительное или отрицательное целое число битов [29]

Задает, как алгоритм фильтра интерпретирует результаты операций продукта включающие коэффициенты числителя. Можно изменить значение свойства после того, как вы установите ProductMode на SpecifyPrecision.

NumStateFracLength

Любое положительное или отрицательное целое число битов [15]

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

NumStateWordLength

Любое положительное целое число битов [16]

Для БИХ-фильтров это задает размер слова, применился к состояниям числителя фильтра. Указывает, что размер слова раньше интерпретировал состояния, сопоставленные с коэффициентами числителя в фильтре.

OutputFracLength

Любое положительное или отрицательное целое число битов — [15] или [12] биты в зависимости от структуры фильтра

Определяет, как фильтр интерпретирует отфильтрованные данные. Можно изменить значение OutputFracLength после того, как вы установите OutputMode на SpecifyPrecision.

OutputMode

[AvoidOverflow], BestPrecision, SpecifyPrecision

Устанавливает режим использование фильтра масштабировать отфильтрованные входные данные. У вас есть следующий выбор:

  • AvoidOverflow — предписывает, чтобы фильтр, чтобы установить выходные данные фракционировал длину, чтобы не заставлять данные переполняться.

  • BestPrecision — предписывает, чтобы фильтр, чтобы установить выходные данные фракционировал длину, чтобы максимизировать точность в выходных данных.

  • Определение точности позволяет вам установить дробную длину, используемую отфильтрованными данными.

OutputWordLength

Любое положительное целое число битов [16]

Определяет размер слова, используемый для отфильтрованных данных.

OverflowMode

Насыщайте или [перенеситесь]

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

ProductFracLength

Любое положительное или отрицательное целое число битов [29]

Для вывода от операции продукта это устанавливает дробную длину, используемую, чтобы интерпретировать числовые данные. Это свойство становится перезаписываемым (можно изменить значение) после того, как вы устанавливаете ProductMode на SpecifyPrecision.

ProductMode

[FullPrecision], KeepLSB, KeepMSB, SpecifyPrecision

Определяет, как фильтр обрабатывает вывод операций продукта. Выберите из полной точности (FullPrecision), или сохранить ли старший значащий бит (KeepMSB) или младший значащий бит (KeepLSB) в результате, когда необходимо сократить слова данных. Для вас, чтобы смочь установить точность (дробная длина) используемый выводом от умножения, вы устанавливаете ProductMode на SpecifyPrecision.

ProductWordLength

Любое положительное число битов. Значение по умолчанию равняется 16 или 32 в зависимости от структуры фильтра

Задает размер слова, чтобы использовать для результатов операций умножения. Это свойство становится перезаписываемым (можно изменить значение) после того, как вы устанавливаете ProductMode на SpecifyPrecision.

PersistentMemory

True или [false]

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

RoundMode

[Конвергентный], перекройте, зафиксируйте, поставьте в тупик, самый близкий, вокруг

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

  • потолок- Вокруг к положительной бесконечности.

  • convergent - Вокруг к самому близкому представимому целому числу. Связывает к самому близкому даже сохраненному целому числу. Это наименее смещено из методов, доступных в этом программном обеспечении.

  • фиксация- Вокруг к нулю.

  • пол- Вокруг к отрицательной бесконечности.

  • самый близкий- Вокруг к самому близкому. Связывает к положительной бесконечности.

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

Выбор, который вы делаете, влияет только на аккумулятор и выходную арифметику. Коэффициент и входная арифметика всегда вокруг. Наконец, продукты никогда не переполняются — они поддерживают полную точность.

ScaleValueFracLength

Любое положительное или отрицательное целое число битов [29]

Масштабируйтесь значения работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения шкалы путем установки дробной длины. Доступный только, когда вы отключаете CoeffAutoScale путем установки его на false.

ScaleValues

[2 x 1 двойное] массив со значениями 1

Хранит масштабирующиеся значения для разделов в фильтрах SOS.

Signed

[Верный] или ложный

Задает ли использование фильтра подписанные или коэффициенты фиксированной точки без знака. Только коэффициенты отражают эту установку свойства.

sosMatrix

[1 0 0 1 0 0]

Содержит коэффициенты фильтра как значения свойств. Отображается матрица в формате [разделяет x тип данных коэффициентов/раздела]. Матрица SOS [15x6 double] представляет фильтр с 6 коэффициентами на раздел и 15 разделов, с помощью типа данных double, чтобы представлять коэффициенты.

SectionInputAuto Scale

[Верный] или ложный

Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы предотвратить переполнение данными, вводящими раздел фильтра SOS. Установка этого свойства к false позволяет вам изменить свойство SectionInputFracLength задать используемую точность. Доступный только для фильтров SOS.

SectionInputFrac Length

Любое положительное или отрицательное целое число битов [29]

Значения раздела работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения раздела между разделами фильтра путем установки дробной длины. Это применяется к данным, вводящим раздел. Сравните с SectionOutputFracLength. Доступный только, когда вы отключаете SectionInputAutoScale путем установки его на false.

SectionInputWord Length

Любое положительное или отрицательное целое число битов [29]

Устанавливает размер слова, используемый, чтобы представлять данные, перемещающиеся в раздел фильтра SOS.

SectionOutputAuto Scale

[Верный] или ложный

Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы предотвратить переполнение данными, оставляя раздел фильтра SOS. Установка этого свойства к false позволяет вам изменить свойство SectionOutputFracLength задать используемую точность.

SectionOutputFrac Length

Любое положительное или отрицательное целое число битов [29]

Значения раздела работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения раздела между разделами фильтра путем установки дробной длины. Это применяется к данным, оставляя раздел. Сравните с SectionInputFracLength. Доступный после того, как вы отключаете SectionOutputAutoScale путем установки его на false.

SectionOutputWord Length

Любое положительное или отрицательное целое число битов [32]

Устанавливает размер слова, используемый, чтобы представлять данные, перемещающиеся из одного раздела фильтра SOS.

StateFracLength

Любое положительное или отрицательное целое число битов [15]

Позволяет вам установить дробную длину, примененную, чтобы интерпретировать состояния фильтра.

States

[1x1 встроил fi]

Содержит состояния фильтра прежде, во время, и после работы фильтра. Состояния действуют как память фильтра между фильтрацией выполнений или сеансов. Заметьте, что состояния используют объекты fi со связанными свойствами от тех объектов. Для получения дополнительной информации обратитесь к filtstates.

StateWordLength

Любое положительное целое число битов [16]

Устанавливает размер слова, используемый, чтобы представлять состояния фильтра.

TapSumFracLength

Любое положительное или отрицательное целое число битов [15]

Устанавливает дробную длину, используемую, чтобы представлять значения касания фильтра, кроме того, операции. Это доступно после того, как вы установите TapSumMode на false. Симметричные и антисимметричные КИХ-фильтры включают это свойство.

TapSumMode

FullPrecision, KeepLSB, [KeepMSB], SpecifyPrecision

Определяет, как аккумулятор, который выходные параметры сохранили, которые включают веса касания фильтра. Выберите из полной точности (FullPrecision), чтобы предотвратить переполнение, или сохранить ли старшие значащие биты (KeepMSB) или младшие значащие биты (KeepLSB) при выводе результатов аккумулятора. Чтобы позволить вам установить точность (дробная длина) используемый выводом от аккумулятора, установите FilterInternals на SpecifyPrecision.

Симметричные и антисимметричные КИХ-фильтры включают это свойство.

TapSumWordLength

Любое положительное число битов [17]

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

Детали свойства для фильтров фиксированной точки

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

Объекты фильтра имеют свойства, которым вы присваиваете значения свойств. Вы используете эти значения свойств, чтобы присвоить различные характеристики фильтрам, включая которые вы создаете,

  • Тип арифметики, чтобы использовать в фильтрации операций

  • Структура фильтра раньше реализовывала фильтр (не свойство, которое можно установить или изменить — вы выбираете его dfilt.structure функция, которую вы выбираете),

  • Местоположения квантизации и операций броска в фильтре

  • Форматы данных используются в квантовании, броске и фильтрации операций

Детали свойств, сопоставленных с фильтрами фиксированной точки, описаны в алфавитном порядке на следующих страницах.

AccumFracLength

За исключением фильтров пространства состояний, весь dfilt возражает, что зафиксированная арифметика использования имеет это свойство, которое задает дробную длину, применился к данным в аккумуляторе. Объединенный с AccumWordLength, AccumFracLength помогает полностью задать как аккумулятор выходные данные после обработки операций сложения. Как со всеми дробными свойствами длины, AccumFracLength может быть любым целым числом, включая целые числа, больше, чем AccumWordLength и положительные или отрицательные целые числа.

AccumWordLength

Вы используете AccumWordLength, чтобы задать длину слова данных, используемую в аккумуляторе. Установите это свойство на значение, которое совпадает с вашим намеченным оборудованием. Например, много цифровых сигнальных процессоров используют 40-битные аккумуляторы, таким образом, устанавливает AccumWordLength на 40 в вашем фильтре фиксированной точки:

set(hq,'arithmetic','fixed');
set(hq,'AccumWordLength',40);

Обратите внимание на то, что AccumWordLength только применяется к фильтрам, значением свойства Arithmetic которых является fixed.

Арифметика

Возможно, самое важное свойство, когда вы работаете с объектами dfilt, Arithmetic, определяет тип арифметики использование фильтра, и свойства или квантизаторы, которые составляют фиксированную точку или квантованный фильтр. Вы используете векторы символов, чтобы установить значение свойства Arithmetic.

Следующая таблица показывает векторы допустимого символа для свойства Arithmetic. После таблицы каждый вектор символов свойства появляется с более подробной информацией о том, что происходит, когда вы выбираете вектор символов как значение для Arithmetic в вашем dfilt.

Арифметическое свойство

Информируйте описание эффекта на фильтр

double

Все операции фильтрации и коэффициенты используют представления с плавающей точкой с двойной точностью и математику. Когда вы используете dfilt.structure, чтобы создать объект фильтра, double является значением по умолчанию для свойства Arithmetic.

single

Все операции фильтрации и коэффициенты используют представления с плавающей точкой с одинарной точностью и математику.

fixed

Эта опция применяет выбранные значения по умолчанию для свойств в объекте фильтра фиксированной точки, включая такие свойства как содействующие размеры слова, дробные длины и различные рабочие режимы. Обычно значения по умолчанию совпадают с теми, вы используете на многих цифровых сигнальных процессорах. Позволяет подписанные зафиксированные типы данных только. Фильтры вычислений с фиксированной точкой доступны только, когда вы устанавливаете программное обеспечение Fixed-Point Designer с этим тулбоксом.

'double'.  Когда вы используете один из dfilt.structure методы, чтобы создать фильтр, значением свойства Arithmetic является double по умолчанию. Ваш фильтр идентичен тому же фильтру без свойства Arithmetic, как вы создали бы, если бы вы использовали программное обеспечение Signal Processing Toolbox™.

Double означает, что фильтр использует арифметику с плавающей точкой с двойной точностью во всех операциях при фильтрации:

  • Весь вход к фильтру должен удвоить тип данных. Любой другой тип данных возвращает ошибку.

  • Состояния и вывод, удваивается также.

  • Все внутренние вычисления сделаны в двойной математике.

Когда вы используете коэффициенты фильтра типа данных double, ссылку и квантованный (фиксированная точка), коэффициенты фильтра идентичны. Фильтр хранит ссылочные коэффициенты как двойной тип данных.

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

  • Входные данные должны быть одним типом данных. Другие типы данных возвращают ошибки.

  • Состояния фильтра и фильтр выходное использование один тип данных.

Когда вы выбираете single, можно обеспечить коэффициенты фильтра любым из двух способов:

  • Двойные коэффициенты типа данных. С набором Arithmetic к single фильтр бросает двойные коэффициенты типа данных к одному представлению типа данных.

  • Один тип данных. Они остаются неизменными фильтром.

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

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

Чтобы установить значение свойства Arithmetic, создайте свой фильтр, затем используйте set, чтобы изменить настройки Arithmetic, как показано в этом примере с помощью прямого КИХ-фильтра формы.

b=fir1(7,0.45);

hd=dfilt.dffir(b)
 
hd =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'double'
               Numerator: [1x8 double]
        PersistentMemory: false
                  States: [7x1 double]

set(hd,'arithmetic','single')
hd
 
hd =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'single'
               Numerator: [1x8 double]
        PersistentMemory: false
                  States: [7x1 single]

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

Примечание

Опция fixed для свойства Arithmetic доступна только, когда вы устанавливаете программное обеспечение Fixed-Point Designer, а также программное обеспечение DSP System Toolbox™.

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

  • фиксированный размер слова.

  • фиксированный размер и выделенный аккумулятор и регистры продукта.

  • способность сделать или насыщение или перенести арифметику.

  • то, что несколько округляющихся режимов доступны.

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

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

В этом примере объекта dfilt get возвращает значения по умолчанию для структур dfilt.df1t.

[b,a]=butter(6,0.45);
hd=dfilt.df1(b,a)
 
hd =
 
         FilterStructure: 'Direct-Form I'
              Arithmetic: 'double'
               Numerator: [1x7 double]
             Denominator: [1x7 double]
        PersistentMemory: false
                  States: Numerator:  [6x1 double]
                          Denominator:[6x1 double]


set(hd,'arithmetic','fixed')
get(hd)
        PersistentMemory: false
         FilterStructure: 'Direct-Form I'
                  States: [1x1 filtstates.dfiir]
               Numerator: [1x7 double]
             Denominator: [1x7 double]
              Arithmetic: 'fixed'
         CoeffWordLength: 16
          CoeffAutoScale: 1
                  Signed: 1
               RoundMode: 'convergent'
            OverflowMode: 'wrap'
         InputWordLength: 16
         InputFracLength: 15
             ProductMode: 'FullPrecision'
        OutputWordLength: 16
        OutputFracLength: 15
           NumFracLength: 16
           DenFracLength: 14
       ProductWordLength: 32
       NumProdFracLength: 31
       DenProdFracLength: 29
         AccumWordLength: 40
      NumAccumFracLength: 31
      DenAccumFracLength: 29
           CastBeforeSum: 1

Вот отображение по умолчанию для hd.

hd
 
hd =
 
         FilterStructure: 'Direct-Form I'
              Arithmetic: 'fixed'
               Numerator: [1x7 double]
             Denominator: [1x7 double]
        PersistentMemory: false
                  States: Numerator:  [6x1 fi]
                          Denominator:[6x1 fi]


         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
        OutputFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

Этот второй пример показывает значения свойств по умолчанию для объектов фильтра dfilt.latticemamax, с помощью коэффициентов от фильтра fir1.

b=fir1(7,0.45)


hdlat=dfilt.latticemamax(b)
 
hdlat =
 
         FilterStructure: [1x45 char]
              Arithmetic: 'double'
                 Lattice: [1x8 double]
        PersistentMemory: false
                  States: [8x1 double]

hdlat.arithmetic='fixed'
 
hdlat =
 
         FilterStructure: [1x45 char]
              Arithmetic: 'fixed'
                 Lattice: [1x8 double]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

В отличие от single или опций double для Arithmetic, fixed использует свойства задать слово и дробные длины для каждого фрагмента вашего фильтра. Путем изменения значения свойства любого из свойств вы управляете своей производительностью фильтра. Каждый размер слова и дробное свойство длины независимы — устанавливает тот, в котором вы нуждаетесь, и другие остаются неизменными, такие как установка входного размера слова с InputWordLength, при оставлении дробной длины тем же самым.

d=fdesign.lowpass('n,fc',6,0.45)
 
d =
 
               Response: 'Lowpass with cutoff'
          Specification: 'N,Fc'
            Description: {2x1 cell}
    NormalizedFrequency: true
                     Fs: 'Normalized'
            FilterOrder: 6
                Fcutoff: 0.4500


designmethods(d)


Design Methods for class fdesign.lowpass:


butter

hd=butter(d)
 
hd =
 
 FilterStructure: 'Direct-Form II, Second-Order Sections'
      Arithmetic: 'double'
       sosMatrix: [3x6 double]
     ScaleValues: [4x1 double]
PersistentMemory: false
          States: [2x3 double]

hd.arithmetic='fixed'
 
hd =
 
  FilterStructure: 'Direct-Form II, Second-Order Sections'
       Arithmetic: 'fixed'
        sosMatrix: [3x6 double]
      ScaleValues: [4x1 double]
 PersistentMemory: false
           States: [1x1 embedded.fi]

  CoeffWordLength: 16             
   CoeffAutoScale: true           
           Signed: true           
                                         
  InputWordLength: 16             
  InputFracLength: 15             
                                         
 SectionInputWordLength: 16             
  SectionInputAutoScale: true           
                                         
 SectionOutputWordLength: 16             
 Section OutputAutoScale: true           
                                         
       OutputWordLength: 16             
             OutputMode: 'AvoidOverflow'
                                         
        StateWordLength: 16             
        StateFracLength: 15             
                                         
            ProductMode: 'FullPrecision'

        AccumWordLength: 40             
          CastBeforeSum: true           
                                         
              RoundMode: 'convergent'   
           OverflowMode: 'wrap' 

hd.inputWordLength=12
 
hd =
 
 FilterStructure: 'Direct-Form II, Second-Order Sections'
      Arithmetic: 'fixed'
       sosMatrix: [3x6 double]
     ScaleValues: [4x1 double]
PersistentMemory: false
                  States: [1x1 embedded.fi]

  CoeffWordLength: 16             
   CoeffAutoScale: true           
           Signed: true           
                                         
  InputWordLength: 12             
  InputFracLength: 15             
                                         
  SectionInputWordLength: 16             
   SectionInputAutoScale: true           
                                         
 SectionOutputWordLength: 16             
  SectionOutputAutoScale: true           
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

Заметьте, что свойства для решетки фильтруют hdlat и прямую форму II фильтров, hd отличается, как приличествует их отличающимся структурам фильтра. Кроме того, некоторые свойства характерны для обоих объектов, таковы как RoundMode и PersistentMemory и ведут себя тот же путь в обоих объектах.

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

Дробная длина, заданная как количество дробных битов (биты справа от двоичной точки), верна только, когда дробная длина положительна и меньше чем или равна размеру слова. В обозначении формата MATLAB можно использовать [длину части размера слова]. Например, для формата [16 16], вторые 16 (дробная длина) являются количеством дробных битов или битов справа от двоичной точки. В этом примере все 16 битов справа от двоичной точки.

Также возможно иметь форматы фиксированной точки [16 18] или [16 - 45]. В этих случаях дробная длина больше не может быть количеством битов справа от двоичной точки, поскольку формат говорит, что размер слова равняется 16 — справа не может быть 18 дробных битов длины. Как отрицательное число битов для дробной длины, такой может там быть как [16 - 45]?

Лучший способ думать о формате фиксированной точки [длина части размера слова] и что это означает, состоит в том, что представление номера фиксированной точки является взвешенной суммой степеней двойки, управляемых дробной длиной или дополнительным представлением two номера фиксированной точки.

Рассмотрите формат [B L], где дробная длина L может быть положительной, отрицательной, 0, больше, чем B (размер слова) или меньше, чем B. (B и L всегда целые числа, и B всегда положителен.)

Учитывая бинарный вектор символов b (1) b (2) b (3)... b (B), чтобы определить two's-дополнительное значение вектора символов в формате, описанном [B L], используют значение отдельных битов в бинарном векторе символов в следующей формуле, где b (1) является первым битом (и старший значащий бит, MSB), b (2) является вторым, и на до b (B).

Десятичным числовым значением, которое представляют те биты, дают

value =-b(1)*2^(B-L-1)+b(2)*2^(B-L-2)+b(3)*2^(B-L-3)+...+ b(B)*2^(-L)

L, дробная длина, представляет отрицание веса последнего, или младшего значащего бита (LSB). L является также размером шага или точностью, обеспеченной данной дробной длиной.

Точность.  Вот то, как точность работает.

Когда все биты бинарного вектора символов являются нулем за исключением LSB (который поэтому равен одному), значение, представленное битным вектором символов, дано 2 (-L). Если L отрицателен, например, L =-16, значение 216. Самый маленький шаг между числами, которые могут быть представлены в формате, где L =-16 дан 1 x 216 (самый правый термин в формуле выше), который является 65536. Обратите внимание, что точность не зависит от размера слова.

Смотрите на другой пример. Когда набор размера слова к 8 битам, десятичное значение 12 представлено в двоичном файле 00 001 100. То, что 12 десятичный эквивалент 00 001 100, говорит вам, что вы используете [8 0] представление формата данных — размер слова - 8 битов и дробная длина 0 битов, и размер шага или точность (самое маленькое различие между двумя смежными значениями в формате [8,0], 20=1.

Предположим, что вы планируете сохранить только верхние 5 битов и отбросить другие три. Получившаяся точность после удаления самых правых трех битов прибывает из веса самого низкого остающегося бита, пятого бита слева, который является 23=8, таким образом, формат был бы [5,-3].

Обратите внимание на то, что в этом формате размер шага равняется 8, я не могу представлять числа, которые являются между множителями 8.

В MATLAB, с установленным программным обеспечением Fixed-Point Designer:

x=8;
q=quantizer([8,0]); % Word length = 8, fraction length = 0
xq=quantize(q,x);
binxq=num2bin(q,xq);
q1=quantizer([5 -3]); % Word length = 5, fraction length = -3
xq1 = quantize(q1,xq);
binxq1=num2bin(q1,xq1);
binxq

binxq =

00001000

binxq1

binxq1 =

00001

Но заметьте, что в [5,-3] формат, 00001 является дополнительным представлением two для 8, не для 1; q = quantizer([8 0]) и q1 = quantizer([5 -3]) не являются тем же самым. Они покрывают о той же области значений — range(q)> range(q1) — но их шаг квантования отличается — eps(q) = 8, и eps(q1)=1.

Посмотрите на еще один пример. Когда вы создаете квантизатор q

q = quantizer([a,b])

первым элементом в [a,b] является a, размер слова, используемый для квантования. Второй элемент в выражении, b, связан с шагом квантования — числовое различие между двумя самыми близкими значениями, которые может представлять квантизатор. Это также связано с весом, данным LSB. Обратите внимание на то, что 2^(-b) = eps(q).

Теперь создайте два квантизатора, q1 и q2. Позвольте q1 использовать формат [32,0] и позволить q2 использовать формат [16,-16].

q1 = quantizer([32,0])
q2 = quantizer([16,-16])

q1 квантизаторов и q2 покрывают ту же область значений, но q2 имеет меньше точности. Это покрывает область значений на шагах 216, в то время как q покрывает область значений на шагах 1.

Эта потерянная точность происходит из-за (или может использоваться к модели), вывод 16 младших значащих битов.

Важный момент, чтобы понять - то, что в объектах dfilt и фильтрации вы управляете, какие биты несут от суммы и операций продукта в фильтре к фильтру, выведенному путем установки формата для вывода от операции продукта или суммы.

Например, если вы используете [16 0] как выходной формат для 32-битного результата операции суммы, когда исходный формат [32 0], вы берете более низкие 16 битов из результата. Если вы используете [16 - 16], вы берете более высокие 16 битов исходных 32 битов. Вы могли даже взять 16 битов, где-нибудь промежуточных 32 бита путем выбора чего-то как [16 - 8], но вы, вероятно, не хотите делать это.

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

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

CastBeforeSum

Установка свойства CastBeforeSum определяет, как фильтр обрабатывает входные значения, чтобы суммировать операции в фильтре. После того, как вы установите свой фильтр значение свойства Arithmetic к fixed, у вас есть опция использования CastBeforeSum, чтобы управлять типом данных некоторых входных параметров (слагаемые) к суммированию в вашем фильтре. Чтобы определить, какие слагаемые отражают установку свойства CastBeforeSum, обратитесь к странице с описанием для схемы потока сигналов для структуры фильтра.

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

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

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

Значение свойства

Описание

false

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

true

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

Другая точка — с набором CastBeforeSum к false, процесс реализации фильтра вставляет промежуточный формат типа данных, чтобы содержать временно сумму полной точности входных параметров. Отдельный блок Convert выполняет процесс кастинга результата сложения к формату аккумулятора. Этот промежуточный формат данных происходит, потому что блок Sum в Simulink® всегда бросает вход (слагаемые) к типу выходных данных.

Схемы Настроек CastBeforeSum.  Когда CastBeforeSum является false, элементы суммы в схемах потока сигналов фильтра выглядят так:

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

Когда CastBeforeSum является true, элементы суммы в схемах потока сигналов фильтра выглядят так:

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

CoeffAutoScale

То, как фильтр представляет коэффициенты фильтра, зависит от значения свойства CoeffAutoScale. Когда вы создаете объект dfilt, вы используете коэффициенты в формате с двойной точностью. Преобразование объекта dfilt к вычислениям с фиксированной точкой обеспечивает коэффициенты в представление фиксированной точки. Представление использование фильтра зависит от того, является ли значением CoeffAutoScale true или false.

  • CoeffAutoScale = true означает, что фильтр выбирает дробную длину, чтобы поддержать значение коэффициентов максимально близко к значениям с двойной точностью. Когда вы изменяетесь, размер слова применился к коэффициентам, объект фильтра изменяет дробную длину, чтобы попытаться разместить изменение. true является настройкой по умолчанию.

  • CoeffAutoScale = false удаляет автоматическое масштабирование дробной длины для коэффициентов и представляет свойство, которое управляет содействующей длиной части, таким образом, можно изменить его. Например, если фильтр является прямым КИХ-фильтром формы, установка CoeffAutoScale =, false представляет свойство NumFracLength, которое указывает, что дробная длина применилась к коэффициентам числителя. Если фильтр является БИХ-фильтром, установка CoeffAutoScale =, false представляет обоих свойства NumFracLength и DenFracLength.

Вот пример использования CoeffAutoScale с прямым фильтром формы.

hd2=dfilt.dffir([0.3 0.6 0.3])
 
hd2 =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'double'
               Numerator: [0.3000 0.6000 0.3000]
        PersistentMemory: false
                  States: [2x1 double]

hd2.arithmetic='fixed'
 
hd2 =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'fixed'
               Numerator: [0.3000 0.6000 0.3000]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         

К этой точке коэффициенты фильтра сохраняют исходные значения от того, когда вы создали фильтр как показано в свойстве Numerator. Теперь измените значение свойства CoeffAutoScale от true до false.

hd2.coeffautoScale=false
 
hd2 =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'fixed'
               Numerator: [0.3000 0.6000 0.3000]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: false          
           NumFracLength: 15             
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         

Со свойством NumFracLength, теперь доступным, измените размер слова на 5 битов.

Заметьте содействующие значения. Установка CoeffAutoScale к false удаляет автоматическую дробную корректировку длины, и коэффициенты фильтра не могут быть представлены текущим форматом [5 15] — размер слова 5 битов, дробная длина 15 битов.

hd2.coeffwordlength=5
 
hd2 =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'fixed'
               Numerator: [4.5776e-004 4.5776e-004 4.5776e-004]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 5              
          CoeffAutoScale: false          
           NumFracLength: 15             
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

Восстановление CoeffAutoScale к true идет некоторым путем к фиксации содействующих значений. Автоматически масштабирование коэффициента фракционировало результаты длины в установке дробной длины к 4 битам. Можно проверять это с get(hd2) как показано ниже.

hd2.coeffautoScale=true
 
hd2 =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'fixed'
               Numerator: [0.3125 0.6250 0.3125]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 5              
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         

get(hd2)
        PersistentMemory: false
FilterStructure: 'Direct-Form FIR'
                  States: [1x1 embedded.fi]
               Numerator: [0.3125 0.6250 0.3125]
              Arithmetic: 'fixed'
         CoeffWordLength: 5
          CoeffAutoScale: 1
                  Signed: 1
               RoundMode: 'convergent'
            OverflowMode: 'wrap'
         InputWordLength: 16
         InputFracLength: 15
        OutputWordLength: 16
              OutputMode: 'AvoidOverflow'
             ProductMode: 'FullPrecision'
           NumFracLength: 4
        OutputFracLength: 12
       ProductWordLength: 21
       ProductFracLength: 19
         AccumWordLength: 40
         AccumFracLength: 19
           CastBeforeSum: 1

Очевидно пяти битов недостаточно, чтобы представлять коэффициенты точно.

CoeffFracLength

Скалярные фильтры фиксированной точки, что вы создаете использование использование dfilt.scalar это свойство задать дробную длину, применились к скалярным коэффициентам фильтра. Как содействующая длина части связанные свойства для КИХ, решетки и БИХ-фильтров, CoeffFracLength не отображены для скалярных фильтров, пока вы не устанавливаете CoeffAutoScale на false. Если вы изменяете автоматическое масштабирование, можно установить дробную длину для коэффициентов к любому значению, которого вы требуете.

Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 14 битов с CoeffWordlength 16 битов.

CoeffWordLength

Один первичный фактор в разработке фильтров для оборудования является длиной слова данных. CoeffWordLength задает размер слова для них хранение данных и арифметические местоположения:

  • Числитель и знаменатель фильтруют коэффициенты

  • Коснитесь суммы в объектах фильтра dfilt.dfasymfir и dfilt.dfsymfir

  • Вход раздела, множимое и значения состояния в объектах фильтра SOS прямой формы, таких как dfilt.df1t и dfilt.df2

  • Масштабируйте значения в фильтрах второго порядка

  • Решетка и лестничные коэффициенты в объектах фильтра решетки, таких как dfilt.latticearma и dfilt.latticemamax

  • Получите в dfilt.scalar

Установка этого значения свойства управляет размером слова для перечисленных данных. В большинстве случаев слова данных в этом списке имеют отдельные дробные свойства длины задать связанные дробные длины.

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

DenAccumFracLength

Структуры фильтра df1, df1t, df2 и df2t, которые используют арифметику fixed, имеют это свойство, которое задает дробную длину, применились к коэффициентам знаменателя в аккумуляторе. В сочетании с AccumWordLength свойства полностью задают, как аккумулятор выходные данные сохранил там.

Как со всеми дробными свойствами длины, DenAccumFracLength может быть любым целым числом, включая целые числа, больше, чем AccumWordLength и положительные или отрицательные целые числа. Чтобы смочь изменить значение свойства для этого свойства, вы устанавливаете FilterInternals на SpecifyPrecision.

DenFracLength

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

Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 15 битов с CoeffWordLength 16 битов.

Знаменатель

Коэффициенты знаменателя для вашего БИХ-фильтра, взятого из прототипа, с которого вы запускаете, хранятся в этом свойстве. Обычно это - массив 1 на n данных в двойном формате, где N является длиной фильтра.

Все БИХ-объекты фильтра включают Denominator, кроме основанных на решетке фильтров, которые хранят их коэффициенты в свойстве Lattice и фильтры раздела второго порядка, такие как dfilt.df1tsos, которые используют свойство SosMatrix содержать коэффициенты для разделов.

DenProdFracLength

Свойство всех прямых БИХ формы, объекты dfilt, кроме тех, которые реализуют разделы второго порядка, DenProdFracLength, задают дробную длину, применилось к выводу данных от операций продукта, которые фильтр выполняет на коэффициентах знаменателя.

Смотрение на поток сигналов схематически изображает для фильтра dfilt.df1t, например, вы видите, что знаменатели и числители обработаны отдельно. Когда вы устанавливаете ProductMode на SpecifyPrecision, можно изменить настройки DenProdFracLength вручную. В противном случае, для операций умножения, которые используют коэффициенты знаменателя, фильтр устанавливает дробную длину, как задано установкой ProductMode.

DenStateFracLength

Когда вы смотрите на блок-схему для объекта фильтра dfilt.df1sos, состояния, сопоставленные с содействующими операциями знаменателя, берут дробную длину из этого свойства. В сочетании со свойством DenStateWordLength эти свойства полностью задают, как фильтр интерпретирует состояния.

Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 15 битов с DenStateWordLength 16 битов.

DenStateWordLength

Когда вы смотрите на блок-схему для объекта фильтра dfilt.df1sos, состояния, сопоставленные с содействующими операциями знаменателя, берут формат данных из этого свойства и свойства DenStateFracLength. В комбинации эти свойства полностью задают, как фильтр интерпретирует состояние, которое это использует.

По умолчанию значение составляет 16 битов с DenStateFracLength 15 битов.

FilterInternals

Подобно панели FilterInternals в FDATool это свойство управляет, устанавливает ли фильтр выходное слово и дробные длины автоматически, и слово аккумулятора и дробные длины автоматически также, чтобы поддержать лучшие результаты точности во время фильтрации. Значение по умолчанию, FullPrecision, устанавливает автоматическое слово и дробное определение длины фильтром. Установка FilterInternals к SpecifyPrecision представляет вывод и связанные с аккумулятором свойства, таким образом, можно установить собственное слово и фракционировать длины для них. Обратите внимание на то, что

FilterStructure

Каждый объект dfilt имеет свойство FilterStructure. Это - свойство только для чтения, содержащее вектор символов, который объявляет структуру объекта фильтра, который вы создали.

Когда вы создаете объекты фильтра, значение свойства FilterStructure возвращено содержащий один из векторов символов, показанных в следующей таблице. Свойство FilterStructure указывает на архитектуру фильтра и прибывает от конструктора, которого вы используете, чтобы создать фильтр.

После того, как вы создадите объект фильтра, вы не можете изменить значение свойства FilterStructure. Чтобы сделать фильтры, которые используют отличные структуры, вы создаете новые фильтры с помощью соответствующих методов или используете convert, чтобы переключиться на новую структуру.

Значение по умолчанию.  Поскольку это зависит от конструктора, которого вы используете, и конструктор включает определение структуры фильтра, нет никакого значения по умолчанию. Когда вы пытаетесь создать фильтр, не задавая структуру, MATLAB возвращает ошибку.

Имя конструктора фильтров

Свойство FilterStructure и тип фильтра

'dfilt.df1'

Прямая форма I

'dfilt.df1sos'

Прямая форма я фильтрую реализованные использующие разделы второго порядка

'dfilt.df1t'

Прямая форма я транспонировал

'dfilt.df2'

Прямая форма II

'dfilt.df2sos'

Прямая форма II фильтров, реализованных с помощью разделов второго порядка

'dfilt.df2t'

Прямая форма II транспонированный

'dfilt.dfasymfir'

Антисимметричный конечный импульсный ответ (FIR). Четные и нечетные формы.

'dfilt.dffir'

Прямой КИХ формы

'dfilt.dffirt'

Прямой КИХ формы транспонирован

'dfilt.latticeallpass'

Образуйте решетку allpass

'dfilt.latticear'

Образуйте решетку авторегрессивный (AR)

'dfilt.latticemamin'

Образуйте решетку фазу минимума скользящего среднего значения (MA)

'dfilt.latticemamax'

Образуйте решетку фазу максимума скользящего среднего значения (MA)

'dfilt.latticearma'

Образуйте решетку ARMA

'dfilt.dfsymfir'

Симметричный КИХ. Четные и нечетные формы

'dfilt.scalar'

Скаляр

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

Например, квантование продукта, или числитель или знаменатель, следует за каждым продуктом (усиление), элемент и квантование суммы, также или числитель или знаменатель, следуют за каждым элементом суммы. Данные показывают набор значения свойства Arithmetic к fixed.

БИХ-Структура Фильтра df2 Включая Объекты Форматирования, с Арифметическим зафиксированным Значением свойства

Когда ваш фильтр df2 использует набор свойств Arithmetic для fixed, структура фильтра содержит функции форматирования, показанные в схеме. Форматы, включенные в структуру, являются объектами фиксированной точки, которые включают свойства установить различное слово и дробные форматы длины. Например, свойства NumFormat или DenFormat фильтра вычислений с фиксированной точкой устанавливают свойства для квантования числителя или коэффициентов знаменателя согласно слову и дробным настройкам длины.

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

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

Чтобы задать структуру фильтра, вы выбираете соответствующий dfilt.structure метод, чтобы создать ваш фильтр. Обратитесь к информации о ссылке на функцию для dfilt и set для получения дополнительной информации об установке значений свойств для квантованных фильтров.

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

Масштабные коэффициенты для ввода и вывода для фильтров не появляются в блок-схемах. Структуры фильтра по умолчанию не включают, ни принимают, масштабные коэффициенты. Для получения информации о масштабировании фильтра обратитесь к scale в Системе справочной информации.

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

В то время как значение элементов блока является прямым, метки для форматов, которые являются частью фильтра, менее ясны. Каждая фигура включает текст в форму labelFormat, который представляет существование функции форматирования в той точке в структуре. Format обозначает форматирование объекта, и label задает данные, на которые влияет объект форматирования.

Например, в фильтре dfilt.df2, показанном выше, записи, InputFormat и OutputFormat являются примененными форматами, который является размером слова и дробной длиной к входным и выходным данным фильтра. Например, свойства фильтра как OutputWordLength и InputWordLength задают значения, которые управляют работой фильтра в точках ввода и вывода в структуре и представлены объектами форматирования InputFormat и OutputFormat, показанный в схемах структуры фильтра.

Прямая Форма я Структура Фильтра.  Следующая фигура изображает прямую форму, я фильтрую структуру, которая непосредственно понимает передаточную функцию с числителем второго порядка и знаменателем. Коэффициентами числителя является пронумерованный b (i), i =1, 2, 3; коэффициентами знаменателя является пронумерованный a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В фигуре свойство Arithmetic установлено в fixed.

Пример — Определение Прямой Формы я Фильтр.  Можно задать прямую форму второго порядка, я структурирую для квантованного фильтра hq со следующим кодом.

b = [0.3 0.6 0.3];
a = [1 0 0.2];
hq = dfilt.df1(b,a);

Чтобы создать фильтр фиксированной точки, установите свойство Arithmetic на fixed как показано здесь.

set(hq,'arithmetic','fixed');

Прямая Форма я Структура Фильтра С Разделами Второго порядка.  Следующая фигура изображает прямую форму, я фильтрую структуру, которая непосредственно понимает передаточную функцию с числителем второго порядка и знаменателем и разделами второго порядка. Коэффициентами числителя является пронумерованный b (i), i =1, 2, 3; коэффициентами знаменателя является пронумерованный a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В фигуре свойство Arithmetic собирается в fixed поместить фильтр в режим фиксированной точки.

Пример — Определение Прямой Формы я Фильтр с Разделами Второго порядка.  Можно задать восьмой порядок прямая форма, я структурирую для квантованного фильтра hq со следующим кодом.

b = [0.3 0.6 0.3];
a = [1 0 0.2];
hq = dfilt.df1sos(b,a);

Чтобы создать фильтр фиксированной точки, установите свойство Arithmetic на fixed, как показано здесь.

set(hq,'arithmetic','fixed');

Прямая Форма я Транспонированная Структура Фильтра.  Следующая схема потока сигналов изображает прямую форму, я транспонировал структуру фильтра, которая непосредственно понимает передаточную функцию с числителем второго порядка и знаменателем. Коэффициентами числителя является b (i), i = 1, 2, 3; коэффициентами знаменателя является a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). С набором значения свойства Arithmetic к fixed данные показывают фильтр с обозначенными свойствами.

Пример — Определение Прямой Формы я Транспонированный Фильтр.  Можно задать прямую форму второго порядка, я транспонировал структуру фильтра для квантованного фильтра hq со следующим кодом.

b = [0.3 0.6 0.3];
a = [1 0 0.2];
hq = dfilt.df1t(b,a);
set(hq,'arithmetic','fixed');

Прямая Форма II Структур Фильтра.  Следующая диаграмма изображает прямую форму II структур фильтра, которые непосредственно понимают передаточную функцию с числителем второго порядка и знаменателем. В фигуре значением свойства Arithmetic является fixed. Коэффициенты числителя называют b (i); коэффициенты знаменателя называют a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) называют z (i).

Используйте метод dfilt.df2, чтобы создать квантованный фильтр, свойством FilterStructure которого является Direct-Form II.

Пример — Определение Прямой Формы II Фильтров.  Можно задать прямую форму второго порядка II структур фильтра для квантованного фильтра hq со следующим кодом.

b = [0.3 0.6 0.3];
a = [1 0 0.2];
hq = dfilt.df2(b,a);
hq.arithmetic = 'fixed'

Чтобы преобразовать вашу начальную букву с двойной точностью фильтруют hq к фильтру квантованной или фиксированной точки, устанавливают свойство Arithmetic на fixed, как показано.

Прямая форма II структур фильтра с разделами второго порядка

Следующая фигура изображает прямую форму II структур фильтра с помощью разделов второго порядка, который непосредственно понимает передаточную функцию с числителем второго порядка и разделами знаменателя. В фигуре значением свойства Arithmetic является fixed. Коэффициенты числителя маркированы b (i); коэффициенты знаменателя маркированы a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).

Используйте метод dfilt.df2sos, чтобы создать квантованный фильтр, свойством FilterStructure которого является Direct-Form II.

Пример — Определение Прямой Формы II Фильтров с Разделами Второго порядка.  Можно задать десятый порядок прямая форма II структур фильтра, которые используют разделы второго порядка для квантованного фильтра hq со следующим кодом.

b = [0.3 0.6 0.3];
a = [1 0 0.2];
hq = dfilt.df2sos(b,a);
hq.arithmetic = 'fixed'

Чтобы преобразовать ваш прототип с двойной точностью фильтруют hq к фильтру фиксированной точки, устанавливают свойство Arithmetic на fixed, как показано.

Прямая Форма II Транспонированных Структур Фильтра.  Следующая фигура изображает прямую форму II транспонированных структур фильтра, которые непосредственно понимают передаточные функции с числителем второго порядка и знаменателем. Коэффициенты числителя маркированы b (i), коэффициенты знаменателя маркированы a (i), i = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В первой фигуре значением свойства Arithmetic является fixed.

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

Пример — Определение Прямой Формы II Транспонированных Фильтров.  Определение или построение прямой формы второго порядка, II транспонированных фильтров для фиксированной точки фильтруют hq, начинают со следующего кода задавать коэффициенты и создавать фильтр.

b = [0.3 0.6 0.3];
a = [1 0 0.2];
hd = dfilt.df2t(b,a);

Теперь создайте версию фильтрации фиксированной точки фильтра от hd, который является плавающей точкой.

hq = set(hd,'arithmetic','fixed');

Прямая Форма Антисимметричная КИХ-Структура Фильтра (Любой Порядок).  Следующая фигура изображает прямую форму антисимметричная КИХ-структура фильтра, которая непосредственно понимает антисимметричный КИХ-фильтр второго порядка. Коэффициенты фильтра маркированы b(i), и значения начального и конечного состояния в фильтрации маркированы z (i). Эта структура отражает набор свойств Arithmetic к fixed.

Используйте метод dfilt.dfasymfir, чтобы создать фильтр, и затем установить свойство Arithmetic на fixed преобразовывать в фильтр фиксированной точки с этой структурой.

Пример — Определение Нечетного Порядка Прямая Форма Антисимметричный КИХ-Фильтр.  Задайте пятый порядок прямая форма, антисимметричная КИХ-структура фильтра для фиксированной точки фильтрует hq со следующим кодом.

b = [-0.008 0.06 -0.44 0.44 -0.06 0.008];
hq = dfilt.dfasymfir(b);
set(hq,'arithmetic','fixed')

hq
 
hq =
 
         FilterStructure: 'Direct-Form Antisymmetric FIR'
              Arithmetic: 'fixed'
               Numerator: [-0.0080 0.0600 -0.4400 0.4400 -0.0600 0.0080]
        PersistentMemory: false
                  States: [1x1 fi object]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
              TapSumMode: 'KeepMSB'      
        TapSumWordLength: 17             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
                                         
           CastBeforeSum: true           
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         
                                         
         InheritSettings: false 

Пример — Определение Ровного Порядка Прямая Форма Антисимметричный КИХ-Фильтр.  Можно задать четвертый порядок прямая форма, антисимметричная КИХ-структура фильтра для фиксированной точки фильтрует hq со следующим кодом.

b = [-0.01 0.1 0.0 -0.1 0.01];
hq = dfilt.dfasymfir(b);
hq.arithmetic='fixed'
 
hq =
 
         FilterStructure: 'Direct-Form Antisymmetric FIR'
              Arithmetic: 'fixed'
               Numerator: [-0.0100 0.1000 0 -0.1000 0.0100]
        PersistentMemory: false
                  States: [1x1 fi object]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
              TapSumMode: 'KeepMSB'      
        TapSumWordLength: 17             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
                                         
           CastBeforeSum: true           
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         
                                         
         InheritSettings: false 

Прямая Структура Фильтра Конечного импульсного ответа (FIR) Формы.  В следующей фигуре вы видите график потока сигналов для прямой структуры фильтра конечного импульсного ответа (FIR) формы, которая непосредственно понимает КИХ-фильтр второго порядка. Коэффициентами фильтра является b (i), i = 1, 2, 3, и состояниями (используемый для значений начального и конечного состояния в фильтрации) является z (i). Чтобы сгенерировать фигуру, установите свойство Arithmetic на fixed после того, как вы создаете свой прототип, просачиваются арифметика с двойной точностью.

Используйте метод dfilt.dffir, чтобы сгенерировать фильтр, который использует эту структуру.

Пример — Определение Прямого КИХ-Фильтра Формы.  Можно указать, что прямая КИХ-структура фильтра формы второго порядка для фиксированной точки фильтрует hq со следующим кодом.

b = [0.05 0.9 0.05];
hd = dfilt.dffir(b);
hq = set(hd,'arithmetic','fixed');

Прямой КИХ Формы Транспонированная Структура Фильтра.  Это использование фигуры, которое коэффициенты фильтра маркировали b (i), i = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркировано z (i). Они изображают прямой конечный импульсный ответ (FIR) формы транспонированная структура фильтра, которая непосредственно понимает КИХ-фильтр второго порядка.

С набором свойств Arithmetic к fixed ваш фильтр совпадает с фигурой. Используя метод dfilt.dffirt возвращает фильтр с двойной точностью, который вы преобразовываете в фильтр фиксированной точки.

Пример — Определение Прямого КИХ Формы Транспонированный Фильтр.  Можно задать прямого КИХ формы второго порядка, транспонированная структура фильтра для фиксированной точки фильтрует hq со следующим кодом.

b = [0.05 0.9 0.05];
hd=dfilt.dffirt(b);
hq = copy(hd);
hq.arithmetic = 'fixed';

Образуйте решетку Структуру Фильтра Allpass.  Следующая фигура изображает решетку allpass структура фильтра. Изображенная структура непосредственно понимает, что третий порядок образовывает решетку фильтры allpass с помощью вычислений с фиксированной точкой. Коэффициенты отражения фильтра маркированы k1 (i), i = 1, 2, 3. Состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).

Чтобы создать квантованный фильтр, который использует решетку allpass структура, показанная в фигуре, используйте метод dfilt.latticeallpass и установите свойство Arithmetic на fixed.

Пример — Определение Решетки Фильтр Allpass.  Можно создать решетку третьего порядка allpass структура фильтра для квантованного фильтра hq со следующим кодом.

k = [.66 .7 .44];
hd=dfilt.latticeallpass(k);
set(hq,'arithmetic','fixed');

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

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

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

  • Когда вы запускаете фильтр фазы имеющий, получившийся фильтр решетки является максимальной фазой также.

Коэффициенты отражения фильтра маркированы k (i), i = 1, 2, 3. Состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В фигуре мы устанавливаем свойство Arithmetic на fixed показывать функции формата вычислений с фиксированной точкой, которые управляют такими опциями как размер слова и дробная длина.

Пример — Построение Фильтра Фазы Максимума Скользящего среднего значения Решетки.  При построении структуры фильтра фазы максимума MA решетки четвертого порядка для квантованного фильтра hq начинается со следующего кода.

k = [.66 .7 .44 .33];
hd=dfilt.latticemamax(k);

Образуйте решетку Авторегрессивный (AR) Структура Фильтра.  Метод dfilt.latticear непосредственно понимает решетку авторегрессивные фильтры в тулбоксе. Следующая фигура изображает решетку третьего порядка, авторегрессивную (AR) структура фильтра — со свойством Arithmetic, равным fixed. Коэффициенты отражения фильтра маркированы k (i), i = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).

Пример — Определение Фильтра AR Решетки.  Можно задать структуру фильтра AR решетки третьего порядка для квантованного фильтра hq со следующим кодом.

k = [.66 .7 .44];
hd=dfilt.latticear(k);
hq.arithmetic = 'custom';

Образуйте решетку Структуру Фильтра Скользящего среднего значения (MA) для Минимальной Фазы.  Следующие фигуры изображают структуры фильтра скользящего среднего значения (MA) решетки, которые непосредственно понимают фильтры MA решетки третьего порядка для минимальной фазы. Коэффициенты отражения фильтра маркированы k (i), (i). = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). Установка свойства Arithmetic фильтра к fixed приводит к фильтру фиксированной точки, который совпадает с фигурой.

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

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

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

  • Когда вы запускаете с минимального фильтра фазы, получившийся фильтр решетки является минимальной фазой также.

Коэффициенты отражения фильтра маркированы k ((i).), i = 1, 2, 3. Состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z ((i).). Эти данные показывают структуру фильтра, когда свойство Arithmetic собирается в fixed показать функции формата вычислений с фиксированной точкой, которые управляют такими опциями как размер слова и дробная длина.

Пример — Определение Минимального Фильтра MA Решетки Фазы.  Можно задать структуру фильтра MA решетки третьего порядка для минимальных приложений фазы с помощью изменений следующего кода.

k = [.66 .7 .44];
hd=dfilt.latticemamin(k);
set(hq,'arithmetic','fixed');

Образуйте решетку Авторегрессивное Скользящее среднее значение (ARMA) Структура Фильтра.  Фигура ниже изображает решетку авторегрессивное скользящее среднее значение (ARMA) структура фильтра, которая непосредственно понимает, что четвертый порядок образовывает решетку фильтр ARMA. Коэффициенты отражения фильтра маркированы k (i), (i). = 1..., 4; лестничные коэффициенты маркированы v (i), (i). = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).

Пример — Определение Решетки Фильтр ARMA.  Следующий код указывает, что четвертый порядок образовывает решетку структуру фильтра ARMA для квантованного фильтра hq, начинающий с hd, версии с плавающей точкой фильтра.

k = [.66 .7 .44 .66];
v = [1 0 0];
hd=dfilt.latticearma(k,v);
hq.arithmetic = 'fixed';

Прямая Форма Симметричная КИХ-Структура Фильтра (Любой Порядок).  Показанный в следующей фигуре, вы видите поток сигналов, который изображает прямую форму симметричная КИХ-структура фильтра, которая непосредственно понимает пятый порядок прямая форма симметричный КИХ-фильтр. Коэффициенты фильтра маркированы b (i), i = 1..., n, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). Показ структуры фильтра, используемой, когда вы выбираете fixed для значения свойства Arithmetic, первая фигура, детализирует свойства в объекте фильтра.

Пример — Определение Нечетного Порядка Прямая Форма Симметричный КИХ-Фильтр.  При помощи следующего кода в MATLAB можно задать пятый порядок прямая форма, симметричный КИХ-фильтр для фиксированной точки фильтрует hq:

b = [-0.008 0.06 0.44 0.44 0.06 -0.008];
hd=dfilt.dfsymfir(b);
set(hq,'arithmetic','fixed');

Присвоение Коэффициентов Фильтра.  Синтаксис, который вы используете, чтобы присвоить коэффициенты фильтра для вашего фильтра или фиксированной точки с плавающей точкой, зависит от структуры, которую вы выбираете для своего фильтра.

Преобразование Фильтров Между Представлениями.  Отфильтруйте функции преобразования в этом тулбоксе и в Signal Processing Toolbox, программное обеспечение позволило вам преобразовать передаточные функции фильтра в другие формы фильтра, и от других форм фильтра до формы передаточной функции. Соответствующие функции преобразования включают следующие функции.

Функция преобразования

Описание

ca2tf

Преобразовывает от двойного фильтра allpass до передаточной функции.

cl2tf

Преобразовывает от решетки связанный фильтр allpass к передаточной функции.

convert

Преобразуйте фильтр дискретного времени от одной структуры фильтра до другого.

sos

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

tf2ca

Преобразовывает с передаточной функции на двойной фильтр allpass.

tf2cl

Преобразовывает от передаточной функции до решетки связанный фильтр allpass.

tf2latc

Преобразовывает с передаточной функции на фильтр решетки.

tf2sos

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

tf2ss

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

tf2zp

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

zp2sos

Преобразовывает форму нулей и полюсов в форму раздела второго порядка.

zp2ss

Преобразование нулей и полюсов формируется к форме пространства состояний.

zp2tf

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

Обратите внимание на то, что эти подпрограммы преобразования не применяются к объектам dfilt.

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

Чтобы продемонстрировать изменения, которые происходят, преобразуйте фиксированную точку прямая форма, я транспонировал фильтр к прямой форме II структур.

hd=dfilt.df1t
 
hd =
 
         FilterStructure: 'Direct-Form I Transposed'
              Arithmetic: 'double'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: Numerator:  [0x0 double]
                          Denominator:[0x0 double]


hd.arithmetic='fixed'
hd =
 
         FilterStructure: 'Direct-Form I Transposed'
              Arithmetic: 'fixed'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: Numerator:  [0x0 fi]
                          Denominator:[0x0 fi]

convert(hd,'df2')

Warning: Using reference filter for structure conversion. 
Fixed-point attributes will not be converted.

ans =
 
         FilterStructure: 'Direct-Form II'
              Arithmetic: 'double'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [0x1 double]

Можно задать фильтр с разделами L произвольного порядка

  1. Факторинг целой передаточной функции с tf2zp. Это преобразовывает вашу передаточную функцию в форму нулей и полюсов.

  2. Используя zp2tf, чтобы составить передаточную функцию для каждого раздела от выбранных факторов первого порядка, полученных на шаге 1.

Примечание

Вы не обязаны нормировать ведущие коэффициенты полинома знаменателя каждого раздела, когда вы задаете разделы второго порядка, хотя tf2sos делает.

Усиление

Фильтрам dfilt.scalar сохранили значение усиления в свойстве gain. По умолчанию значение усиления - одно — действия фильтра как провод.

InputFracLength

InputFracLength задает дробную длину, присвоенную входным данным для вашего фильтра. Используемый в тандеме с InputWordLength, пара задает формат данных для входных данных, вы предусматриваете фильтрацию.

Как со всеми дробными свойствами длины в объектах dfilt, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, в этом случае InputWordLength, также.

InputWordLength

Задает количество битов ваше использование фильтра, чтобы представлять ваши входные данные. Ваша опция размера слова ограничивается арифметикой, которую вы выбираете — до 32 битов для double, float и fixed. Установка Arithmetic к single (с одинарной точностью с плавающей точкой) ограничивает размер слова 16 битами. Значение по умолчанию составляет 16 битов.

Лестничная структура

Включенный как свойство в объектах фильтра dfilt.latticearma, Ladder содержит коэффициенты знаменателя, которые формируются, БИХ образовывают решетку объект фильтра. Например, следующий код создает объект фильтра высоких частот, который использует решетку структура ARMA.

[b,a]=cheby1(5,.5,.5,'high')

b =

    0.0282   -0.1409    0.2817   -0.2817    0.1409   -0.0282


a =

    1.0000    0.9437    1.4400    0.9629    0.5301    0.1620

hd=dfilt.latticearma(b,a)
 
hd =
 
         FilterStructure: [1x44 char]
              Arithmetic: 'double'
                 Lattice: [1x6 double]
                  Ladder: [1 0.9437 1.4400 0.9629 0.5301 0.1620]
     PersistentMemory: false
                  States: [6x1 double]

hd.arithmetic='fixed'
 
hd =
 
         FilterStructure: [1x44 char]
              Arithmetic: 'fixed'
                 Lattice: [1x6 double]
                  Ladder: [1 0.9437 1.4400 0.9629 0.5301 0.1620]
     PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

LadderAccumFracLength

Авторегрессивное, скользящее среднее значение образовывает решетку объекты фильтра (lattticearma) лестничные коэффициенты использования, чтобы задать фильтр. В сочетании с LadderFracLength и CoeffWordLength, эти три свойства задают или отражают, как аккумулятор выходные данные сохранил там. Как со всеми дробными свойствами длины, LadderAccumFracLength может быть любым целым числом, включая целые числа, больше, чем AccumWordLength и положительные или отрицательные целые числа. Значение по умолчанию составляет 29 битов.

LadderFracLength

Чтобы позволить вам управлять путем, ваш фильтр latticearma интерпретирует коэффициенты знаменателя, наборы LadderFracLength, дробная длина применилась к лестничным коэффициентам за ваш фильтр. Значение по умолчанию составляет 14 битов.

Как со всеми дробными свойствами длины, LadderFracLength может быть любым целым числом, включая целые числа, больше, чем AccumWordLength и положительные или отрицательные целые числа.

Решетка

Когда вы создаете основанный на решетке БИХ-фильтр, ваши коэффициенты числителя (от вашего БИХ-прототипного фильтра или функции filter решетки dfilt по умолчанию) хранятся в свойстве Lattice объекта dfilt. Свойства CoeffWordLength и LatticeFracLength задают формат данных объектное использование, чтобы представлять коэффициенты решетки. По умолчанию образуйте решетку коэффициенты, находятся в формате с двойной точностью.

LatticeAccumFracLength

Образуйте решетку объекты фильтра (latticeallpass, latticearma, latticemamax и latticemamin) коэффициенты решетки использования, чтобы задать фильтр. В сочетании с LatticeFracLength и CoeffWordLength, эти три свойства задают, как аккумулятор выходные параметры образовывает решетку связанные с коэффициентом данные, хранимые там. Как со всеми дробными свойствами длины, LatticeAccumFracLength может быть любым целым числом, включая целые числа, больше, чем AccumWordLength и положительные или отрицательные целые числа. По умолчанию свойство установлено в 31 бит.

LatticeFracLength

Чтобы позволить вам управлять путем, ваш фильтр интерпретирует коэффициенты знаменателя, наборы LatticeFracLength, дробная длина применилась к коэффициентам решетки за ваш фильтр решетки. Когда вы создаете фильтр решетки по умолчанию, LatticeFracLength составляет 16 битов.

Как со всеми дробными свойствами длины, LatticeFracLength может быть любым целым числом, включая целые числа, больше, чем CoeffWordLength и положительные или отрицательные целые числа.

MultiplicandFracLength

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

Как со всем словом и дробными свойствами длины, MultiplicandFracLength может быть любым целым числом, включая целые числа, больше, чем CoeffWordLength и положительные или отрицательные целые числа.

MultiplicandWordLength

Каждый элемент входных данных для умножить операции имеет и размер слова и дробную длину, чтобы задать ее представление. MultiplicandWordLength устанавливает размер слова использовать, когда фильтр выполняет, любой умножает операцию во время фильтрации. Для фильтров по умолчанию это установлено в 16 битов. Только df1t и объекты фильтра df1tsos включают свойство MultiplicandFracLength.

Только df1t и объекты фильтра df1tsos включают свойство MultiplicandWordLength.

NumAccumFracLength

Структуры фильтра df1, df1t, df2 и df2t, которые используют арифметику fixed, имеют это свойство, которое задает дробную длину, применились к коэффициентам числителя в выводе от аккумулятора. В сочетании с AccumWordLength свойство NumAccumFracLength полностью задает как аккумулятор выходные параметры связанные с числителем данные, хранимые там.

Как со всеми дробными свойствами длины, NumAccumFracLength может быть любым целым числом, включая целые числа, больше, чем AccumWordLength и положительные или отрицательные целые числа. 30 битов являются значением по умолчанию, когда вы создаете объект фильтра. Чтобы смочь изменить значение для этого свойства, установите FilterInternals для фильтра к SpecifyPrecision.

Числитель

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

Все объекты фильтра включают Numerator, кроме основанных на решетке и фильтров раздела второго порядка, таких как dfilt.latticema и dfilt.df1tsos.

NumFracLength

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

Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 15 битов с CoeffWordLength 16 битов.

NumProdFracLength

Свойство всех прямых БИХ формы, объекты dfilt, кроме тех, которые реализуют разделы второго порядка, NumProdFracLength, задают дробную длину, применилось к выводу данных от операций продукта, которые фильтр выполняет на коэффициентах числителя.

Смотрение на поток сигналов схематически изображает для фильтра dfilt.df1t, например, вы видите, что знаменатели и числители обработаны отдельно. Когда вы устанавливаете ProductMode на SpecifyPrecision, можно изменить настройки NumProdFracLength вручную. В противном случае, для операций умножения, которые используют коэффициенты числителя, фильтр устанавливает размер слова, как задано установкой ProductMode.

NumStateFracLength

Все варианты прямой формы, которую я структурирую, включают свойство NumStateFracLength сохранить дробную длину, применился к состояниям числителя за ваш объект фильтра. По умолчанию это свойство имеет значение 15 битов с CoeffWordLength 16 битов, которые можно изменить после того, как вы создаете объект фильтра.

Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также.

NumStateWordLength

Когда вы смотрите на блок-схему для объекта фильтра df1sos, состояния, сопоставленные с содействующими операциями числителя, берут формат данных из этого свойства и свойства NumStateFracLength. В комбинации эти свойства полностью задают, как фильтр интерпретирует состояние, которое это использует.

Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 16 битов с NumStateFracLength 11 битов.

OutputFracLength

Чтобы задать вывод от вашего объекта фильтра, вам нужны оба слово и дробные длины. OutputFracLength определяет дробную длину, примененную, чтобы интерпретировать выходные данные. Объединение этого с OutputWordLength полностью задает формат вывода.

Ваша дробная длина может быть любым отрицательным или положительным целым числом или нулем. Кроме того, дробная длина, которую вы задаете, может быть больше, чем связанный размер слова. Обычно значение по умолчанию составляет 11 битов.

OutputMode

Устанавливает режим использование фильтра масштабировать отфильтрованный (вывод) данные. У вас есть следующий выбор:

  • AvoidOverflow — направляет фильтр, чтобы установить свойство, которое управляет длиной части выходных данных, чтобы не заставлять данные переполняться. В фильтре df2 это было бы свойством OutputFracLength.

  • BestPrecision — направляет фильтр, чтобы установить свойство, которое управляет длиной части выходных данных, чтобы максимизировать точность в выходных данных. Для фильтров df1t это - свойство OutputFracLength. Когда вы изменяете размер слова (OutputWordLength), фильтр настраивает дробную длину, чтобы поддержать лучшую точность для нового размера слова.

  • Определение точности позволяет вам установить дробную длину, используемую отфильтрованными данными. Когда вы выбираете этот выбор, можно установить выходную длину части с помощью свойства OutputFracLength задать выходную точность.

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

Вот пример, который изменяет настройки режима к bestprecision, и затем настраивает размер слова для вывода.

hd=dfilt.df2
 
hd =
 
         FilterStructure: 'Direct-Form II'
              Arithmetic: 'double'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [0x1 double]

hd.arithmetic='fixed'
 
hd =
 
         FilterStructure: 'Direct-Form II'
              Arithmetic: 'fixed'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         

get(hd)
        PersistentMemory: false
FilterStructure: 'Direct-Form II'
                  States: [1x1 embedded.fi]
               Numerator: 1
             Denominator: 1
              Arithmetic: 'fixed'
         CoeffWordLength: 16
          CoeffAutoScale: 1
                  Signed: 1
               RoundMode: 'convergent'
            OverflowMode: 'wrap'
         InputWordLength: 16
         InputFracLength: 15
        OutputWordLength: 16
              OutputMode: 'AvoidOverflow'
             ProductMode: 'FullPrecision'
         StateWordLength: 16
         StateFracLength: 15
           NumFracLength: 14
           DenFracLength: 14
        OutputFracLength: 13
       ProductWordLength: 32
       NumProdFracLength: 29
       DenProdFracLength: 29
         AccumWordLength: 40
      NumAccumFracLength: 29
      DenAccumFracLength: 29
           CastBeforeSum: 1

hd.outputMode='bestprecision'
 
hd =
 
         FilterStructure: 'Direct-Form II'
              Arithmetic: 'fixed'
               Numerator: 1
             Denominator: 1
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'BestPrecision'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         

hd.outputWordLength=8;

get(hd)
        PersistentMemory: false
         FilterStructure: 'Direct-Form II'
                  States: [1x1 embedded.fi]
               Numerator: 1
             Denominator: 1
              Arithmetic: 'fixed'
         CoeffWordLength: 16
          CoeffAutoScale: 1
                  Signed: 1
               RoundMode: 'convergent'
            OverflowMode: 'wrap'
         InputWordLength: 16
         InputFracLength: 15
        OutputWordLength: 8
              OutputMode: 'BestPrecision'
             ProductMode: 'FullPrecision'
         StateWordLength: 16
         StateFracLength: 15
           NumFracLength: 14
           DenFracLength: 14
        OutputFracLength: 5
       ProductWordLength: 32
       NumProdFracLength: 29
       DenProdFracLength: 29
         AccumWordLength: 40
      NumAccumFracLength: 29
      DenAccumFracLength: 29
           CastBeforeSum: 1

Изменение OutputWordLength к битам 8 заставило фильтр изменять OutputFracLength на биты 5, чтобы сохранить лучшую точность для выходных данных.

OutputWordLength

Используйте свойство OutputWordLength установить размер слова, используемый выводом от вашего фильтра. Установите это свойство на значение, которое совпадает с вашим намеченным оборудованием. Например, некоторые цифровые сигнальные процессоры используют 32-битный вывод, таким образом, вы установили бы OutputWordLength на 32.

[b,a] = butter(6,.5);
hd=dfilt.df1t(b,a);

set(hd,'arithmetic','fixed')

hd
 
hd =
 
         FilterStructure: 'Direct-Form I Transposed'
              Arithmetic: 'fixed'
               Numerator: [1x7 double]
             Denominator: [1 0 0.7777 0 0.1142 0 0.0018]
     PersistentMemory: false
                  States: Numerator:  [6x1 fi]
                          Denominator:[6x1 fi]


         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
  MultiplicandWordLength: 16             
  MultiplicandFracLength: 15             
                                         
         StateWordLength: 16             
          StateAutoScale: true           
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

hd.outputwordLength=32
 
hd =
 
         FilterStructure: 'Direct-Form I Transposed'
              Arithmetic: 'fixed'
               Numerator: [1x7 double]
             Denominator: [1 0 0.7777 0 0.1142 0 0.0018]
        PersistentMemory: false
                  States: Numerator:  [6x1 fi]
                          Denominator:[6x1 fi]


         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 32             
              OutputMode: 'AvoidOverflow'
                                         
  MultiplicandWordLength: 16             
  MultiplicandFracLength: 15             
                                         
         StateWordLength: 16             
          StateAutoScale: true           
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

Когда вы создаете объект фильтра, это свойство запускается со значения 16.

OverflowMode

Свойство OverflowMode задано как один из следующих двух векторов символов, указывающих, как ответить на переполнение в вычислениях с фиксированной точкой:

  • 'saturate' — насыщайте переполнение.

    Когда значения данных, которые будут квантованы, лежат за пределами области значений самых больших и самых маленьких представимых чисел (как задано применимым размером слова и дробными свойствами длины), эти значения квантуются к значению или самого большого или наименьшего представимого значения, в зависимости от которого является самым близким. saturate является значением по умолчанию для OverflowMode.

  • 'wrap' — перенесите все переполнение к области значений представимых значений.

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

Эти правила применяются к свойству OverflowMode.

  • Применяется к аккумулятору и выходным данным только.

  • Не применяется к коэффициентам или входным данным. Они всегда насыщают результаты.

  • Не применяется к продуктам. Продукты поддерживают полную точность в любом случае. Ваши фильтры не теряют точность в продуктах.

Примечание

Числа в фильтрах с плавающей точкой, которые расширяют вне переполнения динамического диапазона к ±inf.

ProductFracLength

После того, как вы установите ProductMode для фильтра фиксированной точки к SpecifyPrecision, это свойство становится доступным для вас, чтобы измениться. ProductFracLength устанавливает дробную длину использование фильтра для результатов операций умножения. Только КИХ-фильтры, такие как асимметричные ЕЛИ или образовывают решетку авторегрессивные фильтры, включают это динамическое свойство.

Ваша дробная длина может быть любым отрицательным или положительным целым числом или нулем. Кроме того, дробная длина, которую вы задаете, может быть больше, чем связанный размер слова. Обычно значение по умолчанию составляет 11 битов.

ProductMode

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

Когда доступно, вы выбираете из одного из следующих значений для ProductMode:

  • FullPrecision — означает, что фильтр автоматически выбирает размер слова и дробную длину, которую это использует, чтобы представлять результаты операций умножения. Установка позволяет продукту сохранять точность, обеспеченную входными параметрами (множимые) к операции.

  • KeepMSB — средние значения вы задаете размер слова для представления результатов операции продукта. Фильтр устанавливает дробную длину отбрасывать LSBs, сохранять биты высшего порядка в данных и поддерживать точность.

  • KeepLSB — средние значения вы задаете размер слова для представления результатов операции продукта. Фильтр устанавливает дробную длину отбрасывать MSBs, сохранять биты более низкоуровневые и поддерживать точность. Сравните с опцией KeepMSB.

  • Определение точности средние значения вы задаете размер слова и дробную длину, чтобы примениться к выводу данных от операций продукта.

Когда вы переключаетесь на фильтрацию фиксированной точки от с плавающей точкой, вы, скорее всего, собираетесь выбросить некоторые биты данных после операций продукта в вашем фильтре, возможно, потому что у вас есть ограниченные ресурсы. Когда необходимо отбросить некоторые биты, вы можете принять решение отбросить младшие значащие биты (LSB) от результата, поскольку получившаяся ошибка квантования была бы небольшой, когда LSBs несут меньше веса. Или вы можете принять решение сохранить LSBs, потому что результаты имеют MSBs, которые являются в основном нулем, такой как тогда, когда ваши значения являются маленькими относительно области значений формата, в котором они представлены. Таким образом, опции для ProductMode позволяют вам выбрать, как поддержать информацию, в которой вы нуждаетесь от аккумулятора.

Для получения дополнительной информации о форматах данных, размер слова и дробная длина в вычислениях с фиксированной точкой, обращаются к Примечаниям О Дробной Длине, Размере слова и Точности.

ProductWordLength

Вы используете ProductWordLength, чтобы задать длину слова данных, используемую выводом от операций умножения. Установите это свойство на значение, которое совпадает с вашим применением по назначению. Например, значение по умолчанию составляет 32 бита, но можно установить любой размер слова.

set(hq,'arithmetic','fixed');
set(hq,'ProductWordLength',64);

Обратите внимание на то, что ProductWordLength применяется только к фильтрам, значением свойства Arithmetic которых является fixed.

PersistentMemory

Определите, восстанавливаются ли состояния фильтра своим начальным значениям для каждой операции фильтрации. Начальные значения существуют значения, когда вы создаете объект фильтра. возвраты к нулю PersistentMemory любое состояние, которое фильтр изменяет во время обработки. Состояния, которые не изменяет фильтр, не затронуты. Значения по умолчанию к false — фильтр не сохраняют память о фильтрации операций от одного до следующего. Поддержание памяти (установка PersistentMemory к true) позволяет вам отфильтровать большие наборы данных как наборы меньших подмножеств и получить тот же результат.

В этом примере отфильтруйте hd, сначала фильтрует данные xtot в одной передаче. Затем можно использовать hd, чтобы отфильтровать x как два отдельных набора данных. Результатами ytot и ysec является то же самое в обоих случаях.

xtot=[x,x];
ytot=filter(hd,xtot)
ytot =

         0   -0.0003    0.0005   -0.0014    0.0028   -0.0054    0.0092
reset(hm1);  % Clear history of the filter
hm1.PersistentMemory='true';
ysec=[filter(hd,x) filter(hd,x)]

ysec =

         0   -0.0003    0.0005   -0.0014    0.0028   -0.0054    0.0092

Этот тест проверяет, что ysec (сигнал, отфильтрованный разделами), равен ytot (целый сигнал, отфильтрованный целиком).

RoundMode

Значение свойства RoundMode задает метод округления, используемый для квантования численных значений. Задайте значения свойств RoundMode как одно из следующего:

RoundMode

Описание округления алгоритма

Ceiling

Вокруг к положительной бесконечности.

Floor

Вокруг к отрицательной бесконечности.

Nearest

Вокруг к самому близкому. Связывает к положительной бесконечности.

Nearest(Convergent)

Вокруг к самому близкому представимому целому числу. Связывает к самому близкому даже сохраненному целому числу. Это наименее смещено из методов, доступных в этом программном обеспечении.

Round

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

Zero

Вокруг к нулю.

Выбор, который вы делаете, влияет только на аккумулятор и выходную арифметику. Коэффициент и входная арифметика всегда вокруг. Наконец, продукты никогда не переполняются — они поддерживают полную точность.

ScaleValueFracLength

Структуры фильтра df1sos, df1tsos, df2sos и df2tsos, которые используют арифметику fixed, имеют это свойство, которое задает дробную длину, применились к значениям шкалы использование фильтра между разделами. В сочетании с CoeffWordLength эти два свойства полностью задают, как фильтр интерпретирует и использует значения шкалы, сохраненные в свойстве ScaleValues. Как с дробными свойствами длины, ScaleValueFracLength может быть любым целым числом, включая целые числа, больше, чем CoeffWordLength и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете фильтр.

ScaleValues

Значения свойств ScaleValues заданы как скаляр (или вектор), который вводит масштабирование для входных параметров (и выходные параметры от каскадных разделов в векторном случае) во время фильтрации:

  • Когда у вас только есть один раздел в вашем фильтре:

    • Задайте значение свойства ScaleValues как скаляр, если вы только хотите масштабировать вход к своему фильтру.

    • Задайте свойство ScaleValues как вектор длины 2, если вы хотите задать масштабирование к входу (масштабируемый с первой записью в векторе) и вывод (масштабируемый с последней записью в векторе).

  • То, когда у вас есть L, расположило каскадом разделы в вашем фильтре:

    • Задайте значение свойства ScaleValues как скаляр, если вы только хотите масштабировать вход к своему фильтру.

    • Задайте значение для свойства ScaleValues как вектор длины L +1, если вы хотите масштабировать входные параметры к каждому разделу в вашем фильтре, наряду с выводом:

      Первая запись вашего вектора задает входное масштабирование

      Каждая последовательная запись задает масштабирование при выводе следующего раздела

      Итоговая запись задает масштабирование для фильтра вывод.

Значение по умолчанию для ScaleValues 0.

Интерпретация этого свойства описана можно следующим образом со схемами в Интерпретации Свойства ScaleValues.

Примечание

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

Когда вы применяете normalize к фильтру фиксированной точки, значение для свойства ScaleValues изменяется соответственно.

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

Интерпретация Свойства ScaleValues.  Когда вы задаете значения свойства ScaleValues квантованного фильтра, значения вводятся как вектор, длина которого определяется количеством каскадных разделов в вашем фильтре:

  • Когда у вас есть только один раздел, значение свойства Scalevalues может быть скаляром или двухэлементным вектором.

  • То, когда у вас есть L, расположило каскадом разделы в вашем фильтре, значение свойства ScaleValues может быть скаляром или L +1-element вектор.

Следующая схема показывает, как значения свойств ScaleValues применяются к квантованному фильтру только с одним разделом.

Следующая схема показывает, как значения свойств ScaleValues применяются к квантованному фильтру с двумя разделами.

Со знаком

Когда вы создаете объект dfilt для фильтрации фиксированной точки (вы устанавливаете свойство Arithmetic на fixed, свойство Signed задает, интерпретирует ли фильтр коэффициенты, как подписано или без знака. Эта установка применяется только к коэффициентам. В то время как настройкой по умолчанию является true, означая, что все коэффициенты приняты, чтобы быть подписанными, можно изменить настройки к false после того, как вы создаете фильтр фиксированной точки.

Например, создайте прямую форму фиксированной точки II транспонированных фильтров и с отрицательными и с положительными коэффициентами, и затем измените значение свойства для Signed от true до false, чтобы видеть то, что происходит с отрицательными содействующими значениями.

hd=dfilt.df2t(-5:5)
 
hd =
 
         FilterStructure: 'Direct-Form II Transposed'
              Arithmetic: 'double'
               Numerator: [-5 -4 -3 -2 -1 0 1 2 3 4 5]
             Denominator: 1
        PersistentMemory: false
                  States: [10x1 double]

set(hd,'arithmetic','fixed')
hd.numerator

ans =

    -5    -4    -3    -2    -1    0
     1     2     3     4     5

set(hd,'signed',false)
hd.numerator

ans =

     0     0     0     0     0     0
     1     2     3     4     5

Используя коэффициенты без знака ограничивает вас использованием только положительных коэффициентов в вашем фильтре. Signed является динамическим свойством — вы не можете установить или изменить его, пока вы не переключаете установку для свойства Arithmetic к fixed.

SosMatrix

Когда вы преобразовываете объект dfilt в форму раздела второго порядка или создаете фильтр раздела второго порядка, sosMatrix содержит коэффициенты фильтра как значения свойств. Используя тип данных double по умолчанию, матрица находится в [разделяет коэффициенты на раздел] форма, отображенная как [15-x-6] для фильтров с 6 коэффициентами на раздел и 15 разделов, [15 6].

Чтобы продемонстрировать, следующий код создает фильтр порядка 30 с помощью разделов второго порядка в прямой форме II транспонированных настроек. Заметьте, что свойство sosMatrix содержит коэффициенты для всех разделов.

d = fdesign.lowpass('n,fc',30,0.5);
hd = butter(d);

hd =
 
  FilterStructure: 'Direct-Form II, Second-Order Sections'
      Arithmetic: 'double'
       sosMatrix: [15x6 double]
     ScaleValues: [16x1 double]
PersistentMemory: false
          States: [2x15 double]

hd.arithmetic='fixed'
 
hd =
 
 FilterStructure: 'Direct-Form II, Second-Order Sections'
      Arithmetic: 'fixed'
       sosMatrix: [15x6 double]
     ScaleValues: [16x1 double]
PersistentMemory: false
                  States: [1x1 embedded.fi]

 CoeffWordLength: 16             
  CoeffAutoScale: true           
          Signed: true           
                                         
 InputWordLength: 16             
 InputFracLength: 15             
                                         
  SectionInputWordLength: 16             
   SectionInputAutoScale: true           
                                         
 SectionOutputWordLength: 16             
  SectionOutputAutoScale: true           
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
         StateWordLength: 16             
         StateFracLength: 15             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: true           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

hd.sosMatrix

ans =

    1.0000    2.0000    1.0000    1.0000         0    0.9005
    1.0000    2.0000    1.0000    1.0000         0    0.7294
    1.0000    2.0000    1.0000    1.0000         0    0.5888
    1.0000    2.0000    1.0000    1.0000         0    0.4724
    1.0000    2.0000    1.0000    1.0000         0    0.3755
    1.0000    2.0000    1.0000    1.0000         0    0.2948
    1.0000    2.0000    1.0000    1.0000         0    0.2275
    1.0000    2.0000    1.0000    1.0000         0    0.1716
    1.0000    2.0000    1.0000    1.0000         0    0.1254
    1.0000    2.0000    1.0000    1.0000         0    0.0878
    1.0000    2.0000    1.0000    1.0000         0    0.0576
    1.0000    2.0000    1.0000    1.0000         0    0.0344
    1.0000    2.0000    1.0000    1.0000         0    0.0173
    1.0000    2.0000    1.0000    1.0000         0    0.0062
    1.0000    2.0000    1.0000    1.0000         0    0.0007

Матрица SOS является матрицей M-6, где M является количеством разделов в фильтре раздела второго порядка. Фильтр hd имеет M, равный 15 как показано выше (15 строк). Каждая строка матрицы SOS содержит числитель и коэффициенты знаменателя (b's и a's) и масштабные коэффициенты соответствующего раздела в фильтре.

SectionInputAutoScale

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

То, как фильтр представляет передачу данных от одного раздела до следующего, зависит от значения свойства SectionInputAutoScale. Представление использование фильтра между разделами фильтра зависит от того, является ли значением SectionInputAutoScale true или false.

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

  • SectionInputAutoScale = false удаляет автоматическое масштабирование дробной длины для перекрестных данных и представляет свойство, которое управляет содействующей длиной части (SectionInputFracLength), таким образом, можно изменить его. Например, если фильтр является прямым КИХ-фильтром формы второго порядка, установка SectionInputAutoScale к false представляет свойство SectionInputFracLength, которое указывает, что дробная длина применилась к данным между разделами.

SectionInputFracLength

Раздел второго порядка фильтрует квантизаторы использования во входе к каждому разделу фильтра. Квантизаторы применяются к входным данным, вводящим каждый раздел фильтра. Обратите внимание на то, что квантизаторы для каждого раздела являются тем же самым. Чтобы установить дробную длину для интерпретации входных значений, используйте значение свойства в SectionInputFracLength.

В сочетании с CoeffWordLength SectionInputFracLength полностью определяет, как фильтр интерпретирует и использует значения состояния, сохраненные в свойстве States. Как со всем словом и дробными свойствами длины, SectionInputFracLength может быть любым целым числом, включая целые числа, больше, чем CoeffWordLength и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете объект фильтра.

SectionInputWordLength

Фильтры SOS состоят из разделов, каждый фильтр второго порядка. Фильтрация ввода данных к фильтру включает передачу данных через каждый раздел фильтра. SectionInputWordLength указывает, что размер слова применился к данным, когда это вводит один раздел фильтра от предыдущего раздела. Только реализации второго порядка прямой формы, которую я транспонировал и прямая форма II транспонированных фильтров, включают это свойство.

Следующая схема показывает фильтр SOS, состоявший из разделов (нижняя часть схемы) и возможная внутренняя структура каждого Раздела (главный фрагмент схемы), в этом случае — прямая форма, я транспонировал структуру фильтра разделов второго порядка. Обратите внимание на то, что вывод каждого раздела питается через множитель. Если усилением множителя =1, то последний блок Cast Раздела проигнорирован, и формат вывода, является NumSumQ.

Значения по умолчанию SectionInputWordLength к 16 битам.

SectionOutputAutoScale

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

То, как фильтр представляет передачу данных от одного раздела до следующего, зависит от значения свойства SectionOutputAutoScale. Представление использование фильтра между разделами фильтра зависит от того, является ли значением SectionOutputAutoScale true или false.

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

  • SectionOutputAutoScale = false удаляет автоматическое масштабирование дробной длины для перекрестных данных и представляет свойство, которое управляет содействующей длиной части (SectionOutputFracLength), таким образом, можно изменить его. Например, если фильтр является прямым КИХ-фильтром формы второго порядка, установка SectionOutputAutoScale =, false представляет свойство SectionOutputFracLength, которое указывает, что дробная длина применилась к данным между разделами.

SectionOutputFracLength

Раздел второго порядка фильтрует квантизаторы использования при выводе от каждого раздела фильтра. Квантизаторы применяются к выходным данным, оставляя каждый раздел фильтра. Обратите внимание на то, что квантизаторы для каждого раздела являются тем же самым. Чтобы установить дробную длину для интерпретации выходных значений, используйте значение свойства в SectionOutputFracLength.

В сочетании с CoeffWordLength SectionOutputFracLength определяет, как фильтр интерпретирует и использует значения состояния, сохраненные в свойстве States. Как со всеми дробными свойствами длины, SectionOutputFracLength может быть любым целым числом, включая целые числа, больше, чем CoeffWordLength и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете объект фильтра.

SectionOutputWordLength

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

Следующая схема показывает фильтр SOS, состоявший из разделов (нижняя часть схемы) и возможная внутренняя структура каждого Раздела (главный фрагмент схемы), в этом случае — прямая форма, я транспонировал структуру фильтра разделов второго порядка. Обратите внимание на то, что вывод каждого раздела питается через множитель. Если усилением множителя =1, то последний блок Cast Раздела проигнорирован, и формат вывода, является NumSumQ.

Значения по умолчанию SectionOutputWordLength к 16 битам.

StateAutoScale

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

  • StateAutoScale = true означает, что фильтр выбирает дробную длину, чтобы поддержать значение состояний максимально близко к значениям с двойной точностью. Когда вы изменяетесь, размер слова применился к состояниям (где позволено структурой фильтра), объект фильтра изменяет дробную длину, чтобы попытаться разместить изменение. true является настройкой по умолчанию.

  • StateAutoScale = false удаляет автоматическое масштабирование дробной длины для состояний и представляет свойство, которое управляет содействующей длиной части, таким образом, можно изменить его. Например, в прямой форме я транспонировал КИХ-фильтр SOS, установка StateAutoScale =, false представляет свойства NumStateFracLength и DenStateFracLength, которые указывают, что дробная длина применилась к состояниям.

Каждая из следующих структур фильтра обеспечивает свойство StateAutoScale:

  • df1t

  • df1tsos

  • df2t

  • df2tsos

  • dffirt

Другие структуры фильтра не включают это свойство.

StateFracLength

Состояния фильтра, сохраненные в свойстве States, имеют и размер слова и дробную длину. Чтобы установить дробную длину для интерпретации сохраненных значений состояния объекта фильтра, используйте значение свойства в StateFracLength.

В сочетании с CoeffWordLength StateFracLength полностью определяет, как фильтр интерпретирует и использует значения состояния, сохраненные в свойстве States.

Как со всеми дробными свойствами длины, StateFracLength может быть любым целым числом, включая целые числа, больше, чем CoeffWordLength и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете объект фильтра.

Состояния

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

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

Объекты фильтра хранят значения состояния в свойстве States. Количество сохраненных состояний зависит от реализации фильтра, поскольку состояния представляют задержки реализации фильтра.

Когда вы рассматриваете отображение для объекта фильтра с фиксированной арифметикой, заметьте, что состояния возвращают встроенный объект fi, как вы видите здесь.

b = ellip(6,3,50,300/500);
hd=dfilt.dffir(b)
 
hd =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'double'
               Numerator: [0.0773 0.2938 0.5858 0.7239 0.5858 0.2938 0.0773]
        PersistentMemory: false
                  States: [6x1 double]


hd.arithmetic='fixed'
 
hd =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'fixed'
               Numerator: [0.0773 0.2938 0.5858 0.7239 0.5858 0.2938 0.0773]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: 'on'           
                  Signed: 'on'           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
           CastBeforeSum: 'on'           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         
                                         
         InheritSettings: 'off' 

Объекты fi оказывают поддержку фиксированной точки для фильтров. Чтобы узнать больше о деталях об объектах fi, обратитесь к своей документации Fixed-Point Designer.

Свойство States позволяет вам использовать объект fi задать, как фильтр интерпретирует состояния фильтра. Например, можно создать объект fi в MATLAB, затем присвоить объект состояниям, можно следующим образом:

statefi=fi([],16,12)
 
statefi =
 
[]
   DataTypeMode = Fixed-point: binary point scaling
         Signed = true
    Wordlength = 16
Fractionlength = 12

Этот объект fi не имеет значения сопоставленным (заметьте входной параметр [] к fi для значения), и это имеет размер слова 16 битов и дробную длину 12 битов. Теперь можно применить statefi к свойству States фильтра hd.

set(hd,'States',statefi);
Warning: The 'States' property will be reset to the value 
specified at construction before filtering.
Set the 'PersistentMemory' flag to 'True' 
to avoid changing this property value.
hd
 
hd =
 
         FilterStructure: 'Direct-Form FIR'
              Arithmetic: 'fixed'
               Numerator: [0.0773 0.2938 0.5858 0.7239 0.5858 
                           0.2938 0.0773]
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: 'on'           
                  Signed: 'on'           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
             ProductMode: 'FullPrecision'
         AccumWordLength: 40             
           CastBeforeSum: 'on'           
                                         
               RoundMode: 'convergent'   
            OverflowMode: 'wrap' 

StateWordLength

В то время как все состояния использования фильтров, некоторые не позволяют вам непосредственно изменять представление состояния — размер слова и дробные длины — независимо. Для других StateWordLength задает размер слова, в битах, использование фильтра, чтобы представлять состояния. Фильтры, которые не обеспечивают прямое управление размером слова состояния, включают:

  • df1

  • dfasymfir

  • dffir

  • dfsymfir

Для этих структур фильтр выводит формат состояния от формата ввода, который вы выбираете для фильтра — за исключением БИХ-фильтра df1. В этом случае формат состояния числителя прибывает из формата ввода, и формат состояния знаменателя прибывает из выходного формата. Все другие структуры фильтра обеспечивают управление формата состояния непосредственно.

TapSumFracLength

КИХ-объекты фильтра прямой формы, и симметричные и антисимметричные, используют это свойство. Чтобы установить дробную длину для вывода от операций суммы, которые включают веса касания фильтра, используйте значение свойства в TapSumFracLength. Чтобы включить это свойство, установите TapSumMode на SpecifyPrecision в вашем фильтре.

Как вы видите в этом примере кода, который создает фиксированную точку асимметричный КИХ-фильтр, свойство TapSumFracLength становится доступным после того, как вы изменяете значение свойства TapSumMode.

hd=dfilt.dfasymfir
 
hd =
 
         FilterStructure: 'Direct-Form Antisymmetric FIR'
              Arithmetic: 'double'
               Numerator: 1
        PersistentMemory: false
                  States: [0x1 double]

set(hd,'arithmetic','fixed');
hd
 
hd =
 
         FilterStructure: 'Direct-Form Antisymmetric FIR'
              Arithmetic: 'fixed'
               Numerator: 1
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16             
          CoeffAutoScale: true           
                  Signed: true           
                                         
         InputWordLength: 16             
         InputFracLength: 15             
                                         
        OutputWordLength: 16             
              OutputMode: 'AvoidOverflow'
                                         
              TapSumMode: 'KeepMSB'      
        TapSumWordLength: 17             
                                         
             ProductMode: 'FullPrecision'

         AccumWordLength: 40             
                                         
           CastBeforeSum: true           
               RoundMode: 'convergent'   
            OverflowMode: 'wrap'         

С фильтром теперь в режиме фиксированной точки, можно изменить значение свойства TapSumMode на SpecifyPrecision, который предоставляет вам доступ к свойству TapSumFracLength.

set(hd,'TapSumMode','SpecifyPrecision');
hd
 
hd =
 
         FilterStructure: 'Direct-Form Antisymmetric FIR'
              Arithmetic: 'fixed'
               Numerator: 1
        PersistentMemory: false
                  States: [1x1 embedded.fi]

         CoeffWordLength: 16                
          CoeffAutoScale: true              
                  Signed: true              
                                            
         InputWordLength: 16                
         InputFracLength: 15                
                                            
        OutputWordLength: 16                
              OutputMode: 'AvoidOverflow'   
                                            
              TapSumMode: 'SpecifyPrecision'
        TapSumWordLength: 17                
        TapSumFracLength: 15                
                                            
             ProductMode: 'FullPrecision'   

         AccumWordLength: 40                
                                            
           CastBeforeSum: true              
               RoundMode: 'convergent'      
            OverflowMode: 'wrap' 

В сочетании с TapSumWordLength TapSumFracLength полностью определяет, как фильтр интерпретирует и использует значения состояния, сохраненные в свойстве States.

Как со всеми дробными свойствами длины, TapSumFracLength может быть любым целым числом, включая целые числа, больше, чем TapSumWordLength и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете объект фильтра.

TapSumMode

Это свойство, доступное только после того, как, ваш фильтр находится в режиме фиксированной точки, задает, как фильтр выводит результаты операций суммирования, которые включают веса касания фильтра. Только симметричный (dfilt.dfsymfir) и антисимметричный (dfilt.dfasymfir) КИХ-фильтры используют это свойство.

Когда доступно, вы выбираете из одного из следующих значений:

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

  • KeepMSB — средние значения вы задаете размер слова для представления результатов суммирования суммы касания сохранить биты высшего порядка в данных. Фильтр устанавливает дробную длину отбрасывать LSBs от операции суммы. Это - значение свойства по умолчанию.

  • KeepLSB — средние значения вы задаете размер слова для представления результатов суммирования суммы касания сохранить биты более низкоуровневые в данных. Фильтр устанавливает дробную длину отбрасывать MSBs от операции суммы. Сравните с опцией KeepMSB.

  • Определение точности средние значения вы задаете слово и дробные длины, чтобы примениться к выводу данных от операций суммы касания.

TapSumWordLength

Задает размер слова использование фильтра, чтобы представлять вывод от операций суммы касания. Значение по умолчанию составляет 17 битов. Только dfasymfir и фильтры dfsymfir включают это свойство.