Sefo 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Что-то я Вас не понимаю... А разве числовая ось не должна быть зеркальной относительно нуля? Разумеется должна. Такая и есть. Так и нарисовано. Если мы будем отрицательные числа с дробной частью равной 0.5 округлять до большего по абсолютной величине, то мы получем смещение. Мы и не округляем отрицательные числа до большего по абсолютной величине - мы просто округляем к большему, когда дробная часть = 0.5 (независимо от знака числа). Какое смещение Вы имеете ввиду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kas 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Что-то я Вас не понимаю... Разумеется должна. Такая и есть. Так и нарисовано. ? :rolleyes: Мы и не округляем отрицательные числа до большего по абсолютной величине - мы просто округляем к большему, когда дробная часть = 0.5 (независимо от знака числа). Какое смещение Вы имеете ввиду? Например как на этой картинке И уже совсем по детски конечно, но Matlab -7.5 округляет до -8 Вот я и пытаюсь разобраться. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 4 июня, 2009 Опубликовано 4 июня, 2009 · Жалоба Понятно, к чему Вы клоните :). Вы не очень удачно выбрали цитату для своего вопроса. Существуют разные методы округления. В той цитате, что Вы привели для своего вопроса По этой же причине (неправильная разрядность), видимо, Вы для округления прибавляете 4, вместо 2 - это приведет к неправильным вычислениям. Речь шла не о выборе метода округления, а о неправильной реализации выбранного. Должно было быть реализовано выражение X/4+0.5, что соответствует (Х + 2)/4, а было реализовано (Х + 4)/4, что соответствует Х/4 + 1, что не подпадает под округление никаким способом. Округление к простому большему числа с дробной частью 0.5 весьма просто в реализации, посравнению с приведенным вами, а дает не такие уж плохие результаты - ведь к какому числу округлить значение, находящееся строго по середине решить не так-то просто :). Вы вот говорите, что округлять отрицательные числа с дробной частью (д.ч.) 0.5 в большую чторону неверно по причине... и приводите пример. Но почему Вы считаете, что отрицательные числа округляются неверно? На точно таком же основании можно утверждать, что это положительные числа округляются неверно! Если отрицат. числа с д.ч. 0.5 округлять в большую чторону, а вот положительные в меньшую, то никакого смещения наблюдаться не будет, а отличие по модулю от истинного значения, между прочим, в обоих случаях одинаково. Существуют методы, в которых округление чисел с д.ч. 0.5 происходит то в одну сторону, то в другую случайным образом, но равное количество раз в каждую сторону. Можно придумать еще много способов округления, учитывающих особенности конкрентых систем и имеющие лучшее "качество" округления, чем наиболее распространенные методы. Так что этот вопрос можно обсуждать долго. Так что как округлять надо решать в зависимости от имеющейся задачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 8 июня, 2009 Опубликовано 8 июня, 2009 · Жалоба Простите пока временно не могу продолжать работу - слишком сильные напряги с дипломом. Вообще защищаюсь 26, но может раньше смогу приступить к работе. Еще раз приношу свои извинения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 9 июня, 2009 Опубликовано 9 июня, 2009 · Жалоба Простите пока временно не могу продолжать работу - слишком сильные напряги с дипломом. Вообще защищаюсь 26, но может раньше смогу приступить к работе. Еще раз приношу свои извинения. Удачи при защите диплома! Какая у Вас тема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reddy 0 14 июня, 2009 Опубликовано 14 июня, 2009 · Жалоба Извиняюсь за вопрос! Я честно говоря так и не понял какой формат используется для арифметических операций? - с "плавающей точкой", с "блочной плавающей запятой"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 15 июня, 2009 Опубликовано 15 июня, 2009 · Жалоба Извиняюсь за вопрос! Я честно говоря так и не понял какой формат используется для арифметических операций? - с "плавающей точкой", с "блочной плавающей запятой"? С фиксированной точкой. Данные 17-ти разрядные, коэффициенты 12-ти разрядные. Диапазону значений -1.0 ... +1.0 соответствует диапазон значений от -32768 до +32768 для данных и -2048 ... +2048 для коэффициентов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reddy 0 15 июня, 2009 Опубликовано 15 июня, 2009 · Жалоба С фиксированной точкой. Данные 17-ти разрядные, коэффициенты 12-ти разрядные. Диапазону значений -1.0 ... +1.0 соответствует диапазон значений от -32768 до +32768 для данных и -2048 ... +2048 для коэффициентов. А не маловато ли разрядов для коэффициентов? 2048 - отриц. + '0' + 2048 - положит. = 4097 > 12 бит. Потом а какова будет размерность промежуточных результатов? Насколько я понял она может вырости на 4*sqrt(2) - т.е около 6 раз. Ещё один момент который мне не совсем понятен. После каждого этапа, мы маштабируем результат и используем округление (отсечение), чтобы втиснуться в разрядность. Но не исказит ли это результат преобразования Фурье (динамический диапазон) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 16 июня, 2009 Опубликовано 16 июня, 2009 · Жалоба А не маловато ли разрядов для коэффициентов? Да, запамятовал :), -1024 ... +1024 Потом а какова будет размерность промежуточных результатов? Насколько я понял она может вырости на 4*sqrt(2) - т.е около 6 раз. Ну, всетаки, не размерность, а разрядность. Она не меняется. :rolleyes: Все данные и коэффициенты находятся внутри единичной окружности на комплексной плоскости и в силу особенностей вычислений результат тоже остается внутри единичной окружности. Я кажется об этом уже писал. После каждого этапа, мы маштабируем результат и используем округление (отсечение), чтобы втиснуться в разрядность. Но не исказит ли это результат преобразования Фурье (динамический диапазон) ? Используется округление, а не отсечение. Мы масштабируем не для того, чтобы "втиснуться" в разрядность. В бабочке мы делим результаты на 4 (а на последнем этапе на 2) чтобы результат соответствовал формуле (1/N)*СУММА(...). У нас N = 2048. На первых 5-ти этапах мы каждый результат делим на 4, а на последнем делим на 2 - получаем ((1/4)^5) / 2 = 1/2048, ну а СУММА(...) вычисляется выражениями бабочки и умножителями. Искажения безусловно будут, причем, строго говоря, будут при любой реализации. Но целью данной темы является объяснить и практически показать как вообще, в целом, реализовать БПФ в железе "с нуля" и полностью самостоятельно. После этого уже можно будет поэкспериментировать с тем что и как влияет на результат. Кроме того, на практике, нужно всегда искать разумный баланс между сложностью реализации / объемом "железа" / точностью / быстродействием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Reddy 0 17 июня, 2009 Опубликовано 17 июня, 2009 · Жалоба В смысле вместо стандартного ДПФ используем как бы нормированное Тогда согласен, в том смысле что нам не столько важны абсолютные значения бинов сколько их отношения Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 27 июня, 2009 Опубликовано 27 июня, 2009 · Жалоба Простите пока временно не могу продолжать работу - слишком сильные напряги с дипломом. Вообще защищаюсь 26, но может раньше смогу приступить к работе. Еще раз приношу свои извинения. Как прошла защита? Продолжим освоение БПФ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 29 июня, 2009 Опубликовано 29 июня, 2009 · Жалоба Как прошла защита? Продолжим освоение БПФ? Спасибо, защита прошла на УРА, защитился на отлично, мне нужно немного времени, чтобы восстановить всю картину, а так я с удовольствием продолжу работу над БПФ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 2 июля, 2009 Опубликовано 2 июля, 2009 (изменено) · Жалоба Я думаю, что на 5 этапе банки вращать не следует, а запись и чтение будут одинаковыми, файл прилагаю. С Ошибками согласен позже исправлю. Изменено 2 июля, 2009 пользователем ZED Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZED 0 6 июля, 2009 Опубликовано 6 июля, 2009 · Жалоба Блин удалилось сообщение, в общем для чтения и записи на последних этапах адресация видимо одна и та же, файл прикрепляю. FFT_2048_2_07_09.rar FFT_2048_2_07_09.rar FFT_2048_2_07_09.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sefo 0 7 июля, 2009 Опубликовано 7 июля, 2009 · Жалоба Я думаю, что на 5 этапе банки вращать не следует, а запись и чтение будут одинаковыми, файл прилагаю. С Ошибками согласен позже исправлю. Без вращения банков Вы действительно сможете читать и писать на 6-м этапе, но Вы не сможете таким образом записать данные на 5-ом этапе. Посмотрите на Вашу схему - результаты вычисления первой бабочки должны будут попасть, соответственно, в банки 0,2,0,2, при этом банки 1 и 3 остаются незадействованы, а в банки 0 и 2 Вы должны будуте записать по 2 результата за раз, что невозможно осуществить. Таким образом запись на 6-м этапе действительно может осуществляться без вращения банков, а вот запись на 5-ом этапе и, как следствие, чтение на 6-ом этапе нужно продумать. P.S. Пришла пора 5-ый и 6-ой этап на схеме разъединить, чтобы можно было четко нарисовать для них номера банков и адреса памяти при чтении и записи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться