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

 
 
> Реализация БИХ фильтра, что делать с С-Header из MATLAB ?
sysel
сообщение Apr 26 2010, 08:49
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Здравсвуйте!
Столкнулся со следующей проблемой:
Разрабатываю IIR (БИХ) фильтр в MATLAB (fdatool), получаю коэффиециенты фильтра (Direct-Form II, Second-Order Sections), (Order = 6, Sections = 3).
Делаю С-header с этими самыми коэффиециентами (Targets -> Generate C header).
Получаю некие массивы.

Как мне теперь реализовать этот фильтр на языке C ?

Следую принципу каскадной реализации и реализации Direct Form II - но фигня какая-то выходит.

Поделитесь, пожалуйста, рабочим кодом.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
baralgin
сообщение Apr 27 2010, 17:35
Сообщение #2


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

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Цитата(sysel @ Apr 27 2010, 12:21) *
Код
// Блок "Gain" между каскадами фильтра
X *= NUM[i][0] * (1/DEN[i][0]);

Этот участок кода вызывает подозрение. На fixed-point'е веротно не будет работать(как надо). Наверное лучше разделить: сначала умножение, потом деление.
Да и в целом код не выглядит ни оптимальным ни красивым. Сам начал разбираться этим вопросом в последнии дни. Ваши приведённые примеры значительно помогли(мне smile.gif ). Странно, но в дебрях матлабовского хэлпа ничего не находится по алгоритму вычисления. А в широком поле интернета только стандартная формула (типа y = w-1*y-1+w-2*y-2, wi = ... ), в которой коэффициентов много меньше чем в сабжевом хидере.
Go to the top of the page
 
+Quote Post
sysel
сообщение Apr 28 2010, 06:21
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Цитата(baralgin @ Apr 27 2010, 21:35) *
Этот участок кода вызывает подозрение. На fixed-point'е веротно не будет работать(как надо). Наверное лучше разделить: сначала умножение, потом деление.

Да, флагом махать я начал раньше времени насчет "fixed-point". В общем, приведённый выше фрагмент кода работает с fixed-point коеффицентами, если в объявлении матриц коэффиециентов изменить тип на "double".
С fixed-point всё не так просто, как мне казалось. FDATOOL выкидывает форматы представления с фиксированной запятой в комментарии, так что породить код, который бы с ходу хавал бы хедер не выйдет.
Цитата(baralgin @ Apr 27 2010, 21:35) *
Да и в целом код не выглядит ни оптимальным ни красивым.

Согласен. Но, думаю, более оптимальный и красивый код можно породить только если вычленить коэффиециенты из матриц NUM и DEN в какие-то другие структуры. И что самое главное, разделить на этапе написания кода блоки "gain" и фильтров.
Цитата(baralgin @ Apr 27 2010, 21:35) *
Сам начал разбираться этим вопросом в последнии дни. Ваши приведённые примеры значительно помогли(мне smile.gif ). Странно, но в дебрях матлабовского хэлпа ничего не находится по алгоритму вычисления. А в широком поле интернета только стандартная формула (типа y = w-1*y-1+w-2*y-2, wi = ... ), в которой коэффициентов много меньше чем в сабжевом хидере.

Была та же проблема. Формул куча, кода шиш. Породил какой-никакой код и выложил тут.
У приведённого выше кода есть большой плюс: он опирается на порождённый fdatool хедером с минимальными изменениями в нём.
Go to the top of the page
 
+Quote Post
bahurin
сообщение Apr 28 2010, 09:57
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 20-09-08
Пользователь №: 40 347



Цитата(sysel @ Apr 28 2010, 09:21) *
Была та же проблема. Формул куча, кода шиш. Породил какой-никакой код и выложил тут.
У приведённого выше кода есть большой плюс: он опирается на порождённый fdatool хедером с минимальными изменениями в нём.


вот есть такая pdf-ка еще как фильтры считать и куча матлабовского кода к ней. Кому инетересно можете поглядеть. Я по этой доке писал фильтры разные
Прикрепленный файл  ellip.zip ( 831.45 килобайт ) Кол-во скачиваний: 514
Go to the top of the page
 
+Quote Post



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

 


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


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