Целочисленное проектирование фильтров

Все что касается фильтрации
Delphist52
Сообщения: 2
Зарегистрирован: 13 окт 2015, 15:11

Re: Целочисленное проектирование фильтров

Сообщение Delphist52 »

Всем доброго дня!
Бахурин Сергей писал(а):да была ошибка в коэффициентах. Сейчас ачх совпадает. Однако надо сказать что групповое запаздывание вашего фильтра далеко от идеального. КИХ в этом плане выглядит более привлекательного ввиду линейной фазы. По суммарным ресурсам думаю что КИХ фильтру нет нормальной альтернативы при реализации в FPGA. БИХ фильтр в FPGA реализуется только при понижении частоты поскольку необходимо рассчитать рекурсивную ветвь за такт, что нереально при высокой частоте. В вашем случае частота дискретизации 75 МГц, а какая частота FPGA?
Тактовая частота ПЛИС зависит от вида применяемой ПЛИС. Например для Spartan-3AN фирмы Xilinx, она составляет ~50 МГц, а для ПЛИС семейства Cyclone IV уже ~75 МГц. Причем эти частоты получены без какой либо дополнительной настройки/оптимизации компоновщика и трассировщика. Стоит также отметить, что семейство ПЛИС Spartan-3AN фирмы Xilinx уже считается достаточно устаревшим, но для учебных целей его вполне хватает.
Бахурин Сергей писал(а):Этот фильтр имеет 120 коэффициентов, но это симметричный фильтр, значит всего 61 уникальный коэффициент против ваших 72. Фаза идеально линейная (вытекает из симметричности фильтр). Кроме того это ких а значит его реализуемость в FPGA гораздо проще чем вашего БИХ (не надо заботится о рекурсивной части фильтра). Кроме того динамический диапазон коэффициентов ниже чем ваш БИХ, т.е. разрядность умножителей ниже со всеми вытекающими последствиями.
Конечно рекурсивная часть заметно снижает производительность в ПЛИС, но тут надо сравнивать все факторы. Синтез цифрового фильтра методом-ЦНП может быть осуществлен и на меньшем динамическом диапазоне коэффициентов. Для ЦНП-метода это исходный параметр, а при классическом подходе это получаемый параметр. Например Ваш фильтр с 61 уникальным коэффициентом имеет разрядность - 10 (9 значимая часть + 1 на знак), а фильтр с 72 коэффициентами разрядность - 11. Методом ЦНП можно получить меньшую разрядность коэффициентов фильтра например 8. Конечно это получиться путем некоторого ухудшения характеристик фильтра, но в итоге с разрядностью входных данных 8 бит,при реализации(без оптимизаций) на ПЛИС семейства Cyclone IV фирмы Altera, где есть встроенные блоки умножителей 9 х 9, Ваш КИХ фильтр займет больше ресурсов, чем БИХ, поскольку на один его (КИХ фильтра) умножитель нужно будет использовать 2 встроенных блока ПЛИС, против одного для БИХ.
Я думаю это отдельная тема для обсуждения...

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Целочисленное проектирование фильтров

Сообщение Бахурин Сергей »

1) приведенные коэффициенты вашего бих фильтра имеют разрядность 12 бит + 1 знаковый. Я с ним сравнивал. Давайте сравним с таким-же фильтром 9-ти разрядным.

2) Разрядность FIR фильтра может быть любой при этом всегда гарантируется устойчивость и линейность фазы (ваш фильтр имеет нелинейную фазу).

3) DSP блоки в FPGA всегда имеют латенси. IIR фильтр требует расчета рекурсивной ветви за такт. Как это может быть реализовано если DSP блок имеет латенси 3 такта? Кроме того я не представляю как это может работать в случае высокой плотности упаковки FPGA. FIR фильтр не имеет рекурсивной части и может быть реализован как конвейер (его латенси будет большим, но он может работать на такой тактовой частоте, на какой позволит FPGA).
Думаю что вы смогли реализовать ваш IIR фильтр использовали всего 50 МГц частоту дискретизации на spartan-3an (Хотя сам кристал может быть использовать реально на частотах выше 150 МГц). FIR фильтр же разведется и на 150 МГц тоже. А ваш IIR?

