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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Библиотека (dll) расчета фильтров, Посоветуйте pls
ymv
сообщение Nov 21 2014, 09:11
Сообщение #1





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Господа, посоветуйте чайнику библиотеку расчета (синтеза) цифровых фильтров, совместимую с дельфями.
На входе задал параметры фильтра: тип, частота среза, порядок - на выходе коэффициенты.

Применение. Пишу прогу для писюка, работающую со звуковушкой. Частота дискретизации звуковушки может переустанавливаться - частота среза ранее посчитанного фильтра естестьвенно сдвинется, надо пересчитывать. Также будет реализация фильтров с параметрами, задавемыми пользователем - например, частота резонансного пика - тоже надо рассчитывать на лету.
Go to the top of the page
 
+Quote Post
stealth-coder
сообщение Nov 21 2014, 16:52
Сообщение #2


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

Группа: Участник
Сообщений: 112
Регистрация: 27-12-08
Пользователь №: 42 786



Intel Integrated Performance Primitives
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Nov 22 2014, 09:14
Сообщение #3





Guests






Чайники обычно занимаются чайниками.

http://www.basegroup.ru/download/freecompo.../filteringbase/
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 22 2014, 10:34
Сообщение #4


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Поищите по словам FIRDsgn, в исходниках на С - функция расчёта фильтров до десятка строк на каждый вид. И без .dll обойдётесь.
Не найдёте - в аттачменте возьмите.
Go to the top of the page
 
+Quote Post
ymv
сообщение Dec 6 2014, 15:14
Сообщение #5





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Цитата(Genadi Zawidowski @ Nov 22 2014, 15:34) *
Поищите по словам FIRDsgn, в исходниках на С - функция расчёта фильтров до десятка строк на каждый вид. И без .dll обойдётесь.
Не найдёте - в аттачменте возьмите.


Спасибо. Все понятно, код легко можно выдернуть и т.п.
Только там КИХ-фильтры, а нужны и КИХ, и БИХ. В первую очередь БИХ, забыл конкретизировать.
Попробую погуглить IIRDsgn. sm.gif

Цитата(TSerg @ Nov 22 2014, 14:14) *
Чайники обычно занимаются чайниками.

http://www.basegroup.ru/download/freecompo.../filteringbase/


Спасибо, не то.
В той компоненты реализованы:
1) Фильтр Калмана, в настоящий момент абсолютно мне не нужный.
2) Какой-то сложный универсальный ФНЧ, базирующийся на ПФ.

Мне же нужна процедура расчета классических КИХ и БИХ фильтров - такая, например, как в Matlab\FDATool, только реализованная в виде dll-ки без всяких гуёвых интерфейсов.


Цитата(stealth-coder @ Nov 21 2014, 21:52) *
Intel Integrated Performance Primitives


Тут, если я правильно понял краткое описание, есть лишь реализация самих алгоритмов _обработки_. Мне же нужна процедура расчета. Поправьте pls, если я понял неправильно, а то там наверное копать - не перекопать.

Сообщение отредактировал ymv - Dec 6 2014, 14:50
Go to the top of the page
 
+Quote Post
thermit
сообщение Dec 6 2014, 18:27
Сообщение #6


Знающий
****

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



http://electronix.ru/forum/index.php?s=&am...st&p=856478
Go to the top of the page
 
+Quote Post
ymv
сообщение Jan 25 2015, 10:52
Сообщение #7





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Цитата(thermit @ Dec 6 2014, 23:27) *

Спасибо. Руки дошли, качнул FDes.rar (f_design.cpp), прикрутил.
Только результаты не совпадают с моими контрольными данными. Может, есть дока или кто юзал эту библиотеку?
Go to the top of the page
 
+Quote Post
thermit
сообщение Jan 25 2015, 13:05
Сообщение #8


Знающий
****

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



Цитата(ymv @ Jan 25 2015, 14:52) *
Спасибо. Руки дошли, качнул FDes.rar (f_design.cpp), прикрутил.
Только результаты не совпадают с моими контрольными данными. Может, есть дока или кто юзал эту библиотеку?



Какие еще контрольные данные? Задается шаблон фильтра. По рассчитанным к-там строится ачх и смотрится факт ее вписывания/не вписывания в шаблон. На моей памяти, все было нормально с этой либой.
Go to the top of the page
 
