Существует различие между фильтрами фиксированной точки и квантованными фильтрами — квантованные фильтры представляют надмножество, которое включает фильтры фиксированной точки.
Когда объекты dfilt
имеют свой набор свойств Arithmetic
к single
или fixed
, они квантуются фильтры. Однако после того, как вы устанавливаете свойство Arithmetic
на fixed
, получившийся фильтр и квантуется и фиксированная точка. Фильтры фиксированной точки выполняют арифметические операции, не позволяя двоичной точке переместиться в ответ на вычисление — отсюда имя фиксированная точка.
С набором свойств Arithmetic
к single
, означая фильтр использует арифметику с плавающей точкой с одинарной точностью, фильтр позволяет двоичной точке перемещаться во время математических операций, таких как суммы или продукты. Поэтому эти фильтры не могут быть рассмотрены фильтрами фиксированной точки. Но они квантуются фильтры.
Следующие разделы представляют свойства для фильтров фиксированной точки, которые включают все свойства для фильтров с плавающей точкой с одинарной точностью и с двойной точностью также.
Фильтры фиксированной точки зависят частично от объектов фиксированной точки из программного обеспечения Fixed-Point Designer™. Вы видите это, когда вы отображаете фильтр фиксированной точки в командной строке.
hd=dfilt.df2t hd = FilterStructure: 'Direct-Form II Transposed' Arithmetic: 'double' Numerator: 1 Denominator: 1 PersistentMemory: false States: [0x1 double] set(hd,'arithmetic','fixed') hd hd = FilterStructure: 'Direct-Form II Transposed' Arithmetic: 'fixed' Numerator: 1 Denominator: 1 PersistentMemory: false States: [1x1 embedded.fi] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 OutputWordLength: 16 OutputFracLength: 15 StateWordLength: 16 StateAutoScale: true ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap'
Посмотрите на свойство Штатов, показанное здесь
States: [1x1 embedded.fi]
embedded.fi
обозначения указывает, что состояния представляются объектами фиксированной точки, обычно называемыми объектами fi
. Если вы более тщательно изучаете в свойстве States
, вы видите, как свойства объекта fi
представляют значения для состояний фильтра.
hd.states ans = [] DataType: Fixed Scaling: BinaryPoint Signed: true WordLength: 16 FractionLength: 15 RoundMode: round OverflowMode: saturate ProductMode: FullPrecision MaxProductWordLength: 128 SumMode: FullPrecision MaxSumWordLength: 128 CastBeforeSum: true
Как входные параметры (данные, которые будут отфильтрованы), фильтры фиксированной точки принимают и регулярные значения с двойной точностью и объекты fi
. То, которое вы используете, зависит от ваших потребностей. То, как ваш фильтр отвечает на входные данные, определяется настройками свойств фильтра, обсудил в следующих нескольких разделах.
Дискретное время просачивается это использование тулбокса объекты, которые выполняют фильтрацию и настройку фильтра. Как объекты, они включают свойства и методы, которые предусматривают возможность фильтрации. В фильтрах дискретного времени или объектах dfilt
, многие свойства являются динамическими, означая, что они становятся доступными в зависимости от настроек других свойств в объекте dfilt
или фильтре.
Когда вы используете dfilt
.structure
функция, чтобы создать фильтр, MATLAB® отображает свойства фильтра в командном окне в ответ (если вы не заканчиваете команду точкой с запятой, которая подавляет выходное отображение). Обычно вы видите шесть или семь свойств, в пределах от свойства FilterStructure
к PersistentMemory
. Эти первые свойства всегда присутствуют в фильтре. Одним из самых важных свойств является Arithmetic
. Свойство Arithmetic
управляет всеми динамическими свойствами для фильтра.
Динамические свойства становятся доступными, когда вы изменяете другое свойство в фильтре. Например, когда вы изменяете значение свойства Arithmetic
на fixed
, отображение теперь показывает намного больше свойств для фильтра, все они считали динамическим. Вот пример, который использует прямую форму II фильтров. Сначала создайте фильтр по умолчанию:
hd=dfilt.df2 hd = FilterStructure: 'Direct-Form II' Arithmetic: 'double' Numerator: 1 Denominator: 1 PersistentMemory: false States: [0x1 double]
С фильтром hd
в рабочей области преобразуйте арифметику в фиксированную точку. Сделайте это путем установки свойства Arithmetic
на fixed
. Заметьте отображение. Вместо нескольких свойств фильтр теперь имеет намного больше, каждый связанный с конкретной частью фильтра и его операции. Каждое из теперь-свойств-видимости является динамическим.
hd.arithmetic='fixed' hd = FilterStructure: 'Direct-Form II' Arithmetic: 'fixed' Numerator: 1 Denominator: 1 PersistentMemory: false States: [1x1 embedded.fi] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 OutputWordLength: 16 OutputMode: 'AvoidOverflow' StateWordLength: 16 StateFracLength: 15 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap'
Даже этот список свойств еще не завершен. Изменение значения других свойств, таких как свойства ProductMode
или CoeffAutoScale
может показать еще больше свойств, которые управляют, как фильтр работает. Помните эту функцию об объектах dfilt
и динамических свойствах, когда вы рассматриваете остальную часть этого раздела о свойствах фильтров фиксированной точки.
Важное различие - вы, не может изменить значение свойства, если вы не видите свойство, перечисленное в отображении по умолчанию для фильтра. Ввод имени фильтра в посдказке MATLAB генерирует отображение свойства по умолчанию для именованного фильтра. Используя get
(filtername)
не генерирует отображение по умолчанию — это перечисляет все свойства фильтра, и те, которых можно изменить и те, которые еще не доступны.
Следующая таблица обобщает свойства, статичные и динамические, фиксированной точки фильтрует и предоставляет краткое описание каждого. Полные описания каждого свойства, в алфавитном порядке, следуют таблице.
PropertyName | Допустимые значения [значение по умолчанию] | Краткое описание |
---|---|---|
| Любое положительное или отрицательное целое число битов [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 |
| [Верный] или ложный | Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы предотвратить переполнение данными, вводящими раздел фильтра SOS. Установка этого свойства к |
| Любое положительное или отрицательное целое число битов [29] | Значения раздела работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения раздела между разделами фильтра путем установки дробной длины. Это применяется к данным, вводящим раздел. Сравните с Section |
| Любое положительное или отрицательное целое число битов [29] | Устанавливает размер слова, используемый, чтобы представлять данные, перемещающиеся в раздел фильтра SOS. |
| [Верный] или ложный | Задает, выбирает ли фильтр автоматически длину правильной дроби, чтобы предотвратить переполнение данными, оставляя раздел фильтра SOS. Установка этого свойства к |
| Любое положительное или отрицательное целое число битов [29] | Значения раздела работают с фильтрами SOS. Установка этого свойства управляет, как ваш фильтр интерпретирует значения раздела между разделами фильтра путем установки дробной длины. Это применяется к данным, оставляя раздел. Сравните с Section |
| Любое положительное или отрицательное целое число битов [32] | Устанавливает размер слова, используемый, чтобы представлять данные, перемещающиеся из одного раздела фильтра SOS. |
| Любое положительное или отрицательное целое число битов [15] | Позволяет вам установить дробную длину, примененную, чтобы интерпретировать состояния фильтра. |
| [1x1 встроил | Содержит состояния фильтра прежде, во время, и после работы фильтра. Состояния действуют как память фильтра между фильтрацией выполнений или сеансов. Заметьте, что состояния используют объекты |
| Любое положительное целое число битов [16] | Устанавливает размер слова, используемый, чтобы представлять состояния фильтра. |
| Любое положительное или отрицательное целое число битов [15] | Устанавливает дробную длину, используемую, чтобы представлять значения касания фильтра, кроме того, операции. Это доступно после того, как вы установите |
| FullPrecision, KeepLSB, [KeepMSB], SpecifyPrecision | Определяет, как аккумулятор, который выходные параметры сохранили, которые включают веса касания фильтра. Выберите из полной точности ( Симметричные и антисимметричные КИХ-фильтры включают это свойство. |
| Любое положительное число битов [17] | Устанавливает размер слова, используемый, чтобы представлять веса касания фильтра во время сложения. Симметричные и антисимметричные КИХ-фильтры включают это свойство. |
Когда вы создаете фильтр фиксированной точки, вы создаете объект фильтра (объект dfilt
). В этом руководстве фильтр условий, объект dfilt
и объект фильтра используются взаимозаменяемо. Чтобы отфильтровать данные, вы применяете объект фильтра к своему набору данных. Вывод операции является данными, отфильтрованными фильтром и значениями свойства фильтра.
Объекты фильтра имеют свойства, которым вы присваиваете значения свойств. Вы используете эти значения свойств, чтобы присвоить различные характеристики фильтрам, включая которые вы создаете,
Тип арифметики, чтобы использовать в фильтрации операций
Структура фильтра раньше реализовывала фильтр (не свойство, которое можно установить или изменить — вы выбираете его dfilt
.structure
функция, которую вы выбираете),
Местоположения квантизации и операций броска в фильтре
Форматы данных используются в квантовании, броске и фильтрации операций
Детали свойств, сопоставленных с фильтрами фиксированной точки, описаны в алфавитном порядке на следующих страницах.
За исключением фильтров пространства состояний, весь 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
.structure
методы, чтобы создать фильтр, значением свойства Arithmetic
является double
по умолчанию. Ваш фильтр идентичен тому же фильтру без свойства Arithmetic
, как вы создали бы, если бы вы использовали программное обеспечение Signal Processing Toolbox™.
Double
означает, что фильтр использует арифметику с плавающей точкой с двойной точностью во всех операциях при фильтрации:
Весь вход к фильтру должен удвоить тип данных. Любой другой тип данных возвращает ошибку.
Состояния и вывод, удваивается также.
Все внутренние вычисления сделаны в двойной математике.
Когда вы используете коэффициенты фильтра типа данных double
, ссылку и квантованный (фиксированная точка), коэффициенты фильтра идентичны. Фильтр хранит ссылочные коэффициенты как двойной тип данных.
единственный. Когда ваш фильтр должен использовать арифметику с плавающей точкой с одинарной точностью, установить свойство Arithmetic
на single
, таким образом, вся арифметика в обработке фильтра ограничивается типом данных с одинарной точностью.
Входные данные должны быть одним типом данных. Другие типы данных возвращают ошибки.
Состояния фильтра и фильтр выходное использование один тип данных.
Когда вы выбираете single
, можно обеспечить коэффициенты фильтра любым из двух способов:
Двойные коэффициенты типа данных. С набором Arithmetic
к single
фильтр бросает двойные коэффициенты типа данных к одному представлению типа данных.
Один тип данных. Они остаются неизменными фильтром.
В зависимости от того, задали ли вы один или двойные коэффициенты типа данных, ссылочные коэффициенты для фильтра хранятся в типе данных, который вы обеспечили. Если вы обеспечиваете коэффициенты в двойном типе данных, ссылочные коэффициенты являются двойными также. Обеспечение одного коэффициентов типа данных генерирует один коэффициенты ссылки типа данных. Обратите внимание на то, что арифметика, используемая ссылочным фильтром, является всегда двойной.
Когда вы используете reffilter
, чтобы создать ссылочный фильтр из ссылочных коэффициентов, получившийся фильтр использует версии с двойной точностью ссылочных коэффициентов фильтра.
Чтобы установить значение свойства Arithmetic
, создайте свой фильтр, затем используйте set
, чтобы изменить настройки Arithmetic
, как показано в этом примере с помощью прямого КИХ-фильтра формы.
b=fir1(7,0.45); hd=dfilt.dffir(b) hd = FilterStructure: 'Direct-Form FIR' Arithmetic: 'double' Numerator: [1x8 double] PersistentMemory: false States: [7x1 double] set(hd,'arithmetic','single') hd hd = FilterStructure: 'Direct-Form FIR' Arithmetic: 'single' Numerator: [1x8 double] PersistentMemory: false States: [7x1 single]
фиксированный. Преобразование вашего объекта dfilt
использовать зафиксированную арифметику приводит к структуре фильтра, которая использует свойства и значения свойств, чтобы соответствовать, как фильтр вел бы себя на оборудовании цифровой обработки сигналов.
Опция fixed
для свойства Arithmetic
доступна только, когда вы устанавливаете программное обеспечение Fixed-Point Designer, а также программное обеспечение DSP System Toolbox™.
После того, как вы устанавливаете Arithmetic
на fixed
, вы свободны изменить любое значение свойства от значения по умолчанию до значения, которое более тесно совпадает с вашими потребностями. Вы не можете, однако, смешать и вычисления с фиксированной точкой с плавающей точкой в своем фильтре, когда вы выбираете fixed
как значение свойства Arithmetic
. Выбор fixed
ограничивает вас использованием или фиксированная точка или плавающая точка в фильтре (тип данных должен быть однородным). Кроме того, все типы данных должны быть подписаны. fixed
не поддерживает типы данных без знака за исключением коэффициентов без знака, когда вы устанавливаете свойство Signed
на false
. Смешивание слова и дробных длин в фиксированном объекте приемлемо. Короче говоря, использование фиксированной арифметики принимает
фиксированный размер слова.
фиксированный размер и выделенный аккумулятор и регистры продукта.
способность сделать или насыщение или перенести арифметику.
то, что несколько округляющихся режимов доступны.
Создание этих предположений упрощает ваше задание создания фильтров фиксированной точки путем сокращения повторения в процессе конструкции фильтра, таких только как требование, чтобы вы ввели размер слова аккумулятора однажды, а не для каждого шага, который использует аккумулятор.
Значения свойств по умолчанию являются отправной точкой в адаптации вашего фильтра к общему оборудованию, такому как выбор 40-битного размера слова для аккумулятора или 16-битных слов для данных и коэффициентов.
В этом примере объекта dfilt
get
возвращает значения по умолчанию для структур dfilt.df1t
.
[b,a]=butter(6,0.45); hd=dfilt.df1(b,a) hd = FilterStructure: 'Direct-Form I' Arithmetic: 'double' Numerator: [1x7 double] Denominator: [1x7 double] PersistentMemory: false States: Numerator: [6x1 double] Denominator:[6x1 double] set(hd,'arithmetic','fixed') get(hd) PersistentMemory: false FilterStructure: 'Direct-Form I' States: [1x1 filtstates.dfiir] Numerator: [1x7 double] Denominator: [1x7 double] Arithmetic: 'fixed' CoeffWordLength: 16 CoeffAutoScale: 1 Signed: 1 RoundMode: 'convergent' OverflowMode: 'wrap' InputWordLength: 16 InputFracLength: 15 ProductMode: 'FullPrecision' OutputWordLength: 16 OutputFracLength: 15 NumFracLength: 16 DenFracLength: 14 ProductWordLength: 32 NumProdFracLength: 31 DenProdFracLength: 29 AccumWordLength: 40 NumAccumFracLength: 31 DenAccumFracLength: 29 CastBeforeSum: 1
Вот отображение по умолчанию для hd
.
hd hd = FilterStructure: 'Direct-Form I' Arithmetic: 'fixed' Numerator: [1x7 double] Denominator: [1x7 double] PersistentMemory: false States: Numerator: [6x1 fi] Denominator:[6x1 fi] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 OutputWordLength: 16 OutputFracLength: 15 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap'
Этот второй пример показывает значения свойств по умолчанию для объектов фильтра dfilt.latticemamax
, с помощью коэффициентов от фильтра fir1
.
b=fir1(7,0.45) hdlat=dfilt.latticemamax(b) hdlat = FilterStructure: [1x45 char] Arithmetic: 'double' Lattice: [1x8 double] PersistentMemory: false States: [8x1 double] hdlat.arithmetic='fixed' hdlat = FilterStructure: [1x45 char] Arithmetic: 'fixed' Lattice: [1x8 double] PersistentMemory: false States: [1x1 embedded.fi] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 OutputWordLength: 16 OutputMode: 'AvoidOverflow' StateWordLength: 16 StateFracLength: 15 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap'
В отличие от single
или опций double
для Arithmetic
, fixed
использует свойства задать слово и дробные длины для каждого фрагмента вашего фильтра. Путем изменения значения свойства любого из свойств вы управляете своей производительностью фильтра. Каждый размер слова и дробное свойство длины независимы — устанавливает тот, в котором вы нуждаетесь, и другие остаются неизменными, такие как установка входного размера слова с InputWordLength
, при оставлении дробной длины тем же самым.
d=fdesign.lowpass('n,fc',6,0.45) d = Response: 'Lowpass with cutoff' Specification: 'N,Fc' Description: {2x1 cell} NormalizedFrequency: true Fs: 'Normalized' FilterOrder: 6 Fcutoff: 0.4500 designmethods(d) Design Methods for class fdesign.lowpass: butter hd=butter(d) hd = FilterStructure: 'Direct-Form II, Second-Order Sections' Arithmetic: 'double' sosMatrix: [3x6 double] ScaleValues: [4x1 double] PersistentMemory: false States: [2x3 double] hd.arithmetic='fixed' hd = FilterStructure: 'Direct-Form II, Second-Order Sections' Arithmetic: 'fixed' sosMatrix: [3x6 double] ScaleValues: [4x1 double] PersistentMemory: false States: [1x1 embedded.fi] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 SectionInputWordLength: 16 SectionInputAutoScale: true SectionOutputWordLength: 16 Section OutputAutoScale: true OutputWordLength: 16 OutputMode: 'AvoidOverflow' StateWordLength: 16 StateFracLength: 15 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap' hd.inputWordLength=12 hd = FilterStructure: 'Direct-Form II, Second-Order Sections' Arithmetic: 'fixed' sosMatrix: [3x6 double] ScaleValues: [4x1 double] PersistentMemory: false States: [1x1 embedded.fi] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 12 InputFracLength: 15 SectionInputWordLength: 16 SectionInputAutoScale: true SectionOutputWordLength: 16 SectionOutputAutoScale: true OutputWordLength: 16 OutputMode: 'AvoidOverflow' StateWordLength: 16 StateFracLength: 15 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap'
Заметьте, что свойства для решетки фильтруют hdlat
и прямую форму II фильтров, hd
отличается, как приличествует их отличающимся структурам фильтра. Кроме того, некоторые свойства характерны для обоих объектов, таковы как RoundMode
и PersistentMemory
и ведут себя тот же путь в обоих объектах.
Примечания О Дробной Длине, Размере слова и Точности. Размер слова и дробная длина объединяются, чтобы сделать формат для номера фиксированной точки, где размер слова является количеством битов, используемых, чтобы представлять значение, и дробная длина задает, в битах, местоположении двоичной точки в представлении фиксированной точки. Там находится проблема — дробная длина, которую вы задаете в битах, может быть больше, чем размер слова или отрицательное число битов. Этот раздел объясняет, как та идея работает и как вы можете использовать его.
Дробная длина, заданная как количество дробных битов (биты справа от двоичной точки), верна только, когда дробная длина положительна и меньше чем или равна размеру слова. В обозначении формата MATLAB можно использовать [длину части размера слова]. Например, для формата [16 16], вторые 16 (дробная длина) являются количеством дробных битов или битов справа от двоичной точки. В этом примере все 16 битов справа от двоичной точки.
Также возможно иметь форматы фиксированной точки [16 18] или [16 - 45]. В этих случаях дробная длина больше не может быть количеством битов справа от двоичной точки, поскольку формат говорит, что размер слова равняется 16 — справа не может быть 18 дробных битов длины. Как отрицательное число битов для дробной длины, такой может там быть как [16 - 45]?
Лучший способ думать о формате фиксированной точки [длина части размера слова] и что это означает, состоит в том, что представление номера фиксированной точки является взвешенной суммой степеней двойки, управляемых дробной длиной или дополнительным представлением two номера фиксированной точки.
Рассмотрите формат [B L], где дробная длина L может быть положительной, отрицательной, 0, больше, чем B (размер слова) или меньше, чем B. (B и L всегда целые числа, и B всегда положителен.)
Учитывая бинарный вектор символов b (1) b (2) b (3)... b (B), чтобы определить two's-дополнительное значение вектора символов в формате, описанном [B L], используют значение отдельных битов в бинарном векторе символов в следующей формуле, где b (1) является первым битом (и старший значащий бит, MSB), b (2) является вторым, и на до b (B).
Десятичным числовым значением, которое представляют те биты, дают
value =-b(1)*2^(B-L-1)+b(2)*2^(B-L-2)+b(3)*2^(B-L-3)+...+ b(B)*2^(-L)
L, дробная длина, представляет отрицание веса последнего, или младшего значащего бита (LSB). L является также размером шага или точностью, обеспеченной данной дробной длиной.
Точность. Вот то, как точность работает.
Когда все биты бинарного вектора символов являются нулем за исключением LSB (который поэтому равен одному), значение, представленное битным вектором символов, дано 2 (-L). Если L отрицателен, например, L =-16, значение 216. Самый маленький шаг между числами, которые могут быть представлены в формате, где L =-16 дан 1 x 216 (самый правый термин в формуле выше), который является 65536. Обратите внимание, что точность не зависит от размера слова.
Смотрите на другой пример. Когда набор размера слова к 8 битам, десятичное значение 12 представлено в двоичном файле 00 001 100. То, что 12 десятичный эквивалент 00 001 100, говорит вам, что вы используете [8 0] представление формата данных — размер слова - 8 битов и дробная длина 0 битов, и размер шага или точность (самое маленькое различие между двумя смежными значениями в формате [8,0], 20=1.
Предположим, что вы планируете сохранить только верхние 5 битов и отбросить другие три. Получившаяся точность после удаления самых правых трех битов прибывает из веса самого низкого остающегося бита, пятого бита слева, который является 23=8, таким образом, формат был бы [5,-3].
Обратите внимание на то, что в этом формате размер шага равняется 8, я не могу представлять числа, которые являются между множителями 8.
В MATLAB, с установленным программным обеспечением Fixed-Point Designer:
x=8; q=quantizer([8,0]); % Word length = 8, fraction length = 0 xq=quantize(q,x); binxq=num2bin(q,xq); q1=quantizer([5 -3]); % Word length = 5, fraction length = -3 xq1 = quantize(q1,xq); binxq1=num2bin(q1,xq1); binxq binxq = 00001000 binxq1 binxq1 = 00001
Но заметьте, что в [5,-3] формат, 00001 является дополнительным представлением two для 8, не для 1; q = quantizer([8 0])
и q1 = quantizer([5 -3])
не являются тем же самым. Они покрывают о той же области значений — range(q)
> range(q1)
— но их шаг квантования отличается — eps(q)
= 8, и eps(q1)=1
.
Посмотрите на еще один пример. Когда вы создаете квантизатор q
q = quantizer([a,b])
первым элементом в [a,b]
является a
, размер слова, используемый для квантования. Второй элемент в выражении, b
, связан с шагом квантования — числовое различие между двумя самыми близкими значениями, которые может представлять квантизатор. Это также связано с весом, данным LSB. Обратите внимание на то, что 2^(-b)
= eps(q)
.
Теперь создайте два квантизатора, q1
и q2
. Позвольте q1
использовать формат [32,0] и позволить q2
использовать формат [16,-16].
q1 = quantizer([32,0]) q2 = quantizer([16,-16])
q1
квантизаторов и q2
покрывают ту же область значений, но q2
имеет меньше точности. Это покрывает область значений на шагах 216, в то время как q
покрывает область значений на шагах 1.
Эта потерянная точность происходит из-за (или может использоваться к модели), вывод 16 младших значащих битов.
Важный момент, чтобы понять - то, что в объектах dfilt
и фильтрации вы управляете, какие биты несут от суммы и операций продукта в фильтре к фильтру, выведенному путем установки формата для вывода от операции продукта или суммы.
Например, если вы используете [16 0] как выходной формат для 32-битного результата операции суммы, когда исходный формат [32 0], вы берете более низкие 16 битов из результата. Если вы используете [16 - 16], вы берете более высокие 16 битов исходных 32 битов. Вы могли даже взять 16 битов, где-нибудь промежуточных 32 бита путем выбора чего-то как [16 - 8], но вы, вероятно, не хотите делать это.
Масштабирование фильтра непосредственно вовлечено в формат и точность для фильтра. Когда вы знаете форматы ввода и вывода фильтра, а также внутренние форматы фильтра, можно масштабировать вводы или выводы, чтобы остаться в областях значений формата.
Заметьте, что переполнение или насыщение могут произойти во входе фильтра, фильтр вывел, или в самом фильтре, такой, как во время добавляют или умножают или накапливают операции. Неподходящее масштабирование в любой точке в фильтре может привести к числовым ошибкам, которые существенно изменяют производительность вашей реализации фильтра фиксированной точки.
Установка свойства CastBeforeSum
определяет, как фильтр обрабатывает входные значения, чтобы суммировать операции в фильтре. После того, как вы установите свой фильтр значение свойства 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.dfasymfir
и dfilt.dfsymfir
Вход раздела, множимое и значения состояния в объектах фильтра 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
.structure
метод, чтобы создать ваш фильтр. Обратитесь к информации о ссылке на функцию для dfilt
и set
для получения дополнительной информации об установке значений свойств для квантованных фильтров.
Фигуры в следующих подразделах этого раздела служат средствами помочь вам определить, как ввести ваши коэффициенты фильтра для каждой структуры фильтра. Каждый подраздел содержит пример для построения фильтра данной структуры.
Масштабные коэффициенты для ввода и вывода для фильтров не появляются в блок-схемах. Структуры фильтра по умолчанию не включают, ни принимают, масштабные коэффициенты. Для получения информации о масштабировании фильтра обратитесь к scale
в Системе справочной информации.
О Схемах Структуры Фильтра. В схемах, которые сопровождают следующие описания структуры фильтра, вы видите активные операторы, которые задают фильтр, такой как суммы и усиления и функции форматирования, которые управляют обработкой в фильтре. Заметьте также, что коэффициенты маркированы в фигуре. Это говорит вам порядок, в котором фильтр обрабатывает коэффициенты.
В то время как значение элементов блока является прямым, метки для форматов, которые являются частью фильтра, менее ясны. Каждая фигура включает текст в форму labelFormat
, который представляет существование функции форматирования в той точке в структуре. Format
обозначает форматирование объекта, и label
задает данные, на которые влияет объект форматирования.
Например, в фильтре dfilt.df2
, показанном выше, записи, InputFormat
и OutputFormat
являются примененными форматами, который является размером слова и дробной длиной к входным и выходным данным фильтра. Например, свойства фильтра как OutputWordLength
и InputWordLength
задают значения, которые управляют работой фильтра в точках ввода и вывода в структуре и представлены объектами форматирования InputFormat
и OutputFormat
, показанный в схемах структуры фильтра.
Прямая Форма я Структура Фильтра. Следующая фигура изображает прямую форму, я фильтрую структуру, которая непосредственно понимает передаточную функцию с числителем второго порядка и знаменателем. Коэффициентами числителя является пронумерованный b (i), i =1, 2, 3; коэффициентами знаменателя является пронумерованный a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В фигуре свойство Arithmetic
установлено в fixed
.
Пример — Определение Прямой Формы я Фильтр. Можно задать прямую форму второго порядка, я структурирую для квантованного фильтра hq
со следующим кодом.
b = [0.3 0.6 0.3]; a = [1 0 0.2]; hq = dfilt.df1(b,a);
Чтобы создать фильтр фиксированной точки, установите свойство Arithmetic
на fixed
как показано здесь.
set(hq,'arithmetic','fixed');
Прямая Форма я Структура Фильтра С Разделами Второго порядка. Следующая фигура изображает прямую форму, я фильтрую структуру, которая непосредственно понимает передаточную функцию с числителем второго порядка и знаменателем и разделами второго порядка. Коэффициентами числителя является пронумерованный b (i), i =1, 2, 3; коэффициентами знаменателя является пронумерованный a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В фигуре свойство Arithmetic
собирается в fixed
поместить фильтр в режим фиксированной точки.
Пример — Определение Прямой Формы я Фильтр с Разделами Второго порядка. Можно задать восьмой порядок прямая форма, я структурирую для квантованного фильтра hq
со следующим кодом.
b = [0.3 0.6 0.3]; a = [1 0 0.2]; hq = dfilt.df1sos(b,a);
Чтобы создать фильтр фиксированной точки, установите свойство Arithmetic
на fixed
, как показано здесь.
set(hq,'arithmetic','fixed');
Прямая Форма я Транспонированная Структура Фильтра. Следующая схема потока сигналов изображает прямую форму, я транспонировал структуру фильтра, которая непосредственно понимает передаточную функцию с числителем второго порядка и знаменателем. Коэффициентами числителя является b (i), i = 1, 2, 3; коэффициентами знаменателя является a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). С набором значения свойства Arithmetic
к fixed
данные показывают фильтр с обозначенными свойствами.
Пример — Определение Прямой Формы я Транспонированный Фильтр. Можно задать прямую форму второго порядка, я транспонировал структуру фильтра для квантованного фильтра hq
со следующим кодом.
b = [0.3 0.6 0.3]; a = [1 0 0.2]; hq = dfilt.df1t(b,a); set(hq,'arithmetic','fixed');
Прямая Форма II Структур Фильтра. Следующая диаграмма изображает прямую форму II структур фильтра, которые непосредственно понимают передаточную функцию с числителем второго порядка и знаменателем. В фигуре значением свойства Arithmetic
является fixed
. Коэффициенты числителя называют b (i); коэффициенты знаменателя называют a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) называют z (i).
Используйте метод dfilt.df2
, чтобы создать квантованный фильтр, свойством FilterStructure
которого является Direct-Form II
.
Пример — Определение Прямой Формы II Фильтров. Можно задать прямую форму второго порядка II структур фильтра для квантованного фильтра hq
со следующим кодом.
b = [0.3 0.6 0.3]; a = [1 0 0.2]; hq = dfilt.df2(b,a); hq.arithmetic = 'fixed'
Чтобы преобразовать вашу начальную букву с двойной точностью фильтруют hq
к фильтру квантованной или фиксированной точки, устанавливают свойство Arithmetic
на fixed
, как показано.
Прямая форма II структур фильтра с разделами второго порядка
Следующая фигура изображает прямую форму II структур фильтра с помощью разделов второго порядка, который непосредственно понимает передаточную функцию с числителем второго порядка и разделами знаменателя. В фигуре значением свойства Arithmetic
является fixed
. Коэффициенты числителя маркированы b (i); коэффициенты знаменателя маркированы a (i), i = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).
Используйте метод dfilt.df2sos
, чтобы создать квантованный фильтр, свойством FilterStructure
которого является Direct-Form II
.
Пример — Определение Прямой Формы II Фильтров с Разделами Второго порядка. Можно задать десятый порядок прямая форма II структур фильтра, которые используют разделы второго порядка для квантованного фильтра hq
со следующим кодом.
b = [0.3 0.6 0.3]; a = [1 0 0.2]; hq = dfilt.df2sos(b,a); hq.arithmetic = 'fixed'
Чтобы преобразовать ваш прототип с двойной точностью фильтруют hq
к фильтру фиксированной точки, устанавливают свойство Arithmetic
на fixed
, как показано.
Прямая Форма II Транспонированных Структур Фильтра. Следующая фигура изображает прямую форму II транспонированных структур фильтра, которые непосредственно понимают передаточные функции с числителем второго порядка и знаменателем. Коэффициенты числителя маркированы b (i), коэффициенты знаменателя маркированы a (i), i = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В первой фигуре значением свойства Arithmetic
является fixed
.
Используйте конструктора dfilt.df2t
, чтобы задать значение свойства FilterStructure
для фильтра с этой структурой, которую можно преобразовать в фильтрацию фиксированной точки.
Пример — Определение Прямой Формы II Транспонированных Фильтров. Определение или построение прямой формы второго порядка, II транспонированных фильтров для фиксированной точки фильтруют hq
, начинают со следующего кода задавать коэффициенты и создавать фильтр.
b = [0.3 0.6 0.3]; a = [1 0 0.2]; hd = dfilt.df2t(b,a);
Теперь создайте версию фильтрации фиксированной точки фильтра от hd
, который является плавающей точкой.
hq = set(hd,'arithmetic','fixed');
Прямая Форма Антисимметричная КИХ-Структура Фильтра (Любой Порядок). Следующая фигура изображает прямую форму антисимметричная КИХ-структура фильтра, которая непосредственно понимает антисимметричный КИХ-фильтр второго порядка. Коэффициенты фильтра маркированы b(i), и значения начального и конечного состояния в фильтрации маркированы z (i). Эта структура отражает набор свойств Arithmetic
к fixed
.
Используйте метод dfilt.dfasymfir
, чтобы создать фильтр, и затем установить свойство Arithmetic
на fixed
преобразовывать в фильтр фиксированной точки с этой структурой.
Пример — Определение Нечетного Порядка Прямая Форма Антисимметричный КИХ-Фильтр. Задайте пятый порядок прямая форма, антисимметричная КИХ-структура фильтра для фиксированной точки фильтрует hq
со следующим кодом.
b = [-0.008 0.06 -0.44 0.44 -0.06 0.008]; hq = dfilt.dfasymfir(b); set(hq,'arithmetic','fixed') hq hq = FilterStructure: 'Direct-Form Antisymmetric FIR' Arithmetic: 'fixed' Numerator: [-0.0080 0.0600 -0.4400 0.4400 -0.0600 0.0080] PersistentMemory: false States: [1x1 fi object] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 OutputWordLength: 16 OutputMode: 'AvoidOverflow' TapSumMode: 'KeepMSB' TapSumWordLength: 17 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap' InheritSettings: false
Пример — Определение Ровного Порядка Прямая Форма Антисимметричный КИХ-Фильтр. Можно задать четвертый порядок прямая форма, антисимметричная КИХ-структура фильтра для фиксированной точки фильтрует hq
со следующим кодом.
b = [-0.01 0.1 0.0 -0.1 0.01]; hq = dfilt.dfasymfir(b); hq.arithmetic='fixed' hq = FilterStructure: 'Direct-Form Antisymmetric FIR' Arithmetic: 'fixed' Numerator: [-0.0100 0.1000 0 -0.1000 0.0100] PersistentMemory: false States: [1x1 fi object] CoeffWordLength: 16 CoeffAutoScale: true Signed: true InputWordLength: 16 InputFracLength: 15 OutputWordLength: 16 OutputMode: 'AvoidOverflow' TapSumMode: 'KeepMSB' TapSumWordLength: 17 ProductMode: 'FullPrecision' AccumWordLength: 40 CastBeforeSum: true RoundMode: 'convergent' OverflowMode: 'wrap' InheritSettings: false
Прямая Структура Фильтра Конечного импульсного ответа (FIR) Формы. В следующей фигуре вы видите график потока сигналов для прямой структуры фильтра конечного импульсного ответа (FIR) формы, которая непосредственно понимает КИХ-фильтр второго порядка. Коэффициентами фильтра является b (i), i = 1, 2, 3, и состояниями (используемый для значений начального и конечного состояния в фильтрации) является z (i). Чтобы сгенерировать фигуру, установите свойство Arithmetic
на fixed
после того, как вы создаете свой прототип, просачиваются арифметика с двойной точностью.
Используйте метод dfilt.dffir
, чтобы сгенерировать фильтр, который использует эту структуру.
Пример — Определение Прямого КИХ-Фильтра Формы. Можно указать, что прямая КИХ-структура фильтра формы второго порядка для фиксированной точки фильтрует hq
со следующим кодом.
b = [0.05 0.9 0.05]; hd = dfilt.dffir(b); hq = set(hd,'arithmetic','fixed');
Прямой КИХ Формы Транспонированная Структура Фильтра. Это использование фигуры, которое коэффициенты фильтра маркировали b (i), i = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркировано z (i). Они изображают прямой конечный импульсный ответ (FIR) формы транспонированная структура фильтра, которая непосредственно понимает КИХ-фильтр второго порядка.
С набором свойств Arithmetic
к fixed
ваш фильтр совпадает с фигурой. Используя метод dfilt.dffirt
возвращает фильтр с двойной точностью, который вы преобразовываете в фильтр фиксированной точки.
Пример — Определение Прямого КИХ Формы Транспонированный Фильтр. Можно задать прямого КИХ формы второго порядка, транспонированная структура фильтра для фиксированной точки фильтрует hq
со следующим кодом.
b = [0.05 0.9 0.05]; hd=dfilt.dffirt(b); hq = copy(hd); hq.arithmetic = 'fixed';
Образуйте решетку Структуру Фильтра Allpass. Следующая фигура изображает решетку allpass структура фильтра. Изображенная структура непосредственно понимает, что третий порядок образовывает решетку фильтры allpass с помощью вычислений с фиксированной точкой. Коэффициенты отражения фильтра маркированы k1 (i), i = 1, 2, 3. Состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).
Чтобы создать квантованный фильтр, который использует решетку allpass структура, показанная в фигуре, используйте метод dfilt.latticeallpass
и установите свойство Arithmetic
на fixed
.
Пример — Определение Решетки Фильтр Allpass. Можно создать решетку третьего порядка allpass структура фильтра для квантованного фильтра hq
со следующим кодом.
k = [.66 .7 .44]; hd=dfilt.latticeallpass(k); set(hq,'arithmetic','fixed');
Образуйте решетку Структуру Фильтра Фазы Максимума Скользящего среднего значения. В следующей фигуре вы видите структуру фильтра фазы максимума скользящего среднего значения решетки. Эта схема потока сигналов непосредственно понимает, что третий порядок образовывает решетку фильтр скользящего среднего значения (MA) со следующей формой фазы в зависимости от начальной передаточной функции:
Когда вы запускаете с минимальной передаточной функции фазы, верхнее ответвление получившейся структуры решетки возвращает минимальный фильтр фазы. Более низкое ответвление возвращает максимальный фильтр фазы.
Когда ваша передаточная функция не будет ни минимальной фазой, ни максимальной фазой, структура фазы максимума скользящего среднего значения решетки не будет максимальной фазой.
Когда вы запускаете фильтр фазы имеющий, получившийся фильтр решетки является максимальной фазой также.
Коэффициенты отражения фильтра маркированы k (i), i = 1, 2, 3. Состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). В фигуре мы устанавливаем свойство Arithmetic
на fixed
показывать функции формата вычислений с фиксированной точкой, которые управляют такими опциями как размер слова и дробная длина.
Пример — Построение Фильтра Фазы Максимума Скользящего среднего значения Решетки. При построении структуры фильтра фазы максимума MA решетки четвертого порядка для квантованного фильтра hq
начинается со следующего кода.
k = [.66 .7 .44 .33]; hd=dfilt.latticemamax(k);
Образуйте решетку Авторегрессивный (AR) Структура Фильтра. Метод dfilt.latticear
непосредственно понимает решетку авторегрессивные фильтры в тулбоксе. Следующая фигура изображает решетку третьего порядка, авторегрессивную (AR) структура фильтра — со свойством Arithmetic
, равным fixed
. Коэффициенты отражения фильтра маркированы k (i), i = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).
Пример — Определение Фильтра AR Решетки. Можно задать структуру фильтра AR решетки третьего порядка для квантованного фильтра hq
со следующим кодом.
k = [.66 .7 .44]; hd=dfilt.latticear(k); hq.arithmetic = 'custom';
Образуйте решетку Структуру Фильтра Скользящего среднего значения (MA) для Минимальной Фазы. Следующие фигуры изображают структуры фильтра скользящего среднего значения (MA) решетки, которые непосредственно понимают фильтры MA решетки третьего порядка для минимальной фазы. Коэффициенты отражения фильтра маркированы k (i), (i). = 1, 2, 3, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). Установка свойства Arithmetic
фильтра к fixed
приводит к фильтру фиксированной точки, который совпадает с фигурой.
Эта схема потока сигналов непосредственно понимает, что третий порядок образовывает решетку фильтр скользящего среднего значения (MA) со следующей формой фазы в зависимости от начальной передаточной функции:
Когда вы запускаете с минимальной передаточной функции фазы, верхнее ответвление получившейся структуры решетки возвращает минимальный фильтр фазы. Более низкое ответвление возвращает минимальный фильтр фазы.
Когда ваша передаточная функция не будет ни минимальной фазой, ни максимальной фазой, структура фазы минимума скользящего среднего значения решетки не будет минимальной фазой.
Когда вы запускаете с минимального фильтра фазы, получившийся фильтр решетки является минимальной фазой также.
Коэффициенты отражения фильтра маркированы k ((i).), i = 1, 2, 3. Состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z ((i).). Эти данные показывают структуру фильтра, когда свойство Arithmetic
собирается в fixed
показать функции формата вычислений с фиксированной точкой, которые управляют такими опциями как размер слова и дробная длина.
Пример — Определение Минимального Фильтра MA Решетки Фазы. Можно задать структуру фильтра MA решетки третьего порядка для минимальных приложений фазы с помощью изменений следующего кода.
k = [.66 .7 .44]; hd=dfilt.latticemamin(k); set(hq,'arithmetic','fixed');
Образуйте решетку Авторегрессивное Скользящее среднее значение (ARMA) Структура Фильтра. Фигура ниже изображает решетку авторегрессивное скользящее среднее значение (ARMA) структура фильтра, которая непосредственно понимает, что четвертый порядок образовывает решетку фильтр ARMA. Коэффициенты отражения фильтра маркированы k (i), (i). = 1..., 4; лестничные коэффициенты маркированы v (i), (i). = 1, 2, 3; и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i).
Пример — Определение Решетки Фильтр ARMA. Следующий код указывает, что четвертый порядок образовывает решетку структуру фильтра ARMA для квантованного фильтра hq
, начинающий с hd
, версии с плавающей точкой фильтра.
k = [.66 .7 .44 .66]; v = [1 0 0]; hd=dfilt.latticearma(k,v); hq.arithmetic = 'fixed';
Прямая Форма Симметричная КИХ-Структура Фильтра (Любой Порядок). Показанный в следующей фигуре, вы видите поток сигналов, который изображает прямую форму симметричная КИХ-структура фильтра, которая непосредственно понимает пятый порядок прямая форма симметричный КИХ-фильтр. Коэффициенты фильтра маркированы b (i), i = 1..., n, и состояния (используемый для значений начального и конечного состояния в фильтрации) маркированы z (i). Показ структуры фильтра, используемой, когда вы выбираете fixed
для значения свойства Arithmetic
, первая фигура, детализирует свойства в объекте фильтра.
Пример — Определение Нечетного Порядка Прямая Форма Симметричный КИХ-Фильтр. При помощи следующего кода в MATLAB можно задать пятый порядок прямая форма, симметричный КИХ-фильтр для фиксированной точки фильтрует hq
:
b = [-0.008 0.06 0.44 0.44 0.06 -0.008]; hd=dfilt.dfsymfir(b); set(hq,'arithmetic','fixed');
Присвоение Коэффициентов Фильтра. Синтаксис, который вы используете, чтобы присвоить коэффициенты фильтра для вашего фильтра или фиксированной точки с плавающей точкой, зависит от структуры, которую вы выбираете для своего фильтра.
Преобразование Фильтров Между Представлениями. Отфильтруйте функции преобразования в этом тулбоксе и в Signal Processing Toolbox, программное обеспечение позволило вам преобразовать передаточные функции фильтра в другие формы фильтра, и от других форм фильтра до формы передаточной функции. Соответствующие функции преобразования включают следующие функции.
Функция преобразования | Описание |
---|---|
Преобразовывает от двойного фильтра 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
и положительные или отрицательные целые числа.
Когда вы создаете основанный на решетке БИХ-фильтр, ваши коэффициенты числителя (от вашего БИХ-прототипного фильтра или функции filter решетки dfilt
по умолчанию) хранятся в свойстве 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
), фильтр настраивает дробную длину, чтобы поддержать лучшую точность для нового размера слова.
Определение точности
позволяет вам установить дробную длину, используемую отфильтрованными данными. Когда вы выбираете этот выбор, можно установить выходную длину части с помощью свойства 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
.
Определение точности
средние значения вы задаете размер слова и дробную длину, чтобы примениться к выводу данных от операций продукта.
Когда вы переключаетесь на фильтрацию фиксированной точки от с плавающей точкой, вы, скорее всего, собираетесь выбросить некоторые биты данных после операций продукта в вашем фильтре, возможно, потому что у вас есть ограниченные ресурсы. Когда необходимо отбросить некоторые биты, вы можете принять решение отбросить младшие значащие биты (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
.
Определение точности
средние значения вы задаете слово и дробные длины, чтобы примениться к выводу данных от операций суммы касания.
Задает размер слова использование фильтра, чтобы представлять вывод от операций суммы касания. Значение по умолчанию составляет 17 битов. Только dfasymfir
и фильтры dfsymfir
включают это свойство.