реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> расчет БИХ фильтров в fdatool
shf_05
сообщение Apr 22 2008, 10:44
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



написал прогу для реализации 32бит фильтра на ADSP2191
в fdatool спроектировал БИХ фильтр, отквантовал до 32бит,
необходимо получить все коэф матрицы SOS в формате 1,31 и привести коэффициент G к 1 для всех секций.
делаю как в справке по fdatool, но коэф не хочет приравниваться к 1.

помогите подогнать коэффициенты или подскажите, как рачсчитать в какой-л др проге
Go to the top of the page
 
+Quote Post
Tue
сообщение May 5 2008, 14:12
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Очень может быть, что коэффициент на выходе из секции Матлаб рассчитал равным единице, а разрядность этого коэффициента выставлена таким образом, что единицу представить не может. Посмотрите на выходной масштабирующий коэффициент секций.
Go to the top of the page
 
+Quote Post
shf_05
сообщение May 26 2008, 03:38
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Tue @ May 5 2008, 20:12) *
Очень может быть, что коэффициент на выходе из секции Матлаб рассчитал равным единице, а разрядность этого коэффициента выставлена таким образом, что единицу представить не может. Посмотрите на выходной масштабирующий коэффициент секций.

посмотрел- выходной коэф секций как раз не хочет быть равен одному, в примере как раз он тождественно равен 1. Я делаю все как в примере по fdatool, тока у меня версия 3,0 может быть дело в этом?
Go to the top of the page
 
+Quote Post
Tue
сообщение May 27 2008, 07:56
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Дело в разрядности выходного коэффициента секции. Обычно Матлаб выставляет для входного и выходного коэффициентов секции одну и ту же разрядность. Допустим выставил sfix16_En15 - означает число со знаком, 16 бит на всё число, 15 бит - на дробную часть, следовательно остается один бит на знак, а на целую часть не остается ничего. Отсюда и ошибка. Пусть N - полное число бит, FL - число бит справа после запятой (дробная часть) и если число со знаком, тогда диапзон чисел, которые вы можете представить такой:
-2^(N-FL-1) <= число <= +2^(N-FL)-1 - 2(-FL)
Следовательно, чтобы исправить эту ошибку отнимите от дробной части один бит и добавьте его к целой части, т.о. у вас получится разрядность sfix16_En14 - число со знаком, 16 бит на все число, 14 бит на дробную часть, один бит на знак и как раз один бит на целую часть, чтобы единица представлялась корректно. Такой трюк в общем случае конечно чуть снизит точность представления дробной части коэффициента, но поскольку он у вас равен "1" и никакой дробной части не содержит, то никакой потери в точности вы не получите. К сожалению в FDAtool поменять разрядность какого-либо конкретного коэффициента секции не представляется возможным, поэтому чтобы этого добиться - надо реализовать (RealizeMDL) его в Симулинк в виде основных элементов (Build model using basic elements) и уже в Симулинке вручную поменять разрядность нужного коэффициента. Можно даже вообще убрать коэффциент на выходе из секции, который точно равен "1", оставив лишь блок преобразования типа, конвертирующий в нужную разрядность выхода секции, т.о. вы избавитесь от лишнего умножителя.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Jun 2 2008, 13:55
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



попробовал ваш совет, получил, что часть коэффициентов больше 1, что и следовало ижидать.
я хотел получить коэффициенты a,b в формате 1,31 с коэф масштабирования, четко равному 1 (т .е его можно исключить). в примере по fdatool есть такое решение (там создается фильтр с коэф 1,16 и без масштабир оэф при этом АЧХ Q фильтра довольно четко совпадает с АЧХ неквант фильтра) , ноо когда я ставлю все настройки как там, результат не тот- коэф масштабир никак не хочет быть 1.
Go to the top of the page
 
+Quote Post
Tue
сообщение Jun 3 2008, 12:29
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Честно говоря, я совсем не в курсе с каким примером вы работаете. В том, что часть коэффициентов больше 1 нет ничего криминального, главное понимать что происходит. Вы хорошо подумали, перед тем как использовать именно БИХ-фильтр ? Посчитать коэффициенты фильтра - это еще полбеды, главное добиться его нормальной работы в системе. Если да, то давайте разберемся более подробно. Приведите данные для рассчета вашего фильтра, какие где разрядности выставляете.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Jun 4 2008, 08:22
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