+Quote Post
ymv
сообщение Jan 25 2015, 18:14
Сообщение #9





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Цитата(thermit @ Jan 25 2015, 18:05) *
Какие еще контрольные данные? Задается шаблон фильтра. По рассчитанным к-там строится ачх и смотрится факт ее вписывания/не вписывания в шаблон. На моей памяти, все было нормально с этой либой.


Ну я вообще сравнивал по коэффициентам. Очень уж сильный разнобой. В случае с FDesign вообще получил коэффициенты больше единицы, для БИХ-фильтра разве возможно? Наверное, не так её юзаю.

Контрольный пример.

В WinFilter задаю ФНЧ с БИХ, порядок 2, Баттерворт, частота дискретизации 44100, частота среза 9кГц.
Получаю коэффициенты:
float ACoef[NCoef+1] = {
0.21320719693741449000,
0.42641439387482899000,
0.21320719693741449000
};

float BCoef[NCoef+1] = {
1.00000000000000000000,
-0.33915118494314400000,
0.19197997269398712000
};
Строю АЧХ. Соответствует.

Теперь по FDesign:

В переменной типа Filt_Params задаю:
apass1:=-1;
apass2:=-1;
astop1:=-80; //В децибелах? Иначе ругается.
astop2:=-80;
wpass1:=9000; //В герцах или круговая частота?
wpass2:=9000;
wstop1:=9100;
wstop2:=9100;
fsamp:=44100;
gain:=0;
acoefs:=@aCoeff;
bcoefs:=@bCoeff;
order:=2;
select:=#0;
approx:=#0;
implem:=#0;

Это задавалось из дельфей, но переменные передаются правильно, цеплялся дебаггером.
Вызываю функцию Calc_Butter_Coefs (оно?).
Получаю ACoeffs: (0, 0, 1.96522672836027), BCoeffs: (1, 1.98253712618972, 1.96522672836027)

Может, глянешь, есть под рукой примеры применения этой чудо-либы?
Go to the top of the page
 
+Quote Post
thermit
сообщение Jan 25 2015, 19:15
Сообщение #10


Знающий
****

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



Цитата(ymv @ Jan 25 2015, 22:14) *
Ну я вообще сравнивал по коэффициентам. Очень уж сильный разнобой. В случае с FDesign вообще получил коэффициенты больше единицы, для БИХ-фильтра разве возможно? Наверное, не так её юзаю.

Контрольный пример.

В WinFilter задаю ФНЧ с БИХ, порядок 2, Баттерворт, частота дискретизации 44100, частота среза 9кГц.
Получаю коэффициенты:
float ACoef[NCoef+1] = {
0.21320719693741449000,
0.42641439387482899000,
0.21320719693741449000
};

float BCoef[NCoef+1] = {
1.00000000000000000000,
-0.33915118494314400000,
0.19197997269398712000
};
Строю АЧХ. Соответствует.

Теперь по FDesign:

В переменной типа Filt_Params задаю:
apass1:=-1;
apass2:=-1;
astop1:=-80; //В децибелах? Иначе ругается.
astop2:=-80;
wpass1:=9000; //В герцах или круговая частота?
wpass2:=9000;
wstop1:=9100;
wstop2:=9100;
fsamp:=44100;
gain:=0;
acoefs:=@aCoeff;
bcoefs:=@bCoeff;
order:=2;
select:=#0;
approx:=#0;
implem:=#0;

Это задавалось из дельфей, но переменные передаются правильно, цеплялся дебаггером.
Вызываю функцию Calc_Butter_Coefs (оно?).
Получаю ACoeffs: (0, 0, 1.96522672836027), BCoeffs: (1, 1.98253712618972, 1.96522672836027)

Может, глянешь, есть под рукой примеры применения этой чудо-либы?



Если фильтр полосовой, надо
select = 'P' - bandPass
implem = 'I' - IIR
approx='B' - Butterworth
order = 2 - 0 - сам оценит порядок под селективные требования
fsamp=44100
apass1=-1 - в дБ
astop1 = -80
astop2 = -80
wpass1 = - круговая
wpass2 = - круговая
wstop1 = - круговая
wstop2 = - круговая
Calc_Filter_Coefs (оно).
Go to the top of the page
 