Vlad27
Сообщения: 86
Зарегистрирован: 06 апр 2015, 10:09
Откуда: г, Нижний Новгород (rif27@bk.ru)

Re: Целочисленное проектирование фильтров

Сообщение Vlad27 »

Студенты реализовали-таки режекторный БИХ-фильтр 50 Гц на MCU
и сняли его АЧХ - красивая картинка (выходной сигнал прямо с ЦАП).
Fд = 2 кГц
Вложения
АЧХ режекторного фильтра
АЧХ режекторного фильтра
Pan_Gain_1zv_R12_PROBKA_50_DB.gif (11.71 КБ) 6500 просмотров
Последний раз редактировалось Vlad27 26 окт 2015, 13:34, всего редактировалось 1 раз.

Аватара пользователя
Santik
Сообщения: 609
Зарегистрирован: 28 дек 2010, 08:04
Откуда: Мирный (Якутия)
Контактная информация:

Re: Целочисленное проектирование фильтров

Сообщение Santik »

Ну это и мы так умеем... :D
http://we.easyelectronics.ru/Theory/cif ... ast-4.html

Vlad27
Сообщения: 86
Зарегистрирован: 06 апр 2015, 10:09
Откуда: г, Нижний Новгород (rif27@bk.ru)

Re: Целочисленное проектирование фильтров

Сообщение Vlad27 »

Santik писал(а): Ну это и мы так умеем... :D
http://we.easyelectronics.ru/Theory/cif ... ast-4.html
Это же голый расчёт. А здесь студент сам всё запрограммировал,
реализовал и измерил - вот это польза..

Аватара пользователя
Бахурин Сергей
Администратор
Сообщения: 1114
Зарегистрирован: 05 окт 2010, 19:55
Контактная информация:

Re: Целочисленное проектирование фильтров

Сообщение Бахурин Сергей »

Vlad27 писал(а): Это же голый расчёт. А здесь студент сам всё запрограммировал,
реализовал и измерил - вот это польза..
Вот тут совершенно согласен

INFERION
Сообщения: 34
Зарегистрирован: 20 окт 2015, 13:06
Откуда: Украина

Re: Целочисленное проектирование фильтров

Сообщение INFERION »

Vlad27 писал(а): Студенты реализовали-таки режекторный БИХ-фильтр 50 Гц на MCU
А в чём, собственно, сложность проектирования такого на вид примитива? Есть его ФЧХ или ГВЗ? Выглядит как обычный добротный последовательный колебательный контур.
Вот я по-быстрому слепил такой фильтр:
notch filter.GIF
notch filter.GIF (1.94 КБ) 6488 просмотров
double KL1=sampleRate/(6.283185307*1000); //K=FN/(pi*Fs) - Резонансная частота цепочки
double RL1=KL1/1000; //R=K/Q - Добротность цепочки

for(unsigned int D=data_offset;D<(data_size+data_offset);D+=4){
int L=((TMP[D+1]&0xFF)<<24)|((TMP[D+0]&0xFF)<<16);
int R=((TMP[D+3]&0xFF)<<24)|((TMP[D+2]&0xFF)<<16);

//filter
LL1+=(L-CL1-RL1*LL1)/KL1;
CL1+=LL1/KL1;

L=(L-LL1*RL1)>(int)0x7FFF0000?0x7FFF0000:(L-LL1*RL1)<(int)0x80000000?0x80000000:(L-LL1*RL1); //Выход фильтра
R=LL1>(int)0x7FFF0000?0x7FFF0000:LL1<(int)0x80000000?0x80000000:LL1; //Ток дросселя

TMP[D+0]=((L>>16)&0xFF);
TMP[D+1]=((L>>24)&0xFF);
TMP[D+2]=((R>>16)&0xFF);
TMP[D+3]=((R>>24)&0xFF);
}

