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

 
 
 
Reply to this topicStart new topic
> Цифровой фильтр Бесселя 2-го порядка, пересчёт параметров "на лету"
Vitёk
сообщение Feb 3 2005, 08:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 17-01-05
Из: Ростов-на-Дону
Пользователь №: 2 018



Есть небольшая проблемка: требуется на лету считать параметры САБЖа: при прочих неизменных параметрах меняется нормированная частота (отношение частоты среза к частоте дискретизации). Раньше я пользовался букварём Титце и Шенка "Полупроводниковая схемотехника", а сейчас доступ к нему сильно ограничен (кто-то упёр). twak.gif
Кто что посоветует? Буду благодарен за формулы, фрагменты исходников, или ссылки на них. smile.gif


--------------------
/* Всё хорошо в меру. */
Go to the top of the page
 
+Quote Post
Vitёk
сообщение Feb 5 2005, 09:16
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 17-01-05
Из: Ростов-на-Дону
Пользователь №: 2 018



Таки решид проблему сам. Привожу фрагменты исходника на случай, если кому понадобится.
Код
//---------------------------------
// описание структур
typedef struct
{
 double a, b;
}ab_Val;

typedef struct
{
 double D[3], C[2];
}IIR2_par;
//---------------------------------
// определение параметров
int GetIir2Parameters(double Ff, ab_Val &abv,  double K, IIR2_par *p)
{
 if(Ff == 0) return 1;
 double L = 1.0 / tan(M_PI * Ff);
 double a = abv.a, b = abv.b;
 double det = 1.0 + a * L + b * L * L;
 if(det == 0) return 2;
 double *C = p->C, *D = p->D;

 D[0] = K / det;
 D[1] = 0;
 D[2] = 0;
 C[0] = (1.0 - a * L + b * L * L) / det;
 C[1] = -(2 * b * L * L) / det;
 return 0;
}
//---------------------------------
// параметры для разных типов фильтров
// взято из книги П.Хоровиц, У.Хилл "Полупроводниковая схемотехника"
 static ab_Val abv[]=
 {
   {1.2872, 0.4142},  // ФКЗ
   {1.3617, 0.6180},  // Бесселя
   {1.4142, 1.0000},  // Баттерворта
   {1.3614, 1.3827},  // Чебышева 0.5 дБ
   {1.3022, 1.5515},  // Чебышева 1 дБ
   {1.1813, 1.7775},  // Чебышева 2 дБ
   {1.0650, 1.9305}   // Чебышева 3 дБ
 };
//---------------------------------
// вызов функции расчёта параметров
if(GetIir2Parameters(F_3db / f_sample, abv[i], 2.0, &iir2p)) goto __exit;


Методику расчёта взял из обозначенной книги. Несмотря на то, что всё это работает, у меня возник вопрос:
на самом ли деле D[1] и D[2] должны быть равны 0? Если следовать примеру - то да, если выводить по формулам, то нет. sad.gif Я сделал, как в примере...

Редактирую, добавляю картинку со структурой этого фильтра.
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
/* Всё хорошо в меру. */
Go to the top of the page
 
+Quote Post

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

 


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


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