Перейти к содержанию
    

Реализация БПФ на ПЛИС

Что-то я Вас не понимаю...

 

А разве числовая ось не должна быть зеркальной относительно нуля?

 

Разумеется должна. Такая и есть. Так и нарисовано.

 

 

Если мы будем отрицательные числа с дробной частью равной 0.5 округлять до большего по абсолютной величине, то мы получем смещение.

 

Мы и не округляем отрицательные числа до большего по абсолютной величине - мы просто округляем к большему, когда дробная часть = 0.5 (независимо от знака числа).

 

Какое смещение Вы имеете ввиду?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то я Вас не понимаю...

:blush:

 

Разумеется должна. Такая и есть. Так и нарисовано.

? :rolleyes:

post-5108-1244114846_thumb.png

 

Мы и не округляем отрицательные числа до большего по абсолютной величине - мы просто округляем к большему, когда дробная часть = 0.5 (независимо от знака числа).

Какое смещение Вы имеете ввиду?

Например как на этой картинке

post-5108-1244114853_thumb.png

 

 

И уже совсем по детски конечно, но Matlab -7.5 округляет до -8

Вот я и пытаюсь разобраться. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятно, к чему Вы клоните :). Вы не очень удачно выбрали цитату для своего вопроса. Существуют разные методы округления. В той цитате, что Вы привели для своего вопроса

По этой же причине (неправильная разрядность), видимо, Вы для округления прибавляете 4, вместо 2 - это приведет к неправильным вычислениям.

 

Речь шла не о выборе метода округления, а о неправильной реализации выбранного. Должно было быть реализовано выражение X/4+0.5, что соответствует (Х + 2)/4, а было реализовано (Х + 4)/4, что соответствует Х/4 + 1, что не подпадает под округление никаким способом. Округление к простому большему числа с дробной частью 0.5 весьма просто в реализации, посравнению с приведенным вами, а дает не такие уж плохие результаты - ведь к какому числу округлить значение, находящееся строго по середине решить не так-то просто :). Вы вот говорите, что округлять отрицательные числа с дробной частью (д.ч.) 0.5 в большую чторону неверно по причине... и приводите пример. Но почему Вы считаете, что отрицательные числа округляются неверно? На точно таком же основании можно утверждать, что это положительные числа округляются неверно! Если отрицат. числа с д.ч. 0.5 округлять в большую чторону, а вот положительные в меньшую, то никакого смещения наблюдаться не будет, а отличие по модулю от истинного значения, между прочим, в обоих случаях одинаково.

 

Существуют методы, в которых округление чисел с д.ч. 0.5 происходит то в одну сторону, то в другую случайным образом, но равное количество раз в каждую сторону.

 

Можно придумать еще много способов округления, учитывающих особенности конкрентых систем и имеющие лучшее "качество" округления, чем наиболее распространенные методы. Так что этот вопрос можно обсуждать долго.

 

Так что как округлять надо решать в зависимости от имеющейся задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите пока временно не могу продолжать работу - слишком сильные напряги с дипломом. Вообще защищаюсь 26, но может раньше смогу приступить к работе. Еще раз приношу свои извинения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите пока временно не могу продолжать работу - слишком сильные напряги с дипломом. Вообще защищаюсь 26, но может раньше смогу приступить к работе. Еще раз приношу свои извинения.

 

Удачи при защите диплома! Какая у Вас тема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь за вопрос! Я честно говоря так и не понял какой формат используется для арифметических операций? - с "плавающей точкой", с "блочной плавающей запятой"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извиняюсь за вопрос! Я честно говоря так и не понял какой формат используется для арифметических операций? - с "плавающей точкой", с "блочной плавающей запятой"?

 

С фиксированной точкой. Данные 17-ти разрядные, коэффициенты 12-ти разрядные. Диапазону значений -1.0 ... +1.0 соответствует диапазон значений от -32768 до +32768 для данных и -2048 ... +2048 для коэффициентов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С фиксированной точкой. Данные 17-ти разрядные, коэффициенты 12-ти разрядные. Диапазону значений -1.0 ... +1.0 соответствует диапазон значений от -32768 до +32768 для данных и -2048 ... +2048 для коэффициентов.

 