насчет необходимости БИХ фильтра я уверен (ФЧХ не важна, необходим минимальный порядок фильтра). сейчас использую 16 разрядные БИХ фильтры, расчитанные с помощью qedesign v 1.0 (ужасно!!, но что дали старшие коллеги), я скачал v6.3.4, применил кряк, описанный на форуме http://www.telesys.ru/wwwboards/mcontrol/4...es/225467.shtml приводит ктому, что qued2000.exe не запускается.
понадобилось использовать 32 разрядную линию задержки (при 16 разр слишком малый динамич диапазон фильтра). Вобщем, решил рассчитать коэф в матлабе, расчитал необх фильтр примерно из 4-5 секций 2-го порядка, отквантовал до 32 бит, пусть коэф тоже будут точнее.
Для упрощения реализации и сниж вычислений на DSP секции второго порядка не должны содержать масштабирующих коэффициентов, линия задержки 32 битная. Полагаю такая реализация фильтра имеет право на существование.
для приведения вектора G (масштаб коэф на вых каждой секции) к 1, использую опцию Edit->Reodering->Highest SNR.
Для понимания происходящего прикрепляю файл
Прикрепленные файлы
Прикрепленный файл  __________Filter_Design_Toolbox.rar ( 536.74 килобайт ) Кол-во скачиваний: 112
 
Go to the top of the page
 
+Quote Post
Tue
сообщение Jun 7 2008, 07:32
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Да, попробовал сам - действительно один из коэффициентов не хочет приравниваться единице. То, что я писал выше про фиксированную точку - справедливо, когда коэффициент равен единице, а при переводе в фикс. точку уже не единица. Почему при масштабировании он изначально не равен единице - непонятно. Может баг, а может фича smile.gif По поводу 32 бит для представления коэффициентов вы не погорячились ? Конечно из-за рекурсивности БИХ требует меньше коэффциентов, задержек и прочего, но есть методы, позволяющие проектировать достаточно эффективные КИХ, которые гораздо проще и в анализе влияния фикс. точки, и в реализации. Поскольку вы собираетесь реализовывать свой фильтр на процессоре, то надо будет еще выбрать структуру фильтра таким образом, чтобы вычислительная эффективность не падала из-за сложных методов обращения к памяти данных/коэффициентов.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Jun 9 2008, 12:47
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Tue @ Jun 7 2008, 13:32) *
Да, попробовал сам - действительно один из коэффициентов не хочет приравниваться единице. То, что я писал выше про фиксированную точку - справедливо, когда коэффициент равен единице, а при переводе в фикс. точку уже не единица. Почему при масштабировании он изначально не равен единице - непонятно. Может баг, а может фича smile.gif По поводу 32 бит для представления коэффициентов вы не погорячились ? Конечно из-за рекурсивности БИХ требует меньше коэффциентов, задержек и прочего, но есть методы, позволяющие проектировать достаточно эффективные КИХ, которые гораздо проще и в анализе влияния фикс. точки, и в реализации. Поскольку вы собираетесь реализовывать свой фильтр на процессоре, то надо будет еще выбрать структуру фильтра таким образом, чтобы вычислительная эффективность не падала из-за сложных методов обращения к памяти данных/коэффициентов.


для меня важны не линии задержки и связанные с ними затраты памяти, а задержка в смысле групповой задержки (критична для моего приложения) фильтра- при БИХ фильтрации получаем тот же спад АЧХ при меньшем порядке фильтра => при меньшей задержке.
насчет эффективности программы- написана на асме требует конечно в 3 раза больше вычислит затрат, чем при одинарной точности, но приходится идти на это- надо динамич диапазон
фильтр состоит из секций второго порядка, программа готова, даже проверял ее работу- фильтрует как надо, одна проблема- расчет коэф.
Go to the top of the page
 
+Quote Post
Tue
сообщение Jun 16 2008, 06:16
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Чтож, похоже по поводу единичного полного коэффициента я вам помочь не могу. Попробуйте поиграться со структурами фильтра, там где можно обойтись без масштабирования (например прямая форма 1)
Go to the top of the page
 
+Quote Post
shf_05
сообщение Jun 17 2008, 13:01
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Tue @ Jun 16 2008, 12:16) *
Чтож, похоже по поводу единичного полного коэффициента я вам помочь не могу. Попробуйте поиграться со структурами фильтра, там где можно обойтись без масштабирования (например прямая форма 1)

реализовывать фильтр по схеме, отличной от каскадной из секций второго порядка на проце с фиксированой запятой я стараюсь избегать- как правило ничего хорошего не выходит- большие погрешности в квантовании коэф-в фильтра и как следствие неудовлетворительные хар-ки
я думаю попоробовать fdattol 4, которя есть в матлаб 2007, матлаб есть только жаль ключа нету к нему.
Go to the top of the page
 
+Quote Post
Tue
сообщение Jun 17 2008, 21:51
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



