|
|
  |
Числа с фиксированной точкой. |
|
|
|
Feb 10 2015, 22:11
|

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

|
Hose Благодарю, что вы так все подробно расписали, но боюсь, что я и половины не понял )) Дело в том,что с ПЛИС я вообще никогда не работал и ничего под них не проектировал, да и ЦОС, собственно, только-только начал заниматься. Мне бы рекомендацию получить на какую-нибудь книжку или статью (можно и на английском),где рассказывается подробно и понятно про квантование в цифровых системах (это ведь так называется,я не напутал?).
Кстати,с Матлабом нет никаких проблем - у меня есть доступ к лицензионной версии Матлаба одной из последних версий с Signal Processing Toolbox на борту.
|
|
|
|
|
Feb 11 2015, 05:10
|
Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450

|
Когда я был преподавателем, основная масса студентов меня ненавидили, потомучто я, используя правило "знание некоторых принципов заменяет знание многих фактов", занудно вшурупивал в их мозги принципы мироздания. Но 99.9% желают иметь методические рекомендации, которые позволят решить поставленную задачу. //я слегка пьян, поэтому более занудлив чем обычно я не могу посоветовать литературу, поскольку я не согласен с авторами. Они пишут методички, подрузамевая что исполнитель безукоризненно понимает условия своей задачи. Методичка: Осмелюсь предположить, что у вас фир фильтр. В большинстве случаев вам достаточно 14 разрядов на коэффициенты. Берете отчеты импульсной или коэффициенты фильтра, ищете максимальный, делите на него все отчеты, в результате получаете массив цифирей с максимальной равной 1. Далее умножаете на (2^13 -1) (один разряд на знак и минус один, потомучто так надо). Затем каждый отчет округляете. Для фир фильтра оптимально использовать функцию округления round. Эти коэффициенты используете для построения фир фильтра на плис. Разрядность коэффициентов будет 14, при разрядности входных данных 16, внутренние регистры сумматоров дожны иметь разрядность 14 + 16 + log(количество коэффициентов, 2). Конечно такой фильтр будет иметь отличный от 1 коэффициент усиления. На выходе имеет смысл забрать разрядност (после нормировки) на log(заужение полосы,2)+1 больше чем было на входе.
|
|
|
|
|
Feb 11 2015, 21:23
|

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

|
Цитата(Hose @ Feb 11 2015, 08:10)  Берете отчеты импульсной или коэффициенты фильтра, ищете максимальный, делите на него все отчеты, в результате получаете массив цифирей с максимальной равной 1. Как я понимаю,это имеет смысл делать только если коэффициенты изначально не дробные числа,меньшие единицы? Цитата(Hose @ Feb 11 2015, 08:10)  Эти коэффициенты используете для построения фир фильтра на плис. Разрядность коэффициентов будет 14, при разрядности входных данных 16, внутренние регистры сумматоров дожны иметь разрядность 14 + 16 + log(количество коэффициентов, 2). Как получается такая формула? 2 - это основание логарифма? Цитата(Hose @ Feb 11 2015, 08:10)  На выходе имеет смысл забрать разрядност (после нормировки) на log(заужение полосы,2)+1 больше чем было на входе. А вот этот момент я совсем не понял. Что имеется в виду?
|
|
|
|
|
Feb 12 2015, 04:44
|
Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450

|
1) как это сделать? - я верно понял вопрос? Если вы не знаете как делать такие операции в матлабе, то это пустой разговор. 2) 16 + 14 это разрядность числа на выходе умножителя 16 рязрядного числа с 14 разрядным. + лог( количества сумм, 2) это прирост разрядности при суммировании. Двойка - основание логарифма. 3) на входе была разрядность 16, на выходе станет больше. Например фильтр второго порядка с кое 1,1. На входе 5,6,5,6,5,6,5,6, на выходе 5.5, 5.5, 5.5, .... Видно что разрядность увеличилась?
|
|
|
|
|
Feb 12 2015, 21:03
|

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

|
Цитата(Hose @ Feb 12 2015, 07:44)  1) как это сделать? - я верно понял вопрос? Если вы не знаете как делать такие операции в матлабе, то это пустой разговор. Нет. Я имел в виду следующее - при нормировке коэффициентов указанным Вами методом, получается вектор чисел, меньших или равных единице. Так вот,вопрос был такой: имеет ли смысл делать такую нормировку, если исходные коэффициенты и так числа,меньшие или равные единице? Я думаю,что в таком случае смысла это делать нет. Цитата(Hose @ Feb 12 2015, 07:44)  2) 16 + 14 это разрядность числа на выходе умножителя 16 рязрядного числа с 14 разрядным. + лог( количества сумм, 2) это прирост разрядности при суммировании. Двойка - основание логарифма. Но почему именно логарифм? Я не понимаю. Это некая условность, или есть какие-то условия,откуда он берется? Цитата(Hose @ Feb 12 2015, 07:44)  3) на входе была разрядность 16, на выходе станет больше. Например фильтр второго порядка с кое 1,1. На входе 5,6,5,6,5,6,5,6, на выходе 5.5, 5.5, 5.5, .... Видно что разрядность увеличилась? А нет возможности убрать усиление? Для этого вроде же достаточно поделить выходную последовательность на ту же двойку в степени,что и умножали коэффициенты,или я не прав?
|
|
|
|
|
Feb 13 2015, 03:40
|
Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450

