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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
qwa
сообщение Feb 8 2015, 18:45
Сообщение #1


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

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Такой вопрос: пусть имеется некий фильтр, синтезированный в Матлабе. Коэффициенты этого фильтра - дробные числа, числа с плавающей запятой. Допустим,надо перенести этот фильтр на ПЛИС или что-нибудь еще. Короче,надо перевести коэффициенты фильтра в формат с фиксированной точкой. Но числа с фиксированной точкой - это целые числа, а коэффициенты фильтра в исходном виде дробные. Вопрос: как правильно выполнить перевод? Где можно про это прочитать?

Вообще,у меня есть подозрение,что для этого надо дробное число умножить на двойку в степени такой,сколько битов отводится на хранение коэффициентов фильтра.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 8 2015, 19:45
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Сначала хорошо бы проверить в Матлабе работу с целыми коэффициентами, а потом можно и использовать.
Go to the top of the page
 
+Quote Post
qwa
сообщение Feb 8 2015, 19:56
Сообщение #3


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

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Цитата(ViKo @ Feb 8 2015, 22:45) *
Сначала хорошо бы проверить в Матлабе работу с целыми коэффициентами, а потом можно и использовать.

То есть, алгоритм перевода я предложил правильный?

Ну и последний вопросик: пусть вектор b - вектор, в котором хранятся коэффициенты фильтра. Все элементы этого вектора умножаем на двойку в соот. степени. И как теперь объяснить Матлабу,чтобы он использовал новые коэффициенты? Понятно,что надо сперва переключить тип арифметики самого фильтра на fixed-point. А дальше как? Достаточно ли просто обозвать вектор новых коэффициентов так же,как и старый,то есть,просто b? Тогда в Workspace старый вектор будет заменен на новый - и этого будет достаточно?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 8 2015, 20:09
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Ну да, как-то так. Я сам не делал. Понятно, что выход нужно будет поделить на ту самую степень двойки (взять нужные разряды).
В ПЛИС и арифметика с числами с плавающей запятой имеется. Тоже не использовал.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Feb 8 2015, 20:37
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Теория по fixed-point. В MATLAB очень хорошая справка с множеством примеров. Можете поискать по запросу "fixed-point".
Некоторые примеры для фильтров в MATLAB: вот и вот.

Сообщение отредактировал Grizzzly - Feb 8 2015, 20:38
Go to the top of the page
 
+Quote Post
V_G
сообщение Feb 8 2015, 23:50
Сообщение #6


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(qwa @ Feb 9 2015, 04:45) *
Коэффициенты этого фильтра - дробные числа, числа с плавающей запятой.

Вот это - ключевая ошибка. Дробные числа и числа с плавающей точкой - совсем не одно и то же.
Для того, чтобы определиться, следует использовать целые числа, или числа с плавающей точкой, надо посмотреть диапазон изменения коэффициентов фильтра.
Грубо говоря, если все коэффициенты одного порядка, то можно использовать целочисленную арифметику, домножив все коэффициенты на какое-то постоянное число (не обязательно степень двойки) так, чтобы максимальный по модулю коэффициент по максимуму вписывался в целочисленную разрядную сетку.
Если отдельные коэффициенты различаются на 1-2 и более порядков, лучше использовать формат с плавающей точкой.
Матлаб позволяет оценить эффекты квантования (округления коэффициентов): посмотрите, что будет с характеристиками при учете округления коэффициентов до чисел разного формата и разной разрядности.
Go to the top of the page
 
+Quote Post
qwa
сообщение Feb 9 2015, 00:23
Сообщение #7


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

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Цитата(V_G @ Feb 9 2015, 02:50) *
Вот это - ключевая ошибка. Дробные числа и числа с плавающей точкой - совсем не одно и то же.

Я в курсе. Просто я просмотрел весь вектор коэффициентов,и они все меньше единицы или равны 1.

Сообщение отредактировал qwa - Feb 9 2015, 00:26
Go to the top of the page
 
+Quote Post
V_G
сообщение Feb 9 2015, 02:05
Сообщение #8


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



В целочисленных процессорах (ADSP2181 к примеру) есть формат чисел 1.15, представляющий числа с фиксированной точкой в диапазоне от -1 до +1. В нем и работает блок МАС (перемножитель-накопитель).
Go to the top of the page
 
+Quote Post
qwa
сообщение Feb 9 2015, 02:06
Сообщение #9


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

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Моя задача далее будет переносится на ПЛИС.
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 9 2015, 05:20
Сообщение #10


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(qwa @ Feb 9 2015, 10:06) *
Моя задача далее будет переносится на ПЛИС.

а какая разница ? 99.9 процентов выше 1.15 - 1.18 вряд ли прыгнете


--------------------
Go to the top of the page
 
+Quote Post
Hose
сообщение Feb 9 2015, 06:15
Сообщение #11


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

Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450