А каков порядок получается у вашего фильтра ? Обычно да, стараются реализовывать фильтр каскадно из секций 2-го порядка, но вы же радеете за динамический диапазон, а в таких случаях масштабирование нежелательно. Кстати прямая форма 1 обладает вообщем-то меньшим шумом округления, чем каскадные формы. Попробуйте сделать в прямой форме 1, проанализируйте в матлабе и подберите нужную разрядность для сумматора, чтобы не происходило переполнений (в демках по переводу фильтров в фикс. точку очень здорово все расписано). И все-таки 32 бит для квантования коэффициентов - это наверное через чур. Кол-во бит для представления коэфф-тов и элементов задержек вообщем случае не связаны.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Jun 18 2008, 05:31
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Tue @ Jun 18 2008, 03:51) *
Кол-во бит для представления коэфф-тов и элементов задержек вообщем случае не связаны.

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

насчет формы 1, то попробую конечно, хотя я пробовал изменить форму с каскадной на DFF1 прямо в fdatool, сразу исказилась АЧХ фильтра, так что я сразу ее отмел, может я поспешил с этим решением?
параметры примерно такие ФНЧ, Fs=8000Hz, полоса 500Гц, может 100Гц, или до 2000Гц (всякие разные), порядок от 5-го до 12-го.
Go to the top of the page
 
+Quote Post
Tue
сообщение Jun 18 2008, 07:49
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 166
Регистрация: 7-09-05
Из: Москва
Пользователь №: 8 340



Странный подход. Выберите структуру фильтра. Создайте фильтр в двойной точности. Отквантуйте коэффициенты фильтра минимальным количеством бит, необходимым для того, чтобы АЧХ совпадала с исходным (неквантованным фильтром). Убедитесь в устойчивости фильтра, при необходимости увеличьте разрядность коэффициентов. Задайте входную/выходную и прочие разрядности. Создайте входной вектор, прогоните через фильтр, посмотрите где происходят переполнения (очень хороший туториал по переводу БИХ-фильтров в фикс. точку показан в демке "Floating-Point to Fixed-Point Conversion of IIR Filters"). Если и дальше хотите нормально создавать/анализировать цифровые фильтры лучше сразу привыкайте пользоваться функциями Filter Design Toolbox.

По поводу:
Цитата(shf_05 @ Jun 18 2008, 09:31) *
я имел ввиду, если коэф 32 разрядные, то и накопитель имеетсмысл делать 32 ращзрядным.
ну это вовсе не заморочка.
не совсем понятно. Разрядность коэффициентов в конечном итоге определяет то, насколько АЧХ квантованного фильтра будет похожа на исходную и 32 бита - это явный перебор. Если у вас коэффициенты 32 разрядные, то это еще не значит что накопитель у вас будет 32 разрядным. При разрядности входного слова, скажем, 16 бит у вас только умножитель должен быть (32+16) бит, а накопитель еще больше (+4/6 бит). В вашем процессоре есть умножители и накопители такой разрядности ? Конечно это все справедливо, если вы хотите округлять/усекать разрядность только на выходе секции/фильтра, а не в процессе промежуточных вычислений для минимизации шума квантования

По поводу:
Цитата(shf_05 @ Jun 18 2008, 09:31) *
насчет формы 1, то попробую конечно, хотя я пробовал изменить форму с каскадной на DFF1 прямо в fdatool, сразу исказилась АЧХ фильтра, так что я сразу ее отмел, может я поспешил с этим решением?
Вы создайте одну спецификацию фильтра, а потом по этой спецификации создайте разные объекты фильтров с разными структурами. Анализ покажет какая подходит вам лучше.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Jun 19 2008, 13:28
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Tue @ Jun 18 2008, 13:49) *
По поводу:
Вы создайте одну спецификацию фильтра, а потом по этой спецификации создайте разные объекты фильтров с разными структурами. Анализ покажет какая подходит вам лучше.


1. спасибо я Вас понял,
2. не смог найти эту демку

3. странно, может я не так делаю, задаю необходимые хар-ки фильтра в fdatool, конвертирую в фильтр стр-ры DFF1, задаю квантование 32 бита, (формат 1.31 !!!) в итоге фильтр 9-го порядка нестабильный и АЧХ его искажается, конечно, если задать режим "best prec. fraqt. length", то этого может и не будет, но формат представления в проце 1,16 можно расширить до 1,31 (конечно там можно поупражняться с ПТ, но это не решение((( ).

Вы рекомендуете пользоваться преимущественно пакетом filter design, он дает больше возможностей, чем fdatool?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 19:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01506 секунд с 7
ELECTRONIX ©2004-2016