|
Если максимальный кое равен 1, то вы поделите все кое на 1 и они останутся неизменными. Это универсальное решение.
Сложение 2-х чисел даст "прирост разрядности" 1 бит - это хорошо видно из примера. сложение 4х чисел даст "прирост разрядности" 2 бита: а + б + ц + д = (а + б) + (ц + д) в каждой скопке был "прирост разрядности" на 1 и при суммировании скобок прирост 1. И так дальше ... Присложеннии 16и чисел "прирост разрядности" 4 бита. Уже запахло логарифмом... Дальше не буду объяснять Строго говоря, термин прирост разрядности при суммировании применять нельзя, поэтому он в кавычках, это, скорее, ВОЗМОЖНОСТЬ прироста разрядности, которую нужно не упустить, а сам прирост возникает на фильтре и зависит от спектральной плотности сигнала и ачх фильтра. В примере с 5,6,5,6,5.... Выход первого фильтра 5.5, 5.5, .... Можно сколько угодно долго гонять через такой же фильтр, дальнейшего прироста разрядности не будет.
В примере с 5,6,5,6.... Усиление 1. До фильтра квантование по уровню было с шагом 1, на выходе стало 0.5.
Сообщение отредактировал Hose - Feb 13 2015, 04:14
|
|
|
|
|
Feb 23 2015, 01:42
|

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

|
Решил промоделировать в Матлабе - получилось что-то не очень.
Последовательность моих шагов: фильтр смоделировал в FdaTool, привел к арифметике с ФТ (соот.,настроил все разрядности). Сделал экспорт в Workspace. Импульсная характеристика - норм, пропустил квантованный синус - норм. Решил промоделировать,как это будет на ПЛИС. Ну то есть вектор коэффициентов умножить на двойку в соот. степени,и выходные отсчеты так же поделить на ту же двойку. Итак, я вытащил коэффициенты фильтра командой get. Умножил весь вектор на двойку,округлил командой round. Записал полученный вектор при помощи команды set. Натравил фильтр с исправленным вектором коэффициентов на все тот же синус,результат поделил на двойку. Понятно,что на выходе ожидается синус. Но его там нет,а есть какая-то кракозябра. В может быть вероятный косяк?
|
|
|
|
|
Feb 23 2015, 01:42
|

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

|
Решил промоделировать в Матлабе - получилось что-то не очень.
Последовательность моих шагов: фильтр смоделировал в FdaTool, привел к арифметике с ФТ (соот.,настроил все разрядности). Сделал экспорт в Workspace. Импульсная характеристика - норм, пропустил квантованный синус - норм. Решил промоделировать,как это будет на ПЛИС. Ну то есть вектор коэффициентов умножить на двойку в соот. степени,и выходные отсчеты так же поделить на ту же двойку. Итак, я вытащил коэффициенты фильтра командой get. Умножил весь вектор на двойку,округлил командой round. Записал полученный вектор при помощи команды set. Натравил фильтр с исправленным вектором коэффициентов на все тот же синус,результат поделил на двойку. Понятно,что на выходе ожидается синус. Но его там нет,а есть какая-то кракозябра. В может быть вероятный косяк?
|
|
|
|
|
Feb 24 2015, 00:53
|

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

|
Цитата(V_G @ Feb 23 2015, 05:46)  Начнимте с простого: ваша ПЛИС просто синус без фильтрации пропускает? Или с фильтрацией, но с минимальным порядком? Если да, то после этого можно усложнять фильтр Фильтрация есть. Более того - фильтрация лишь часть общей задачи,но для начала хотелось бы разобраться с этим. Разумеется,было бы разумно использовать минимум коэффициентов. Используя терминологию Матлаба, я использовал метод синтеза Equiripple (он же метод Паркса-Макклелланда или метод замен Ремеза). Цитата(Hose @ Feb 23 2015, 20:43)  Отладочная схема: Нужно к импульсной фильтра дописать нулей так чтобы получилось кратное двойке число и взять фурье. Результатом будет ачх фильтра.
Если в симулинке, то: Гегератор дельта-функции Фильтр Анализатор спектра Осцил
Начать стоит с высокой разрядности, например 16 и малого порядка фильтра, например 5, тогда ачх фильтра будет близка к расчетной и результаты будет не сложно привести тут. И постепенно уменьшать разрядность. Это к коэффициентам надо дописать нули? Мне надо дописать нуль к каждому коэффициенту? Просто вы говорите словами,которые вам-то понятны,а остальным (без вашего опыта) - вряд ли.
Сообщение отредактировал qwa - Feb 24 2015, 01:27
|
|
|
|
|
Feb 24 2015, 05:10
|
Частый гость
 
Группа: Участник
Сообщений: 82
Регистрация: 7-01-15
Пользователь №: 84 450

|
Например коэффициенты в 8 разрядах: -19, 0, 78, 127, 78, 0, -19 дописываем нулей: -19, 0, 78, 127, 78, 0, -19, 0, 0,0,0,0,0,0,0,0,0,0,0.......0; Должен получиться массив данных длинной, например 1024. Берем фурье .....
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|