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

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

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

Когда 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Структура функция, чтобы создать фильтр, 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единственный, и 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]Определение точности

Средства управления, устанавливает ли фильтр выходное слово и дробные длины, и слово аккумулятора и дробные длины автоматически обеспечивать лучшие результаты точности во время фильтрации. Значение по умолчанию, 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 — предписывает, чтобы фильтр, чтобы установить выходные данные фракционировал длину, чтобы максимизировать точность в выходных данных.

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

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

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

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

  • ceil Округление в сторону плюс бесконечности.

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

  • fix Округление в сторону нуля.

  • floor Округление в сторону минус бесконечности.

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

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

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

ScaleValueFracLength

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

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

ScaleValues

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

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

Signed

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

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

sosMatrix

[1 0 0 1 0 0]

Содержит коэффициенты фильтра как значения свойств. Отображается матрица в формате [разделяет x тип данных коэффициентов/раздела]. [15x6 double] Матрица SOS представляет фильтр 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Структура функция вы выбираете),

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

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

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

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Структура создать объект фильтра, double значение по умолчанию для Arithmetic свойство.

single

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

fixed

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

'double'.  Когда вы используете один из dfiltСтруктура методы, чтобы создать фильтр, 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] isa, размер слова используется для квантования. Второй элемент в выражении, 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.dfsymfir и dfilt.dfasymfir объекты фильтра

  • Вход раздела, множимое и значения состояния в объектах фильтра 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Структура метод, чтобы создать ваш фильтр. Обратитесь к информации о ссылке на функцию для 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, и положительные или отрицательные целые числа.

Решетка

Когда вы создаете основанный на решетке БИХ-фильтр, ваши коэффициенты числителя (от вашего БИХ моделируют фильтр или dfilt по умолчанию образуйте решетку функцию filter), хранятся в 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), фильтр настраивает дробную длину, чтобы обеспечить лучшую точность для нового размера слова.

  • SpecifyPrecision — позволяет вам установить дробную длину, используемую отфильтрованными данными. Когда вы выбираете этот выбор, можно установить выходную длину части с помощью 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 опция.

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

Когда вы переключаетесь на фильтрацию фиксированной точки от с плавающей точкой, вы, скорее всего, собираетесь выбросить некоторые биты данных после операций продукта в вашем фильтре, возможно, потому что у вас есть ограниченные ресурсы. Когда необходимо отбросить некоторые биты, вы можете принять решение отбросить младшие значащие биты (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 опция.

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

TapSumWordLength

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

Для просмотра документации необходимо авторизоваться на сайте