|
|
  |
Реализация БПФ на ПЛИС, Тудности, встречаемые при реализации |
|
|
|
Mar 29 2009, 22:08
|
Местный
  
Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537

|
Прошу прощения, но вынужден взять таймаут до вторника. Пока постарайтесь разобраться по статье википедии. Вопросы по ней можете пока записать здесь... Во вторник продолжим. P.S. Если Вам так про дополнительный код читали, то преподу жирная 2 с минусом.
|
|
|
|
|
Mar 30 2009, 16:25
|
Местный
  
Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102

|
Я прочитал статью, ну да знак представляется самым старшим битом. Я просто не правильно выразился: Цитата Расширение знаком предполагает, знак представляют два разряда ... Знак то представляет по-прежнему один разряд - старший: Но расширение - это просто добавление справа чисел, тех же , что и знак, т.е.: (-5)10 это (1011)2 А если расширить до 8 бит: (-5)10 это (1111 1011)2 Но при перемножении чисел с разрядностями n и k все равно вначале получаем (n+k) битное число. Вопрос только сколько бит мы оставляем при округлении не так ли?
|
|
|
|
|
Mar 30 2009, 21:24
|
Местный
  
Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537

|
 Не могу понять, что именно меня сбило с толку, но я сам попался на "знаковом разряде"  Позор! Позор на мою голову! Конечно же в общем случае разрядность результата умножения n+k. Но тут все равно есть о чем поговорить, особенно в нашем конкретном случае - ведь первая версия умножителя все равно работала не правильно. Ну ничего, сейчас все расставим по местам. Я Вас просил Цитата Опишите, пожалуйста, математическим выражением то, что делают ваши умножители. Попробуйте подставить в эту формулу значение, которое Вы выбрали в качестве 1.0 (т.е. 2047) и проанализируйте, что же получается не совсем честно и какую интерпретацию это имеет с точки зрения БПФ? Сделайте это, пожалуйста, оно-то нам и поможет во всем разобраться.
|
|
|
|
|
Apr 1 2009, 21:20
|
Местный
  
Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537

|
Непонятно откуда взялось 4096 - последней версии умножителя это число не соответствует. Должно быть другое. Также непонятно откуда появилось + '1' - в коде умножителя этого нет. Замените 4096 на правильное, уберите + '1' и Цитата Попробуйте подставить в эту формулу значение, которое Вы выбрали в качестве 1.0 (т.е. 2047) и проанализируйте, что же получается не совсем честно и какую интерпретацию это имеет с точки зрения БПФ?
|
|
|
|
|
Apr 2 2009, 15:33
|
Местный
  
Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102

|
result_re <= (y_re_sig*w_re_sig + y_im_sig*w_im_sig)/2048; result_im <= (y_re_sig*w_im_sig - y_im_sig*w_re_sig)/2048;  Деление на 2048 - это сдвиг на 11 разрядов или что эквивалентно берем старшие 17 и отбрасываем 12 младших... result_re <= (y_re_sig*w_re_sig + y_im_sig*w_im_sig)/2048; result_im <= (y_re_sig*w_im_sig - y_im_sig*w_re_sig)/2048;  Деление на 2048 - это сдвиг на 11 разрядов или что эквивалентно берем старшие 17 и отбрасываем 12 младших...
|
|
|
|
|
Apr 2 2009, 17:26
|
Местный
  
Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537

|
А вот теперь непонятно, откуда Вы взяли 2048 в формуле для коэффициентов? Вы же сами решили, что диапазон -1.0 ... +1.0 мы представляем числами -2047 ... +2047!
Исправляйте.
С диапазонам данных у Вас тоже бардак! У Вас с АЦП идут знаковые 16-ти разрядные данные, которые мы расширяем знаком до 17-ти разрядных. Делаем мы это для того, чтобы иметь возможность хранить значение +32768, которое появится при вычислениях и которое в 16-ти разрядах знакового числа не помещается и требует для представления 17 разрядов. Если мы будем правильно выполнять все операции, то диапазон значений всегда будет от -32768 до +32768. Еще раз повторяю, для представления такого диапазона значений требуется 17, а не 16 разрядов. Я-то думал, что Вы в симуляции умножителя 60 000 просто так задали, а Вы, оказывается решили, что раз мы увеличили разрядность до 17 бит, так у нас и диапазон в 2 раза вырос.
Исправляйте.
|
|
|
|
|
Apr 3 2009, 04:00
|
Местный
  
Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102

|
Цитата Я-то думал, что Вы в симуляции умножителя 60 000 просто так задали Честно говоря я его просто так и задал=)) Просто раз уж в симуляции было 60000, так думаю и в формуле написать. Да, про 2048 я накосячил, только сейчас проснулся и понял, сразу за комп, тогда нам лучше делить (мне так кажется) на 2047: result_re <= (y_re_sig*w_re_sig + y_im_sig*w_im_sig)/2047; result_im <= (y_re_sig*w_im_sig - y_im_sig*w_re_sig)/2047; Но это число не очень хорошее (опять же как мне кажется), ибо не является степенью двойки... Не уж то опять придется расширять до 2048?
|
|
|
|
|
Apr 5 2009, 22:14
|
Местный
  
Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537

|
Тогда продолжим.
Во-первых, подправьте код умножителей под диапазон коэффициентов -1024 ... +1024, поскольку после умножения делить нам надо теперь на 1024.
Во-вторых, теперь, когда мы разобрались с умножением, нужен ли нам 0-ой умножитель в блоке умножителей?
В-третьих, в начале было решено, что вычисление бабочки и умножение на коэф. делаем за один такт. В таком случае, регистры на выходе бабочки нужно перенести на выход умножителей.
В-четвертых, все блоки нашего БПФ имеют на входе и выходе один и тот же набор сигналов (относящийся к данным БПФ) и эти сигналы представляют собой комплексные числа. Я предлагаю воспользоваться такой возможностью языка как record и задать тип complex_data и complex_coef для данных и коэффициентов. Еще задать тип complex_data_vector и complex_coef_vector с параметризованной размерностью, чтобы не "таскать" везде по четыре сигнала данных и по три сигнала с коэффициентами. Все это, для удобства, объявить в package - скажем fft_pkg. Все сказанное в это пункте никак не влияет на работоспособность, поэтому если не хотите, то можете этого не делать.
Жду от Вас поправленный код бабочки и умножителей.
Вы с ModelSim работали?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|