Существует различие между фильтрами фиксированной точки и квантованными фильтрами — квантованные фильтры представляют надмножество, которое включает фильтры фиксированной точки.
Когда 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 | Допустимые значения [значение по умолчанию] | Краткое описание |
---|---|---|
| Любое положительное или отрицательное целое число битов [29] | Указывает, что дробная длина раньше интерпретировала вывод данных аккумулятором. Это - свойство КИХ-фильтров и фильтров решетки. БИХ-фильтры имеют два подобных свойства — |
| Любое положительное целое число битов [40] | Устанавливает размер слова, используемый, чтобы хранить данные в аккумуляторе/буфере. |
| [Двойной], один, зафиксированный | Задает арифметику использование фильтра. Дает вам опции |
| [Верный] или ложный | Задает, бросить ли числовые данные к соответствующему формату аккумулятора (как показано в схемах потока сигналов) прежде, чем выполнить операции суммы. |
| [Верный] или ложный | Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы представлять коэффициенты фильтра без переполнения. Выключение этого путем устанавливания значения к |
| Любое положительное или отрицательное целое число битов [14] | Установите дробную длину использование фильтра интерпретировать коэффициенты. |
| Любое положительное целое число битов [16] | Задает размер слова, чтобы применяться к коэффициентам фильтра. |
| Любое положительное или отрицательное целое число битов [29] | Задает, как алгоритм фильтра интерпретирует результаты операций сложения включающие коэффициенты знаменателя. |
| Любое положительное или отрицательное целое число битов [14] | Устанавливает дробную длину использование фильтра интерпретировать коэффициенты знаменателя. |
| Любое содействующее значение фильтра [1] | Содержит коэффициенты знаменателя для БИХ-фильтров. |
| Любое положительное или отрицательное целое число битов [29] | Задает, как алгоритм фильтра интерпретирует результаты операций продукта включающие коэффициенты знаменателя. Можно изменить это значение свойства после того, как вы установите |
| Любое положительное или отрицательное целое число битов [15] | Указывает, что дробная длина раньше интерпретировала состояния, сопоставленные с коэффициентами знаменателя в фильтре. |
FracDelay | Любое десятичное значение между 0 и 1 выборкой | Задает дробную задержку, обеспеченную фильтром, в десятичных дробях выборки. |
FDAutoScale | [Верный] или ложный | Задает, выбирает ли фильтр автоматически соответствующее масштабирование, чтобы представлять дробное значение задержки без переполнения. Выключение этого путем устанавливания значения к |
FDFracLength | Любое положительное или отрицательное целое число битов [5] | Задает дробную длину, чтобы представлять дробную задержку. |
FDProdFracLength | Любое положительное или отрицательное целое число битов [34] | Задает дробную длину, чтобы представлять результат умножения коэффициентов с дробной задержкой. |
FDProdWordLength | Любое положительное или отрицательное целое число битов [39] | Задает размер слова, чтобы представлять результат умножения коэффициентов с дробной задержкой. |
FDWordLength | Любое положительное или отрицательное целое число битов [6] | Задает размер слова, чтобы представлять дробную задержку. |
| Любое положительное целое число битов [16] | Указывает, что размер слова раньше представлял состояния, сопоставленные коэффициентами знаменателя в фильтре. |
|
| Средства управления, устанавливает ли фильтр выходное слово и дробные длины, и слово аккумулятора и дробные длины автоматически обеспечивать лучшие результаты точности во время фильтрации. Значение по умолчанию, |
| Не применяется. | Описывает поток сигналов для объекта фильтра, включая все активные элементы, которые выполняют операции во время фильтрации — усиления, задержки, суммы, продукты и ввод/вывод. |
| Любое положительное или отрицательное целое число битов [15] | Задает дробную длину использование фильтра, чтобы интерпретировать данные, которые будут обработаны фильтром. |
| Любое положительное целое число битов [16] | Задает размер слова, примененный, чтобы представлять входные данные. |
| Любые лестничные коэффициенты в типе данных с двойной точностью [1] |
|
| Любое положительное или отрицательное целое число битов [29] |
|
| Любое положительное или отрицательное целое число битов [14] |
|
| Любые коэффициенты структуры решетки. Никакое значение по умолчанию. | Хранит коэффициенты решетки для основанных на решетке фильтров. |
| Любое положительное или отрицательное целое число битов [29] | Задает, как аккумулятор выводит результаты операций на коэффициентах решетки. |
| Любое положительное или отрицательное целое число битов [15] | Указывает, что дробная длина применилась к коэффициентам решетки. |
| Любое положительное или отрицательное целое число битов [15] | Устанавливает дробную длину для значений, используемых в операциях продукта в фильтре. Прямая форма я транспонировал (df1t) структуры фильтра, включает это свойство. |
| Любое положительное целое число битов [16] | Наборы размер слова применились к входу значений умножить операции (множимые). Структура фильтра df1t включает это свойство. |
| Любое положительное или отрицательное целое число битов [29] | Задает, как алгоритм фильтра интерпретирует результаты операций сложения включающие коэффициенты числителя. |
| Любые коэффициенты фильтра с двойной точностью [1] | Содержит содействующие значения числителя для фильтра. |
| Любое положительное или отрицательное целое число битов [14] | Устанавливает дробную длину, используемую, чтобы интерпретировать коэффициенты числителя. |
| Любое положительное или отрицательное целое число битов [29] | Задает, как алгоритм фильтра интерпретирует результаты операций продукта включающие коэффициенты числителя. Можно изменить значение свойства после того, как вы установите |
| Любое положительное или отрицательное целое число битов [15] | Для БИХ-фильтров это задает дробную длину, применился к состояниям числителя фильтра. Указывает, что дробная длина раньше интерпретировала состояния, сопоставленные с коэффициентами числителя в фильтре. |
| Любое положительное целое число битов [16] | Для БИХ-фильтров это задает размер слова, применился к состояниям числителя фильтра. Указывает, что размер слова раньше интерпретировал состояния, сопоставленные с коэффициентами числителя в фильтре. |
| Любое положительное или отрицательное целое число битов — [15] или [12] биты в зависимости от структуры фильтра | Определяет, как фильтр интерпретирует отфильтрованные данные. Можно изменить значение |
| [AvoidOverflow], BestPrecision, SpecifyPrecision | Устанавливает режим использование фильтра масштабировать отфильтрованные входные данные. У вас есть следующий выбор:
|
| Любое положительное целое число битов [16] | Определяет размер слова, используемый для отфильтрованных данных. |
| Насыщайте или [перенеситесь] | Устанавливает режим, используемый, чтобы ответить на условия переполнения в вычислениях с фиксированной точкой. Выберите из любого |
| Любое положительное или отрицательное целое число битов [29] | Для выхода от операции продукта это устанавливает дробную длину, используемую, чтобы интерпретировать числовые данные. Это свойство становится перезаписываемым (можно изменить значение) после того, как вы устанавливаете |
| [FullPrecision], KeepLSB, KeepMSB, SpecifyPrecision | Определяет, как фильтр обрабатывает выход операций продукта. Выберите из полной точности ( |
| Любое положительное число битов. Значение по умолчанию равняется 16 или 32 в зависимости от структуры фильтра | Задает размер слова, чтобы использовать для результатов операций умножения. Это свойство становится перезаписываемым (можно изменить значение) после того, как вы устанавливаете |
|
| Задает, сбросить ли состояния фильтра и память перед каждой операцией фильтрации. Позволяет вам решить, сохраняет ли ваш фильтр состояния от предыдущих запусков фильтрации. |
| [Конвергентный], перекройте, зафиксируйте, поставьте в тупик, самый близкий, вокруг | Устанавливает режим использование фильтра квантовать числовые значения, когда значения находятся между представимыми значениями для формата данных (слово и дробные длины).
Выбор, который вы делаете, влияет только на аккумулятор и выходную арифметику. Коэффициент и входная арифметика всегда вокруг. Наконец, продукты никогда не переполняются — они обеспечивают полную точность. |
| Любое положительное или отрицательное целое число битов [29] | Масштабируйтесь значения работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения шкалы путем установки дробной длины. Доступный только, когда вы отключаете |
| [2 x 1 двойное] массив со значениями 1 | Хранит масштабирующиеся значения для разделов в фильтрах SOS. |
| [Верный] или ложный | Задает ли использование фильтра подписанные или коэффициенты фиксированной точки без знака. Только коэффициенты отражают эту установку свойства. |
| [1 0 0 1 0 0] | Содержит коэффициенты фильтра как значения свойств. Отображается матрица в формате [разделяет x тип данных коэффициентов/раздела]. |
| [Верный] или ложный | Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы предотвратить переполнение данными, вводящими раздел фильтра SOS. Установка этого свойства к |
| Любое положительное или отрицательное целое число битов [29] | Значения раздела работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения раздела между разделами фильтра путем установки дробной длины. Это применяется к данным, вводящим раздел. Сравните с Section |
| Любое положительное или отрицательное целое число битов [29] | Устанавливает размер слова, используемый, чтобы представлять данные, перемещающиеся в раздел фильтра SOS. |
| [Верный] или ложный | Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы предотвратить переполнение данными, оставляя раздел фильтра SOS. Установка этого свойства к |
| Любое положительное или отрицательное целое число битов [29] | Значения раздела работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения раздела между разделами фильтра путем установки дробной длины. Это применяется к данным, оставляя раздел. Сравните с Section |
| Любое положительное или отрицательное целое число битов [32] | Устанавливает размер слова, используемый, чтобы представлять данные, перемещающиеся из одного раздела фильтра SOS. |
| Любое положительное или отрицательное целое число битов [15] | Позволяет вам установить дробную длину, примененную, чтобы интерпретировать состояния фильтра. |
| [1x1 встроил | Содержит состояния фильтра прежде, во время, и после работы фильтра. Состояния действуют как память фильтра между фильтрацией запусков или сеансов. Заметьте, что состояния используют |
| Любое положительное целое число битов [16] | Устанавливает размер слова, используемый, чтобы представлять состояния фильтра. |
| Любое положительное или отрицательное целое число битов [15] | Устанавливает дробную длину, используемую, чтобы представлять значения касания фильтра, кроме того, операции. Это доступно после того, как вы установите |
| FullPrecision, KeepLSB, [KeepMSB], SpecifyPrecision | Определяет, как аккумулятор, который выходные параметры сохранили, которые включают веса касания фильтра. Выберите из полной точности ( Симметричные и антисимметричные КИХ-фильтры включают это свойство. |
| Любое положительное число битов [17] | Устанавливает размер слова, используемый, чтобы представлять веса касания фильтра во время сложения. Симметричные и антисимметричные КИХ-фильтры включают это свойство. |
Когда вы создаете фильтр фиксированной точки, вы создаете объект фильтра (dfilt
объект. В этом руководстве, фильтре условий, dfilt
объект и объект фильтра используются взаимозаменяемо. Чтобы отфильтровать данные, вы применяете объект фильтра к своему набору данных. Выход операции является данными, отфильтрованными фильтром и значениями свойства фильтра.
Объекты фильтра имеют свойства, которым вы присваиваете значения свойств. Вы используете эти значения свойств, чтобы присвоить различные характеристики фильтрам, включая которые вы создаете,
Тип арифметики, чтобы использовать в фильтрации операций
Структура фильтра раньше реализовала фильтр (не свойство, которое можно установить или изменить — вы выбираете его dfilt
Структура
функция вы выбираете),
Местоположения квантизации и операций броска в фильтре
Форматы данных используются в квантовании, броске и фильтрации операций
Детали свойств, сопоставленных с фильтрами фиксированной точки, описаны в алфавитном порядке на следующих страницах.
За исключением фильтров пространства состояний, всего dfilt
объекты, которые используют фиксированную арифметику, имеют это свойство, которое задает дробную длину, применился к данным в аккумуляторе. Объединенный с AccumWordLength
, AccumFracLength
помогает полностью задать как аккумулятор выходные данные после обработки операций сложения. Как со всеми дробными свойствами длины, AccumFracLength
может быть любое целое число, включая целые числа, больше, чем AccumWordLength
, и положительные или отрицательные целые числа.
Вы используете AccumWordLength
задавать длину слова данных, используемую в аккумуляторе. Установите это свойство на значение, которое совпадает с вашим намеченным оборудованием. Например, много цифровых сигнальных процессоров используют 40-битные аккумуляторы, таким образом, устанавливает AccumWordLength
к 40 в вашем фильтре фиксированной точки:
set(hq,'arithmetic','fixed'); set(hq,'AccumWordLength',40);
Обратите внимание на то, что AccumWordLength
только применяется к фильтрам чей Arithmetic
значением свойства является fixed
.
Возможно, самое важное свойство, когда вы работаете с dfilt
объекты, Arithmetic
определяет тип арифметики использование фильтра, и свойства или квантизаторы, которые составляют фиксированную точку или квантованный фильтр. Вы используете векторы символов, чтобы установить Arithmetic
значение свойства.
Следующая таблица показывает векторы допустимого символа для свойства Arithmetic. После таблицы каждый вектор символов свойства появляется с более подробной информацией о том, что происходит, когда вы выбираете вектор символов как значение для Arithmetic
в вашем dfilt
.
Арифметическое свойство | Информируйте описание эффекта на фильтре |
---|---|
| Все операции фильтрации и коэффициенты используют представления с плавающей точкой с двойной точностью и математику. Когда вы используете |
| Все операции фильтрации и коэффициенты используют представления с плавающей точкой с одинарной точностью и математику. |
| Эта опция применяет выбранные значения по умолчанию для свойств в объекте фильтра фиксированной точки, включая такие свойства как содействующие размеры слова, дробные длины и различные рабочие режимы. Обычно значения по умолчанию совпадают с теми, вы используете на многих цифровых сигнальных процессорах. Позволяет подписанные зафиксированные типы данных только. Фильтры вычислений с фиксированной точкой доступны только, когда вы устанавливаете программное обеспечение 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
свойство определяет, как фильтр обрабатывает входные значения, чтобы суммировать операции в фильтре. После того, как вы устанавливаете свой фильтр Arithmetic
значение свойства к fixed
, у вас есть опция использования CastBeforeSum
управлять типом данных некоторых входных параметров (слагаемые) к суммированию в вашем фильтре. Определить, какие слагаемые отражают CastBeforeSum
установка свойства, обратитесь к странице с описанием для схемы потока сигналов для структуры фильтра.
CastBeforeSum
задает, бросить ли выбранных слагаемых к суммированию в фильтре к выходному формату от операции сложения прежде, чем выполнить сложение. Когда вы задаете true
для значения свойства результаты затронутых операций суммы совпадают наиболее тесно с результатами, найденными на большинстве цифровых сигнальных процессоров. При выполнении операции броска, прежде чем суммирование добавляет одну или две дополнительных операции квантования, которые могут добавить ошибочные источники в результаты фильтра.
Определение CastBeforeSum
быть false
препятствует тому, чтобы слагаемые были брошены к выходному формату перед операцией сложения. Выберите эту установку, чтобы получить самые точные результаты суммирования, не рассматривая оборудование, которое может использовать ваш фильтр.
Заметьте, что выходной формат для каждой операции суммы отражает значение выходного свойства, заданного в схеме структуры фильтра. На какое входное свойство ссылается CastBeforeSum
зависит от структуры.
Значение свойства | Описание |
---|---|
| Конфигурирует операции суммирования фильтра, чтобы сохранить слагаемых в формате, который несут от предыдущей операции. |
| Конфигурирует операции суммирования фильтра, чтобы преобразовать формат ввода слагаемых, чтобы совпадать с выходным форматом суммирования прежде, чем выполнить операцию суммирования. Обычно это генерирует результаты суммирования, которые более тесно совпадают с найденными от цифровых сигнальных процессоров |
Другая точка — с CastBeforeSum
установите на false
, процесс реализации фильтра вставляет промежуточный формат типа данных, чтобы содержать временно сумму полной точности входных параметров. Отдельный блок Convert выполняет процесс кастинга результата сложения к формату аккумулятора. Этот промежуточный формат данных происходит, потому что блок Sum в Simulink® всегда бросает вход (слагаемые) к типу выходных данных.
Схемы настроек CastBeforeSum. Когда CastBeforeSum
false
, суммируйте элементы в схемах потока сигналов фильтра, выглядите так:
показ, что входные данные к операциям суммы (слагаемые) сохраняют свой размер слова формата и дробную длину от предыдущих операций. Процесс сложения использует существующие форматы ввода и затем бросает выход к формату, заданному AccumFormat
. Таким образом выходные данные имеют размер слова и дробную длину, заданную AccumWordLength
и AccumFracLength
.
Когда CastBeforeSum
true
, суммируйте элементы в схемах потока сигналов фильтра, выглядите так:
при показе, что входные данные переделаны к размеру слова формата аккумулятора и дробной длине (AccumFormat), прежде чем происходит операция суммы. Вывод данных операцией сложения имеет размер слова и дробную длину, заданную AccumWordLength
и AccumFracLength
.
То, как фильтр представляет коэффициенты фильтра, зависит от значения свойства 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
Очевидно пяти битов недостаточно, чтобы представлять коэффициенты точно.
Скалярные фильтры фиксированной точки, что вы создаете использование dfilt.scalar
использование это свойство задать дробную длину применилось к скалярным коэффициентам фильтра. Как коэффициент фракционировали длину связанные свойства для КИХ, решетки, и БИХ-фильтров, CoeffFracLength
не отображен для скалярных фильтров, пока вы не устанавливаете CoeffAutoScale
к false
. Если вы изменяете автоматическое масштабирование, можно установить дробную длину для коэффициентов к любому значению, которого вы требуете.
Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 14 битов с CoeffWordlength
из 16 битов.
Один первичный фактор в разработке фильтров для оборудования является длиной слова данных. CoeffWordLength
задает размер слова для них хранение данных и арифметические местоположения:
Числитель и знаменатель фильтруют коэффициенты
Коснитесь суммы в dfilt.dfsymfir
и dfilt.dfasymfir
объекты фильтра
Вход раздела, множимое и значения состояния в объектах фильтра SOS прямой формы, таких как dfilt.df1t
и dfilt.df2
Масштабируйте значения в фильтрах второго порядка
Решетка и лестничные коэффициенты в объектах фильтра решетки, таких как dfilt.latticearma
и dfilt.latticemamax
Получите в dfilt.scalar
Установка этого значения свойства управляет размером слова для перечисленных данных. В большинстве случаев слова данных в этом списке имеют отдельные дробные свойства длины задать связанные дробные длины.
Любой положительный, целочисленный размер слова работает здесь, ограниченный машиной, которую вы используете, чтобы разработать ваш фильтр и оборудование, которое вы используете, чтобы развернуть ваш фильтр.
Структуры фильтра df1
, df1t
, df2
, и df2t
то использование fixed
арифметика имеет это свойство, которое задает дробную длину, применился к коэффициентам знаменателя в аккумуляторе. В сочетании с AccumWordLength
, свойства полностью задают, как аккумулятор выходные данные сохранил там.
Как со всеми дробными свойствами длины, DenAccumFracLength
может быть любое целое число, включая целые числа, больше, чем AccumWordLength
, и положительные или отрицательные целые числа. Чтобы смочь изменить значение свойства для этого свойства, вы устанавливаете FilterInternals
к SpecifyPrecision
.
Свойство DenFracLength
содержит значение, которое задает дробную длину для коэффициентов знаменателя для вашего фильтра. DenFracLength
указывает, что дробная длина раньше интерпретировала данные, хранимые в C
. Используемый в сочетании с CoeffWordLength
, эти два свойства задают интерпретацию коэффициентов, сохраненных в векторе, который содержит коэффициенты знаменателя.
Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 15 битов с CoeffWordLength
из 16 битов.
Коэффициенты знаменателя для вашего БИХ-фильтра, взятого из прототипа, с которого вы начинаете, хранятся в этом свойстве. Обычно это - массив 1 на n данных в двойном формате, где N является длиной фильтра.
Все БИХ-объекты фильтра включают Denominator
, кроме основанных на решетке фильтров, которые хранят их коэффициенты в Lattice
свойство и фильтры секции второго порядка, такие как dfilt.df1tsos
, которые используют SosMatrix
свойство содержать коэффициенты для разделов.
Свойство всех прямых БИХ формы dfilt
объекты, кроме тех, что секции второго порядка реализации, DenProdFracLength
указывает, что дробная длина применилась к выводу данных от операций продукта, которые фильтр выполняет на коэффициентах знаменателя.
Рассмотрение потока сигналов схематически изображает для dfilt.df1t
отфильтруйте, например, вы видите, что знаменатели и числители обработаны отдельно. Когда вы устанавливаете ProductMode
к SpecifyPrecision
, можно изменить DenProdFracLength
установка вручную. В противном случае, для операций умножения, которые используют коэффициенты знаменателя, фильтр устанавливает дробную длину, как задано ProductMode
установка.
Когда вы смотрите на блок-схему для dfilt.df1sos
объект фильтра, состояния, сопоставленные с содействующими операциями знаменателя, берет дробную длину из этого свойства. В сочетании с DenStateWordLength
свойство, эти свойства полностью задают, как фильтр интерпретирует состояния.
Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 15 битов с DenStateWordLength
из 16 битов.
Когда вы смотрите на блок-схему для dfilt.df1sos
объект фильтра, состояния, сопоставленные с содействующими операциями знаменателя, берет формат данных из этого свойства и DenStateFracLength
свойство. В комбинации эти свойства полностью задают, как фильтр интерпретирует состояние, которое это использует.
По умолчанию значение составляет 16 битов с DenStateFracLength
из 15 битов.
Подобно панели FilterInternals в FDATool это свойство управляет, устанавливает ли фильтр выходное слово и дробные длины автоматически, и слово аккумулятора и дробные длины автоматически также, чтобы обеспечить лучшие результаты точности во время фильтрации. Значение по умолчанию, FullPrecision
, устанавливает автоматическое слово и дробное определение длины фильтром. Установка FilterInternals
к SpecifyPrecision
отсоединяет выход и связанные с аккумулятором свойства, таким образом, можно установить собственное слово и фракционировать длины для них. Обратите внимание на то, что
Каждый dfilt
объект имеет FilterStructure
свойство. Это - свойство только для чтения, содержащее вектор символов, который объявляет структуру объекта фильтра, который вы создали.
Когда вы создаете объекты фильтра, FilterStructure
значение свойства возвращено содержащий один из векторов символов, показанных в следующей таблице. Свойство FilterStructure
указывает на архитектуру фильтра и прибывает от конструктора, которого вы используете, чтобы создать фильтр.
После того, как вы создадите объект фильтра, вы не можете изменить FilterStructure
значение свойства. Чтобы сделать фильтры, которые используют отличные структуры, вы создаете новые фильтры с помощью соответствующих методов или использования convert
переключаться на новую структуру.
Значение по умолчанию. Поскольку это зависит от конструктора, которого вы используете, и конструктор включает определение структуры фильтра, нет никакого значения по умолчанию. Когда вы пытаетесь создать фильтр, не задавая структуру, MATLAB возвращает ошибку.
Имя конструктора фильтров | Свойство FilterStructure и тип фильтра |
---|---|
| Прямая форма I |
| Прямая форма я фильтрую реализованные секции второго порядка использования |
| Прямая форма я транспонировал |
| Прямая форма II |
| Прямая форма II фильтров, реализованных с помощью разделов второго порядка |
| Прямая форма II транспонированный |
| Антисимметричная конечная импульсная характеристика (FIR). Четные и нечетные формы. |
| Прямой КИХ формы |
| Прямой КИХ формы транспонирован |
| Образуйте решетку allpass |
| Образуйте решетку авторегрессивный (AR) |
| Образуйте решетку фазу минимума скользящего среднего значения (MA) |
| Образуйте решетку фазу максимума скользящего среднего значения (MA) |
| Образуйте решетку ARMA |
| Симметричный КИХ. Четные и нечетные формы |
| Скаляр |
Отфильтруйте Структуры с Квантизацией, Показанной на месте. Помочь вам изучить, как и где квантизация происходит в структурах фильтра в этом тулбоксе, фигуре ниже показов структура для Прямой Формы 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, программное обеспечение позволило вам преобразовать передаточные функции фильтра в другие формы фильтра, и от других форм фильтра до формы передаточной функции. Соответствующие функции преобразования включают следующие функции.
Функция преобразования | Описание |
---|---|
Преобразует от двойного фильтра allpass до передаточной функции. | |
Преобразует от решетки связанный фильтр allpass к передаточной функции. | |
Преобразуйте фильтр дискретного времени от одной структуры фильтра до другого. | |
Преобразует квантованные фильтры, чтобы создать секции второго порядка. Мы рекомендуем этот метод для преобразования квантованных фильтров к секциям второго порядка. | |
Преобразует с передаточной функции на двойной фильтр allpass. | |
Преобразует от передаточной функции до решетки связанный фильтр allpass. | |
Преобразует с передаточной функции на фильтр решетки. | |
Преобразует от передаточной функции до формы секции второго порядка. | |
Преобразует от передаточной функции до формы пространства состояний. | |
Преобразует от рациональной передаточной функции до ее учтенного (один раздел) форму (форма нулей, полюсов и усиления). | |
Преобразует форму нулей, полюсов и усиления в форму секции второго порядка. | |
Преобразование нулей, полюсов и усиления формируется к форме пространства состояний. | |
Преобразование нулей, полюсов и усиления формируется к передаточным функциям нескольких разделов порядка. |
Обратите внимание на то, что эти подпрограммы преобразования не применяются к 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 произвольного порядка
dfilt.scalar
фильтрам сохранили значение усиления в gain
свойство. По умолчанию значение усиления - одно — действия фильтра как провод.
InputFracLength
задает дробную длину, присвоенную входным данным для вашего фильтра. Используемый в тандеме с InputWordLength
, пара задает формат данных для входных данных, вы предусматриваете фильтрацию.
Как со всеми дробными свойствами длины в dfilt
объекты, значение, которое вы вводите здесь, могут быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова в этом случае 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'
Авторегрессивное, скользящее среднее значение образовывает решетку объекты фильтра (lattticearma
) используйте лестничные коэффициенты, чтобы задать фильтр. В сочетании с LadderFracLength
и CoeffWordLength
, эти три свойства задают или отражают, как аккумулятор выходные данные сохранил там. Как со всеми дробными свойствами длины, LadderAccumFracLength
может быть любое целое число, включая целые числа, больше, чем AccumWordLength
, и положительные или отрицательные целые числа. Значение по умолчанию составляет 29 битов.
Позволять вам управлять путем ваш latticearma
фильтр интерпретирует коэффициенты знаменателя, LadderFracLength
наборы дробная длина применились к лестничным коэффициентам за ваш фильтр. Значение по умолчанию составляет 14 битов.
Как со всеми дробными свойствами длины, LadderFracLength
может быть любое целое число, включая целые числа, больше, чем AccumWordLength
, и положительные или отрицательные целые числа.
Когда вы создаете основанный на решетке БИХ-фильтр, ваши коэффициенты числителя (от вашего БИХ моделируют фильтр или dfilt
по умолчанию образуйте решетку функцию filter), хранятся в
Lattice
свойство dfilt
объект. Свойства CoeffWordLength
и LatticeFracLength
задайте формат данных объектное использование, чтобы представлять коэффициенты решетки. По умолчанию образуйте решетку коэффициенты, находятся в формате с двойной точностью.
Образуйте решетку объекты фильтра (latticeallpass
, latticearma
, latticemamax
, и latticemamin
) используйте коэффициенты решетки, чтобы задать фильтр. В сочетании с LatticeFracLength
и CoeffWordLength
, эти три свойства задают, как аккумулятор выходные параметры образовывает решетку связанные с коэффициентом данные, хранимые там. Как со всеми дробными свойствами длины, LatticeAccumFracLength
может быть любое целое число, включая целые числа, больше, чем AccumWordLength
, и положительные или отрицательные целые числа. По умолчанию свойство установлено в 31 бит.
Чтобы позволить вам управлять путем, ваш фильтр интерпретирует коэффициенты знаменателя, LatticeFracLength
наборы дробная длина применились к коэффициентам решетки за ваш фильтр решетки. Когда вы создаете фильтр решетки по умолчанию, LatticeFracLength
16 битов.
Как со всеми дробными свойствами длины, LatticeFracLength
может быть любое целое число, включая целые числа, больше, чем CoeffWordLength
, и положительные или отрицательные целые числа.
Каждый элемент входных данных для умножить операции имеет и размер слова и дробную длину, чтобы задать ее представление. MultiplicandFracLength
устанавливает дробную длину использовать, когда объект фильтра выполняет, любой умножает операцию во время фильтрации. Для фильтров по умолчанию это установлено в 15 битов.
Как со всем словом и дробными свойствами длины, MultiplicandFracLength
может быть любое целое число, включая целые числа, больше, чем CoeffWordLength
, и положительные или отрицательные целые числа.
Каждый элемент входных данных для умножить операции имеет и размер слова и дробную длину, чтобы задать ее представление. MultiplicandWordLength
устанавливает размер слова использовать, когда фильтр выполняет, любой умножает операцию во время фильтрации. Для фильтров по умолчанию это установлено в 16 битов. Только df1t
и df1tsos
объекты фильтра включают MultiplicandFracLength
свойство.
Только df1t
и df1tsos
объекты фильтра включают MultiplicandWordLength
свойство.
Структуры фильтра df1
, df1t
, df2
, и df2t
то использование fixed
арифметика имеет это свойство, которое задает дробную длину, применился к коэффициентам числителя в выходе от аккумулятора. В сочетании с AccumWordLength
, NumAccumFracLength
свойство полностью задает как аккумулятор выходные параметры связанные с числителем данные, хранимые там.
Как со всеми дробными свойствами длины, NumAccumFracLength
может быть любое целое число, включая целые числа, больше, чем AccumWordLength
, и положительные или отрицательные целые числа. 30 битов являются значением по умолчанию, когда вы создаете объект фильтра. Чтобы смочь изменить значение для этого свойства, установите FilterInternals
для фильтра к SpecifyPrecision
.
Коэффициенты числителя для вашего фильтра, взятого из прототипа, который вы начинаете с или от фильтра по умолчанию, хранятся в этом свойстве. Обычно это - массив 1 на n данных в двойном формате, где N является длиной фильтра.
Все объекты фильтра включают Numerator
, кроме основанных на решетке фильтров и фильтров секции второго порядка, таких как dfilt.latticema
и dfilt.df1tsos
.
Свойство NumFracLength
содержит значение, которое задает дробную длину для коэффициентов числителя для вашего фильтра. NumFracLength
указывает, что дробная длина раньше интерпретировала коэффициенты числителя. Используемый в сочетании с CoeffWordLength
, эти два свойства задают интерпретацию коэффициентов, сохраненных в векторе, который содержит коэффициенты числителя.
Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 15 битов с CoeffWordLength
из 16 битов.
Свойство всех прямых БИХ формы dfilt
объекты, кроме тех, что секции второго порядка реализации, NumProdFracLength
указывает, что дробная длина применилась к выводу данных от операций продукта, которые фильтр выполняет на коэффициентах числителя.
Рассмотрение потока сигналов схематически изображает для dfilt.df1t
отфильтруйте, например, вы видите, что знаменатели и числители обработаны отдельно. Когда вы устанавливаете ProductMode
к SpecifyPrecision
, можно изменить NumProdFracLength
установка вручную. В противном случае, для операций умножения, которые используют коэффициенты числителя, фильтр устанавливает размер слова, как задано ProductMode
установка.
Все варианты прямой формы, которую я структурирую, включают свойство NumStateFracLength
сохранить дробную длину применилось к состояниям числителя за ваш объект фильтра. По умолчанию это свойство имеет значение 15 битов с CoeffWordLength
из 16 битов, которые можно изменить после того, как вы создадите объект фильтра.
Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также.
Когда вы смотрите на блок-схему для df1sos
объект фильтра, состояния, сопоставленные с содействующими операциями числителя, берет формат данных из этого свойства и NumStateFracLength
свойство. В комбинации эти свойства полностью задают, как фильтр интерпретирует состояние, которое это использует.
Как со всеми дробными свойствами длины, значение, которое вы вводите здесь, может быть любым отрицательным или положительным целым числом или нулем. Дробная длина может быть больше, чем связанный размер слова, также. По умолчанию значение составляет 16 битов с NumStateFracLength
из 11 битов.
Чтобы задать выход от вашего объекта фильтра, вам нужны оба слово и дробные длины. OutputFracLength
определяет дробную длину, примененную, чтобы интерпретировать выходные данные. Объединение этого с OutputWordLength
полностью задает формат выхода.
Ваша дробная длина может быть любым отрицательным или положительным целым числом или нулем. Кроме того, дробная длина, которую вы задаете, может быть больше, чем связанный размер слова. Обычно значение по умолчанию составляет 11 битов.
Устанавливает режим использование фильтра масштабировать отфильтрованный (выход) данные. У вас есть следующий выбор:
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
установить размер слова, используемый выходом от вашего фильтра. Установите это свойство на значение, которое совпадает с вашим намеченным оборудованием. Например, некоторые цифровые сигнальные процессоры используют 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
свойство задано как один из следующих двух векторов символов, указывающих, как ответить на переполнение в вычислениях с фиксированной точкой:
'saturate'
— насыщайте переполнение.
Когда значения данных, которые будут квантованы, лежат за пределами области значений самых больших и самых маленьких представимых чисел (как задано применимым размером слова и дробными свойствами длины), эти значения квантуются к значению или самого большого или наименьшего представимого значения, в зависимости от которого является самым близким. saturate
значение по умолчанию для OverflowMode
.
'wrap'
— перенесите все переполнение к области значений представимых значений.
Когда значения данных, которые будут квантованы, лежат за пределами области значений самых больших и самых маленьких представимых чисел (как задано по условию свойства формата), эти значения перенесены назад в ту область значений с помощью арифметики в остаточных классах относительно самого маленького представимого номера. Можно узнать больше об арифметике в остаточных классах в документации Fixed-Point Designer.
Эти правила применяются к OverflowMode
свойство.
Применяется к аккумулятору и выходным данным только.
Не применяется к коэффициентам или входным данным. Они всегда насыщают результаты.
Не применяется к продуктам. Продукты обеспечивают полную точность в любом случае. Ваши фильтры не теряют точность в продуктах.
Примечание
Числа в фильтрах с плавающей точкой, которые расширяют вне переполнения динамического диапазона к ±inf
.
После того, как вы устанавливаете ProductMode
поскольку фиксированная точка фильтрует к SpecifyPrecision
, это свойство становится доступным для вас, чтобы измениться. ProductFracLength
устанавливает дробную длину использование фильтра для результатов операций умножения. Только КИХ-фильтры, такие как асимметричные ЕЛИ или образовывают решетку авторегрессивные фильтры, включают это динамическое свойство.
Ваша дробная длина может быть любым отрицательным или положительным целым числом или нулем. Кроме того, дробная длина, которую вы задаете, может быть больше, чем связанный размер слова. Обычно значение по умолчанию составляет 11 битов.
Это свойство, доступное, когда ваш фильтр находится в режиме вычислений с фиксированной точкой, задает, как фильтр выводит результаты операций умножения. Весь dfilt
объекты включают это свойство, когда они используют вычисления с фиксированной точкой.
Когда доступно, вы выбираете из одного из следующих значений для ProductMode
:
FullPrecision
— означает, что фильтр автоматически выбирает размер слова и дробную длину, которую это использует, чтобы представлять результаты операций умножения. Установка позволяет продукту сохранять точность, обеспеченную входными параметрами (множимые) к операции.
KeepMSB
— средние значения вы задаете размер слова для представления результатов операции продукта. Фильтр устанавливает дробную длину отбрасывать LSBs, сохранять биты высшего порядка в данных и обеспечивать точность.
KeepLSB
— средние значения вы задаете размер слова для представления результатов операции продукта. Фильтр устанавливает дробную длину отбрасывать MSBs, сохранять биты более низкоуровневые и обеспечивать точность. Сравните с KeepMSB
опция.
SpecifyPrecision
— средние значения вы задаете размер слова и дробную длину, чтобы примениться к выводу данных от операций продукта.
Когда вы переключаетесь на фильтрацию фиксированной точки от с плавающей точкой, вы, скорее всего, собираетесь выбросить некоторые биты данных после операций продукта в вашем фильтре, возможно, потому что у вас есть ограниченные ресурсы. Когда необходимо отбросить некоторые биты, вы можете принять решение отбросить младшие значащие биты (LSB) от результата, поскольку получившаяся ошибка квантования была бы мала, когда LSBs несут меньше веса. Или вы можете принять решение сохранить LSBs, потому что результаты имеют MSBs, которые являются в основном нулем, такой как тогда, когда ваши значения малы относительно области значений формата, в котором они представлены. Так опции для ProductMode
позвольте вам выбрать, как обеспечить информацию, в которой вы нуждаетесь от аккумулятора.
Для получения дополнительной информации о форматах данных, размер слова и дробная длина в вычислениях с фиксированной точкой, обращаются к Примечаниям О Дробной Длине, Размере слова и Точности.
Вы используете ProductWordLength
задавать длину слова данных, используемую выходом от операций умножения. Установите это свойство на значение, которое совпадает с вашим применением по назначению. Например, значение по умолчанию составляет 32 бита, но можно установить любой размер слова.
set(hq,'arithmetic','fixed'); set(hq,'ProductWordLength',64);
Обратите внимание на то, что ProductWordLength
применяется только к фильтрам чей Arithmetic
значением свойства является fixed
.
Определите, восстанавливаются ли состояния фильтра своим начальным значениям для каждой операции фильтрации. Начальные значения существуют значения, когда вы создаете объект фильтра. 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 | Описание округления алгоритма |
---|---|
| Округление в сторону плюс бесконечности. |
| Округление в сторону минус бесконечности. |
| Вокруг к самому близкому. Связывает к положительной бесконечности. |
| Вокруг до самого близкого представимого целого числа. Связывает до самого близкого даже сохраненного целого числа. Это наименее смещено из методов, доступных в этом программном обеспечении. |
| Вокруг к самому близкому. Связывает к отрицательной бесконечности для отрицательных чисел, и к положительной бесконечности для положительных чисел. |
| Округление в сторону нуля. |
Выбор, который вы делаете, влияет только на аккумулятор и выходную арифметику. Коэффициент и входная арифметика всегда вокруг. Наконец, продукты никогда не переполняются — они обеспечивают полную точность.
Структуры фильтра df1sos
, df1tsos
, df2sos
, и df2tsos
то использование fixed
арифметика имеет это свойство, которое задает дробную длину, применился к значениям шкалы использование фильтра между разделами. В сочетании с CoeffWordLength
, эти два свойства полностью задают, как фильтр интерпретирует и использует значения шкалы, сохраненные в свойстве ScaleValues
. Как с дробными свойствами длины, ScaleValueFracLength
может быть любое целое число, включая целые числа, больше, чем CoeffWordLength
, и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете фильтр.
ScaleValues
значения свойств заданы как скаляр (или вектор), который вводит масштабирование для входных параметров (и выходные параметры от каскадных разделов в векторном случае) во время фильтрации:
Когда у вас только есть один раздел в вашем фильтре:
Задайте ScaleValues
значение свойства как скаляр, если вы только хотите масштабировать вход к своему фильтру.
Задайте ScaleValues
свойство как вектор из длины 2, если вы хотите задать масштабирование к входу (масштабируемый с первой записью в векторе) и выход (масштабируемый с последней записью в векторе).
То, когда у вас есть L, расположило каскадом разделы в вашем фильтре:
Задайте ScaleValues
значение свойства как скаляр, если вы только хотите масштабировать вход к своему фильтру.
Задайте значение для ScaleValues
свойство как вектор из длины L +1, если вы хотите масштабировать входные параметры к каждому разделу в вашем фильтре, наряду с выходом:
Первая запись вашего вектора задает входное масштабирование
Каждая последовательная запись задает масштабирование при выходе следующего раздела
Итоговая запись задает масштабирование для фильтра выход.
Значение по умолчанию для ScaleValues
0.
Интерпретация этого свойства описана можно следующим образом со схемами в Интерпретации Свойства ScaleValues.
Примечание
Значение ScaleValues
свойство не квантуется. Данные, затронутые присутствием масштабного коэффициента в фильтре, квантуются согласно соответствующему формату данных.
Когда вы применяетесь normalize
к фильтру фиксированной точки, значению для ScaleValues
свойство изменяется соответственно.
Это - хорошая практика, чтобы выбрать значения для этого свойства, которые являются или положительными или отрицательными степенями двойки.
Интерпретация Свойства ScaleValues. Когда вы задаете значения ScaleValues
свойство квантованного фильтра, значения вводятся как вектор, длина которого определяется количеством каскадных разделов в вашем фильтре:
Следующая схема показывает как 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
.
Когда вы преобразуете 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
true
или false
.
SectionInputAutoScale
= true
означает, что фильтр выбирает дробную длину, чтобы обеспечить значение данных между разделами максимально близко к выходным значениям от предыдущего раздела. true
настройка по умолчанию.
SectionInputAutoScale
= false
удаляет автоматическое масштабирование дробной длины для перекрестных данных и отсоединяет свойство, которое управляет содействующей длиной части (SectionInputFracLength
) таким образом, можно изменить его. Например, если фильтр является прямым КИХ-фильтром формы второго порядка, установкой SectionInputAutoScale
к false
отсоединяет SectionInputFracLength
свойство, которое задает дробную длину, применилось к данным между разделами.
Секция второго порядка фильтрует квантизаторы использования во входе к каждому разделу фильтра. Квантизаторы применяются к входным данным, вводящим каждый раздел фильтра. Обратите внимание на то, что квантизаторы для каждого раздела являются тем же самым. Чтобы установить дробную длину для интерпретации входных значений, используйте значение свойства в SectionInputFracLength
.
В сочетании с CoeffWordLength
, SectionInputFracLength
полностью определяет, как фильтр интерпретирует и использует значения состояния, сохраненные в свойстве States
. Как со всем словом и дробными свойствами длины, SectionInputFracLength
может быть любое целое число, включая целые числа, больше, чем CoeffWordLength
, и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете объект фильтра.
Фильтры SOS состоят из разделов, каждый фильтр второго порядка. Фильтрация ввода данных к фильтру включает передачу данных через каждый раздел фильтра. SectionInputWordLength
указывает, что размер слова применился к данным, когда это вводит один раздел фильтра от предыдущего раздела. Только реализации второго порядка прямой формы, которую я транспонировал и прямая форма II транспонированных фильтров, включают это свойство.
Следующая схема показывает фильтр SOS, состоявший из разделов (нижняя часть схемы) и возможная внутренняя структура каждого Раздела (главный фрагмент схемы), в этом случае — прямая форма, я транспонировал структуру фильтра разделов второго порядка. Обратите внимание на то, что выход каждого раздела питается через множитель. Если усиление множителя =1
, затем последний блок Cast Раздела проигнорирован, и форматом выхода является NumSumQ.
SectionInputWordLength
значения по умолчанию к 16 битам.
Фильтры секции второго порядка включают это свойство, которое определяет, кто фильтр обрабатывает данные в переходах от одного раздела до следующего в фильтре.
То, как фильтр представляет передачу данных от одного раздела до следующего, зависит от значения свойства SectionOutputAutoScale
. Представление использование фильтра между разделами фильтра зависит от ли значение SectionOutputAutoScale
true
или false
.
SectionOutputAutoScale
= true
означает, что фильтр выбирает дробную длину, чтобы обеспечить значение данных между разделами максимально близко к выходным значениям от предыдущего раздела. true
настройка по умолчанию.
SectionOutputAutoScale
= false
удаляет автоматическое масштабирование дробной длины для перекрестных данных и отсоединяет свойство, которое управляет содействующей длиной части (SectionOutputFracLength
) таким образом, можно изменить его. Например, если фильтр является прямым КИХ-фильтром формы второго порядка, установкой SectionOutputAutoScale
= false
отсоединяет SectionOutputFracLength
свойство, которое задает дробную длину, применилось к данным между разделами.
Секция второго порядка фильтрует квантизаторы использования при выходе от каждого раздела фильтра. Квантизаторы применяются к выходным данным, оставляя каждый раздел фильтра. Обратите внимание на то, что квантизаторы для каждого раздела являются тем же самым. Чтобы установить дробную длину для интерпретации выходных значений, используйте значение свойства в SectionOutputFracLength
.
В сочетании с CoeffWordLength
, SectionOutputFracLength
определяет, как фильтр интерпретирует и использует значения состояния, сохраненные в свойстве States
. Как со всеми дробными свойствами длины, SectionOutputFracLength
может быть любое целое число, включая целые числа, больше, чем CoeffWordLength
, и положительные или отрицательные целые числа. 15 битов являются значением по умолчанию, когда вы создаете объект фильтра.
Фильтры SOS состоят из разделов, каждый фильтр второго порядка. Фильтрация ввода данных к фильтру включает передачу данных через каждый раздел фильтра. SectionOutputWordLength
указывает, что размер слова применился к данным, когда это оставляет один раздел фильтра, чтобы перейти к следующему. Только прямая форма реализаций второго порядка, которую я транспонировал и прямая форма II транспонированных фильтров, включает это свойство.
Следующая схема показывает фильтр SOS, состоявший из разделов (нижняя часть схемы) и возможная внутренняя структура каждого Раздела (главный фрагмент схемы), в этом случае — прямая форма, я транспонировал структуру фильтра разделов второго порядка. Обратите внимание на то, что выход каждого раздела питается через множитель. Если усиление множителя =1
, затем последний блок Cast Раздела проигнорирован, и форматом выхода является NumSumQ.
SectionOutputWordLength
значения по умолчанию к 16 битам.
Несмотря на то, что все состояния использования фильтров, некоторые не позволяют вам выбирать, масштабирует ли фильтр автоматически значения состояния, чтобы предотвратить переполнения или плохие арифметические ошибки. Вы выбираете любую из следующих настроек:
StateAutoScale
= true
означает, что фильтр выбирает дробную длину, чтобы обеспечить значение состояний максимально близко к значениям с двойной точностью. Когда вы изменяетесь, размер слова применился к состояниям (где позволено структурой фильтра), объект фильтра изменяет дробную длину, чтобы попытаться вместить изменение. true
настройка по умолчанию.
StateAutoScale
= false
удаляет автоматическое масштабирование дробной длины для состояний и отсоединяет свойство, которое управляет содействующей длиной части, таким образом, можно изменить его. Например, в прямой форме я транспонировал КИХ-фильтр SOS, установку StateAutoScale
= false
отсоединяет NumStateFracLength
и DenStateFracLength
свойства, которые задают дробную длину, применились к состояниям.
Каждая из следующих структур фильтра обеспечивает StateAutoScale
свойство:
df1t
df1tsos
df2t
df2tsos
dffirt
Другие структуры фильтра не включают это свойство.
Отфильтруйте состояния, сохраненные в свойстве 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
задает размер слова, в битах, использование фильтра, чтобы представлять состояния. Фильтры, которые не обеспечивают прямое управление размером слова состояния, включают:
df1
dfasymfir
dffir
dfsymfir
Для этих структур фильтр выводит формат состояния из формата ввода, который вы выбираете для фильтра — за исключением df1
БИХ-фильтр. В этом случае формат состояния числителя прибывает из формата ввода, и формат состояния знаменателя прибывает из выходного формата. Все другие структуры фильтра обеспечивают управление формата состояния непосредственно.
КИХ-объекты фильтра прямой формы, и симметричные и антисимметричные, используют это свойство. Чтобы установить дробную длину для выхода от операций суммы, которые включают веса касания фильтра, используйте значение свойства в 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 битов являются значением по умолчанию, когда вы создаете объект фильтра.
Это свойство, доступное только после того, как, ваш фильтр находится в режиме фиксированной точки, задает, как фильтр выводит результаты операций суммирования, которые включают веса касания фильтра. Только симметричный (dfilt.dfsymfir
) и антисимметричный (dfilt.dfasymfir
) КИХ-фильтры используют это свойство.
Когда доступно, вы выбираете из одного из следующих значений:
FullPrecision
— означает, что фильтр автоматически выбирает размер слова и дробную длину, чтобы представлять результаты операции суммы, таким образом, они сохраняют всю точность, обеспеченную входными параметрами (слагаемые).
KeepMSB
— средние значения вы задаете размер слова для представления результатов суммирования суммы касания сохранить биты высшего порядка в данных. Фильтр устанавливает дробную длину отбрасывать LSBs от операции суммы. Это - значение свойства по умолчанию.
KeepLSB
— средние значения вы задаете размер слова для представления результатов суммирования суммы касания сохранить биты более низкоуровневые в данных. Фильтр устанавливает дробную длину отбрасывать MSBs от операции суммы. Сравните с KeepMSB
опция.
SpecifyPrecision
— средние значения вы задаете слово и дробные длины, чтобы примениться к выводу данных от операций суммы касания.
Задает размер слова использование фильтра, чтобы представлять выход от операций суммы касания. Значение по умолчанию составляет 17 битов. Только dfasymfir
и dfsymfir
фильтры включают это свойство.