Jump to content

    
Sign in to follow this  
ZED

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

Recommended Posts

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

 

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

 

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

 

 

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

 

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

 

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

Share this post


Link to post
Share on other sites
Что-то я Вас не понимаю...

:blush:

 

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

? :rolleyes:

post-5108-1244114846_thumb.png

 

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

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

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

post-5108-1244114853_thumb.png

 

 

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


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

 

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

Share this post


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

 

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

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

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

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

Share this post


Link to post
Share on other sites
А не маловато ли разрядов для коэффициентов?

 

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

 

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

 

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

 

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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

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

post-1865-1245250703.gif

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

post-1865-1245250714.gif

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

Share this post


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

 

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

 

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

Share this post


Link to post
Share on other sites
Как прошла защита?

 

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

 

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

Share this post


Link to post
Share on other sites

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

Edited by ZED

Share this post


Link to post
Share on other sites

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

FFT_2048_2_07_09.rar

FFT_2048_2_07_09.rar

FFT_2048_2_07_09.rar

Share this post


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

 

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

 

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

 

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this