Синтез фильтра в матлабе и оптимизация под фпга - вещи несовместимые.
Если вы хотите получить действительно минимальный ресурс и максимальное быстродействие, то читайте дальше)
Тему правильно было бы назвать "разрядности внутри цифровых фильтров"
На примере fir:
1) вам необходимо получить импульсную характеристику фильтра. Как получить оптимальную импульсную под ваши задачи - отдельная тема, допустим что вы поверили матлабу (что, кстати, очень зря).
2) вам придется реализовать два фильтра (в математике это не сложно): с плавучкой и без.
Оптимизировать будете отдельно каждый. И в конце сделаете выбор.
... пеиемножение чисел в плавучке это перемножение мантисс и сложение экспонент, на первый взгляд кажется, что эта операция возможна в лучшей частотке, чем цлочисленное перемножение, но если вы используете эмбедед умножитель фпга, то возникают нюансы; опятьже блоки до и после фильтра могут не использовать плавучку и возникают накладные потери ресурса и задержки на переходы...
3) дискретизируете по уровню отсчеты импульсной (коэффициенты): это нелинейная операция и в ней не все так однозначно как кажется.
Определяете максимальный коэффициент, нормируете относительно него , умножаете на степень двойки. В математике смотрите результат, ужасаетесь, меняете "степень двойки" ( тоесть подбираете разрядность пока она не устроит вас ) (оно конечно же считается, но мы занимаемся тем что не описано в книжках и статьях разных умников) ... смотрите фчх, неравномерность ачх в полосе в масштабе 0.01дб, ачх в полосе подавления и в интересующих вас местах, также не плохо построить гвз, если оно не очевидно для вас по фчх или критично для вас.
Важно понимать, что разрядность фильтра и длинна импульсной связаны, увеличивать их нужно вместе.
4) оптимизируете коэффициенты. часто разрядности нехватает и получить нужно лучшее подавление или другие характеристики в установленной разрядности, например если это формирование сигнала для цап. Для этого в верхнюю формулу добавляете еще один коэффициент как множитель, пишете програмку перебора, устанавливаете критерии поиска этого коэффициента. Выигрыш от этой процедуры основан на том, что дискретизация по уровню - операция не линейная. Оценить выигрыш от этой процедуры оч сложно. Выигрыш ощутимый. Коэффициент в больших пределах гонять не надо, так чтобы коэффициенты шевелились в пределах разряда. Далее начинаете такимже образом шевелить коэффициенты по отдельности, но парами (симметрично относительно центрального коэффициента). Есть смысл оптимицировать только несколько крайних.
Можно также поиграться с длиной импульсной.
Далее, если вам не удалось получить требуемых характеристик, то можете начать двигать фазу дискретизации импульсной. На простом приаере: коэффициенты 2,5,10,5,2 могут быть преобразованны в 1,3,7,7,3,1 количество коэффициентов стало четным, но и макс коэффициент стал в 1.5 раза меньше. Иногда помогает.
Симметричность коэффициентов это свойство линейной фчх и оно прилично экономит ресурс при реализации, но опять же вы бог-создатель системы и вам виднее чем жертвовать ради хотелок заказчика, тоесть можете использовать плавный сдвиг фазы дискретизации.
Не забывайте про разрядности сумматоров внутри фильтра: после умножения разрядность увеличивается сами знаете как, всю ее тащить нет смысла, но и обрезать до выходной разрядности фильтра нельзя. Разрядность этих сумматоров также поле для оптимизации. Она завязана на распределение амплитуд коэффициентов фильтра. Стоит заметить, что разрядность коэффициентов это оптимизация умножителей, а внутренних регистров - сумматоров, очевидно, что от оптимизации сумматоров выиграш в разы меньше по ресурсам и частотке.

При использовании умножителей на логике можно пооптимизировать коэффициенты фильтра по критерию минимального ресурса: ставьте критерием минимальное количество 1 в коэффициенте - получите минимальный рисур в заданной разрядности с проигрышем в характеристихах фильтра меньшем, чем от уменьшения количества коэффициентов или разрядности.

Все

Или можно попросить больше денег у заказчика, поставить чипак пожирнее, забабахать разрядность с запасом и не заморачиваться на все эти процедуры, тратя целый час своей жизни...

Сообщение отредактировал Hose - Feb 9 2015, 06:20
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 9 2015, 07:10
Сообщение #12


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Hose @ Feb 9 2015, 13:15) *
Синтез фильтра в матлабе и оптимизация под фпга - вещи несовместимые.....

Или просто задействовать Fixed-Point Toolchain в FDAtool и получить результат сравнимый или чуть хуже по качеству, но раз в 10 быстрее....


--------------------
Go to the top of the page
 
+Quote Post
Hose
сообщение Feb 9 2015, 07:43
Сообщение #13


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

Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450



Не надо забывать, что и матлаб и тулы под него стоят денег.
Оцените сколько фильтров вы оптимизируете, сколько стоят тулзы или риск использования ворованного по.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Feb 9 2015, 07:50
Сообщение #14


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Это не ворованное, а трофейное... rolleyes.gif
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 9 2015, 08:12
Сообщение #15


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Hose @ Feb 9 2015, 15:43) *
Не надо забывать, что и матлаб и тулы под него стоят денег.
Оцените сколько фильтров вы оптимизируете, сколько стоят тулзы или риск использования ворованного по.

Да, но и вам тоже не стоит забывать что изначальный вопрос ТС и ваш ответ в пункте 1 уже подразумевают использование сего софта для решения задачи, после расчета фильтра в FDAtool 3-4 клика мышкой и готов результат.


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 3rd July 2025 - 01:51
Рейтинг@Mail.ru


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