|
Числа с фиксированной точкой. |
|
|
|
Feb 8 2015, 19:56
|

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

|
Цитата(ViKo @ Feb 8 2015, 22:45)  Сначала хорошо бы проверить в Матлабе работу с целыми коэффициентами, а потом можно и использовать. То есть, алгоритм перевода я предложил правильный? Ну и последний вопросик: пусть вектор b - вектор, в котором хранятся коэффициенты фильтра. Все элементы этого вектора умножаем на двойку в соот. степени. И как теперь объяснить Матлабу,чтобы он использовал новые коэффициенты? Понятно,что надо сперва переключить тип арифметики самого фильтра на fixed-point. А дальше как? Достаточно ли просто обозвать вектор новых коэффициентов так же,как и старый,то есть,просто b? Тогда в Workspace старый вектор будет заменен на новый - и этого будет достаточно?
|
|
|
|
|
Feb 8 2015, 20:37
|
Знающий
   
Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748

|
Теория по fixed-point. В MATLAB очень хорошая справка с множеством примеров. Можете поискать по запросу "fixed-point". Некоторые примеры для фильтров в MATLAB: вот и вот.
Сообщение отредактировал Grizzzly - Feb 8 2015, 20:38
|
|
|
|
|
Feb 8 2015, 23:50
|

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

|
Цитата(qwa @ Feb 9 2015, 04:45)  Коэффициенты этого фильтра - дробные числа, числа с плавающей запятой. Вот это - ключевая ошибка. Дробные числа и числа с плавающей точкой - совсем не одно и то же. Для того, чтобы определиться, следует использовать целые числа, или числа с плавающей точкой, надо посмотреть диапазон изменения коэффициентов фильтра. Грубо говоря, если все коэффициенты одного порядка, то можно использовать целочисленную арифметику, домножив все коэффициенты на какое-то постоянное число (не обязательно степень двойки) так, чтобы максимальный по модулю коэффициент по максимуму вписывался в целочисленную разрядную сетку. Если отдельные коэффициенты различаются на 1-2 и более порядков, лучше использовать формат с плавающей точкой. Матлаб позволяет оценить эффекты квантования (округления коэффициентов): посмотрите, что будет с характеристиками при учете округления коэффициентов до чисел разного формата и разной разрядности.
|
|
|
|
|
Feb 9 2015, 00:23
|

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

|
Цитата(V_G @ Feb 9 2015, 02:50)  Вот это - ключевая ошибка. Дробные числа и числа с плавающей точкой - совсем не одно и то же. Я в курсе. Просто я просмотрел весь вектор коэффициентов,и они все меньше единицы или равны 1.
Сообщение отредактировал qwa - Feb 9 2015, 00:26
|
|
|
|
|
Feb 9 2015, 06:15
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|