+Quote Post
ymv
сообщение Feb 2 2015, 10:11
Сообщение #11





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Цитата(thermit @ Jan 26 2015, 00:15) *
Если фильтр полосовой, надо


Нужен ФНЧ.
Пробовал:
apass1:=-3; //дБ
apass2:=-3;
astop1:=-5; //дБ. Нужен фильтр с низким спадом, приблизительный аналог аналогового ФНЧ 2 порядка
astop2:=-5;
wpass1:=9000*2*3.14; //9кГц
wpass2:=9000*2*3.14;
wstop1:=10000*2*3.14;
wstop2:=10000*2*3.14;
fsamp:=44100;
gain:=0;
acoefs:=nil;
bcoefs:=nil;
order:=0;
select:='L';
approx:='B';
implem:='I';
end;
RetVal:=Calc_Filter_Coefs(@Params);

Короче, выдал коэффициенты:
Порядок=3
acoeffs 1 1 0 1
bcoeffs 1 -0.145210396025875 0 1

Такой фильтр выдаёт у меня клиппинг.

Чтобы не наслаивать проблемы стыковки с дельфями, залезал дебаггером в сишную dll-ку.
Ниже трассировка:

Calc_DigIIR_Coefs
Calc_Filter_Order
order=3

Calc_Normal_Coefs
Calc_Butter_Coefs
acoeffs 0 0 1.00079180388367 0
bcoeffs 0 1 1.00079180388367 1

Unnormalize_Coefs
Unnorm_LP_Coefs
acoeffs 0 0 65832.8315322196 0
bcoeffs 0 1 65832.8315322196 1

Bilinear_Transform
acoeffs 1 1 0 1
bcoeffs 1 -0.145210396025875 0 1

UnWarp_Freqs
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 8 2015, 22:15
Сообщение #12


Знающий
****

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



либа выдает коэффициенты биквадратных звеньев. иначе говоря, для 3-го порядка будет 2 по 3 к-та a и 2 по 3 к-та b. здесь a - к-ты числителей, b - к-ты знаменателей. ну и результат надо умножить на gain или умножить к-ты числителей на корень из gain.
Go to the top of the page
 
+Quote Post
ymv
сообщение Feb 10 2015, 07:09
Сообщение #13





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Цитата(thermit @ Feb 9 2015, 03:15) *
либа выдает коэффициенты биквадратных звеньев. иначе говоря, для 3-го порядка будет 2 по 3 к-та a и 2 по 3 к-та b. здесь a - к-ты числителей, b - к-ты знаменателей. ну и результат надо умножить на gain или умножить к-ты числителей на корень из gain.


Спасибо.
Похоже, проще самому эту кухню освоить и прописать. sm.gif Чем и займусь.
Еще вопрос-офтопик. Не порекомендует ли кто прогу построения АЧХ/ФЧХ цифровых фильтров? Чтоб сунул ей коэффициенты, и вперед. С удобнымм масштабированием и т.п. WinFilter, Matlab/FDATool видел.
Go to the top of the page
 
+Quote Post
thermit
сообщение Feb 10 2015, 08:50
Сообщение #14


Знающий
****

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



я не в курсе. всю жизнь пользуюсь матлабской функцией freqz.
Go to the top of the page
 
+Quote Post
ymv
сообщение Feb 16 2015, 16:42
Сообщение #15





Группа: Участник
Сообщений: 12
Регистрация: 10-02-14
Пользователь №: 80 434



Цитата(thermit @ Feb 9 2015, 03:15) *
либа выдает коэффициенты биквадратных звеньев. иначе говоря, для 3-го порядка будет 2 по 3 к-та a и 2 по 3 к-та b. здесь a - к-ты числителей, b - к-ты знаменателей. ну и результат надо умножить на gain или умножить к-ты числителей на корень из gain.

Возвращаясь к либе. Не совсем понял эту фразу.
Не пояснишь ли тупому, можно ли из этих коэффициентов биквадратных звеньев перейти к обычным коэффициентам, что выдаёт например Matlab/FDATool, WinFilter.
Перемножить эти коэффициенты на gain? У меня, кстати, gain получился в этом примере 0.103367640320208, не обратил сразу внимания.
Перемножил, получилось что-то похожее, но не совсем то.
Go to the top of the page
 
+Quote Post

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

 


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


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