А не маловато ли разрядов для коэффициентов? 2048 - отриц. + '0' + 2048 - положит. = 4097 > 12 бит.

Потом а какова будет размерность промежуточных результатов? Насколько я понял она может вырости на 4*sqrt(2) - т.е около 6 раз.

Ещё один момент который мне не совсем понятен.

После каждого этапа, мы маштабируем результат и используем округление (отсечение), чтобы втиснуться в разрядность. Но не исказит ли это результат преобразования Фурье (динамический диапазон) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А не маловато ли разрядов для коэффициентов?

 

Да, запамятовал :), -1024 ... +1024

 

Потом а какова будет размерность промежуточных результатов? Насколько я понял она может вырости на 4*sqrt(2) - т.е около 6 раз.

 

Ну, всетаки, не размерность, а разрядность. Она не меняется. :rolleyes: Все данные и коэффициенты находятся внутри единичной окружности на комплексной плоскости и в силу особенностей вычислений результат тоже остается внутри единичной окружности. Я кажется об этом уже писал.

 

После каждого этапа, мы маштабируем результат и используем округление (отсечение), чтобы втиснуться в разрядность. Но не исказит ли это результат преобразования Фурье (динамический диапазон) ?

 

Используется округление, а не отсечение. Мы масштабируем не для того, чтобы "втиснуться" в разрядность. В бабочке мы делим результаты на 4 (а на последнем этапе на 2) чтобы результат соответствовал формуле (1/N)*СУММА(...). У нас N = 2048. На первых 5-ти этапах мы каждый результат делим на 4, а на последнем делим на 2 - получаем ((1/4)^5) / 2 = 1/2048, ну а СУММА(...) вычисляется выражениями бабочки и умножителями.

 

Искажения безусловно будут, причем, строго говоря, будут при любой реализации. Но целью данной темы является объяснить и практически показать как вообще, в целом, реализовать БПФ в железе "с нуля" и полностью самостоятельно. После этого уже можно будет поэкспериментировать с тем что и как влияет на результат.

 

Кроме того, на практике, нужно всегда искать разумный баланс между сложностью реализации / объемом "железа" / точностью / быстродействием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В смысле вместо стандартного ДПФ

post-1865-1245250703.gif

используем как бы нормированное

post-1865-1245250714.gif

Тогда согласен, в том смысле что нам не столько важны абсолютные значения бинов сколько их отношения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите пока временно не могу продолжать работу - слишком сильные напряги с дипломом. Вообще защищаюсь 26, но может раньше смогу приступить к работе. Еще раз приношу свои извинения.

 

Как прошла защита?

 

Продолжим освоение БПФ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как прошла защита?

 

Продолжим освоение БПФ?

 

Спасибо, защита прошла на УРА, защитился на отлично, мне нужно немного времени, чтобы восстановить всю картину, а так я с удовольствием продолжу работу над БПФ!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что на 5 этапе банки вращать не следует, а запись и чтение будут одинаковыми, файл прилагаю. С Ошибками согласен позже исправлю.

Изменено пользователем ZED

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин удалилось сообщение, в общем для чтения и записи на последних этапах адресация видимо одна и та же, файл прикрепляю.

FFT_2048_2_07_09.rar

FFT_2048_2_07_09.rar

FFT_2048_2_07_09.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю, что на 5 этапе банки вращать не следует, а запись и чтение будут одинаковыми, файл прилагаю. С Ошибками согласен позже исправлю.

 

Без вращения банков Вы действительно сможете читать и писать на 6-м этапе, но Вы не сможете таким образом записать данные на 5-ом этапе. Посмотрите на Вашу схему - результаты вычисления первой бабочки должны будут попасть, соответственно, в банки 0,2,0,2, при этом банки 1 и 3 остаются незадействованы, а в банки 0 и 2 Вы должны будуте записать по 2 результата за раз, что невозможно осуществить.

 

Таким образом запись на 6-м этапе действительно может осуществляться без вращения банков, а вот запись на 5-ом этапе и, как следствие, чтение на 6-ом этапе нужно продумать.

 

P.S. Пришла пора 5-ый и 6-ой этап на схеме разъединить, чтобы можно было четко нарисовать для них номера банков и адреса памяти при чтении и записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...