Прогнал через него сгенерированный файл, в котором в течении 20-ти секунд частота с логарифмической зависимостью растёт от 500Гц до 2000кГц:
notch filter.png
Резонансная частота - 1000Гц. Добротность - 1000. Вверху левый канал - выход фильтра. Внизу ток контура.

Снял амплитуду спектроанализатором на файле с 1000.56Гц синусом:
Анализ.png
Этот фильтр не сложно заставить работать и с целочисленной системой, он с нею хорошо дружит. Просто возникнут заморочки с фиксируемой точкой.
Вот архив с программой и тестируемым файлом:
notch filter.rar
(4.67 МБ) 323 скачивания

Vlad27
Сообщения: 86
Зарегистрирован: 06 апр 2015, 10:09
Откуда: г, Нижний Новгород (rif27@bk.ru)

Re: Целочисленное проектирование фильтров

Сообщение Vlad27 »

INFERION писал(а): А в чём, собственно, сложность проектирования такого на вид примитива? Есть его ФЧХ или ГВЗ? Выглядит как обычный добротный последовательный колебательный контур.
Конечно, это цифровой аналог последовательного контура (режекторного фильтра
на 50 Гц). И ФЧХ его как у последовательного контура (приведена на стр 10).
Целочисленный вариант сразу реализуется на МК - очень хорошая учебная задача
для студентов с моей т.з. Надо же им с чего-то начинать, уметь шевелить нулями и полюсами в z-плоскости :)

INFERION
Сообщения: 34
Зарегистрирован: 20 окт 2015, 13:06
Откуда: Украина

Re: Целочисленное проектирование фильтров

Сообщение INFERION »

А я вот не умею шевелить (хоть и хочу научиться), и приходится выкручиваться. Задачи на этих же МК решать как-то нужно, вот и делаю колебательный контур, когда нужен, собственно, колебательный контур :)...
А какая сложность у этого решения студентов? Сколько там операций?

Vlad27
Сообщения: 86
Зарегистрирован: 06 апр 2015, 10:09
Откуда: г, Нижний Новгород (rif27@bk.ru)

Re: Целочисленное проектирование фильтров

Сообщение Vlad27 »

INFERION писал(а): А я вот не умею шевелить (хоть и хочу научиться), и приходится выкручиваться. Задачи на этих же МК решать как-то нужно, вот и делаю колебательный контур, когда нужен, собственно, колебательный контур :)...
А какая сложность у этого решения студентов?
А что тут не уметь :?: Для проектирования фильтра в z-плоскости надо просто
написать программу расчёта H(z) фильтра для заданной топологии (мы применяем
последовательную форму построения на звеньях первого или второго порядков) с
распечаткой координат нулей и полюсов этой передаточной функции. Координаты
нулей и полюсов определяются коэффициентами фильтра. Изменяя их вы получаете
различные АЧХ и ФЧХ фильтра и можно попытаться подстроить их под требуемые.
Очень рекомендую - почитайте классические книги по ЦОС (Сергиенко, Айфичера
и др. - могу выслать вам их в .djvu по эл.почте, если сделаете мне запрос), тогда
многое станет понятным. У ЦОС своя специфика и её надо потихоньку осваивать,
начиная с классики. А по расчёту отклика фильтра в реальном времени привожу
вам основной модуль его расчёта на С при реализации уже на TMS320F28335 без
подключения FPU, т.е в целых числах. По коду ассемблера можно и такты
подсчитать - пример приведён в одной из выложенных на первой странице
данной темы публикациях по проектированию ЦЦФ. Желаю успеха..
Вложения
TEMP.rar
(5.83 КБ) 331 скачивание

Ответить