реклама на сайте
подробности

 
 
23 страниц V  « < 19 20 21 22 23 >  
Reply to this topicStart new topic
> Реализация БПФ на ПЛИС, Тудности, встречаемые при реализации
Костян
сообщение Sep 29 2011, 08:46
Сообщение #301


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (almost @ Sep 29 2011, 07:18) *
По всей видимости, чтобы за грубить результаты вычислений, при этом экономя память.

тогда какой смысл в данных с разрядностью более 12 бит ?
Go to the top of the page
 
+Quote Post
almost
сообщение Sep 29 2011, 09:54
Сообщение #302


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648



Цитата(Костян @ Sep 29 2011, 12:46) *
тогда какой смысл в данных с разрядностью более 12 бит ?


В данных? Или в разрядности поворачивающего множителя (W)?
Для примера:
1) возьмите последовательность данных с разрядностью 8 и с разрядностью поворачивающего множителя то же 8 и сделайте над ними БПФ, а потом ОБПФ. Зафиксируйте результат.
2) возьмите такую же разрядность данных, но для операций вычисления БПФ и ОБПФ возьмите разрядность поворачивающего множителя равной к примеру 6. Зафиксируйте результат.
Сравните результаты в п.1 и п.2. В идеале должна получится та же последовательность данных что и была, легко догадаться где будут различия.

Поэтому, если точность не особо важна, но необходимо снизить количество занимаемых ресурсов то уменьшается разрядность поворачивающего множителя.
Go to the top of the page
 
+Quote Post
Костян
сообщение Sep 29 2011, 10:16
Сообщение #303


Знающий
****

Группа: Свой
Сообщений: 740
Регистрация: 24-07-06
Из: Minsk
Пользователь №: 19 059



QUOTE (almost @ Sep 29 2011, 08:54) *
1) возьмите последовательность данных с разрядностью 8 и с разрядностью поворачивающего множителя то же 8 и сделайте над ними БПФ, а потом ОБПФ. Зафиксируйте результат.
2) возьмите такую же разрядность данных, но для операций вычисления БПФ и ОБПФ возьмите разрядность поворачивающего множителя равной к примеру 6. Зафиксируйте результат.
Сравните результаты в п.1 и п.2. В идеале должна получится та же последовательность данных что и была, легко догадаться где будут различия.

К сожалению, нету fixed модели по рукой БПФ. Может кто-нибудь сможет привести подобное иследование и ответить на вопрос, какую разрядность W необходимо иметь для входных данных 16бит ?
Go to the top of the page
 
+Quote Post
almost
сообщение Sep 29 2011, 10:50
Сообщение #304


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648



Цитата(Костян @ Sep 29 2011, 14:16) *
К сожалению, нету fixed модели по рукой БПФ. Может кто-нибудь сможет привести подобное иследование и ответить на вопрос, какую разрядность W необходимо иметь для входных данных 16бит ?


Это исследование необходимо для понимания (т.е. в образовательных целях=)) на что влияет разрядность W.
Для 16 бит, чтобы вычислять БПФ с максимальной точностью, необходимо иметь поворачивающие множители с разрядностью 16 бит.
Go to the top of the page
 
+Quote Post
chirik
сообщение Oct 9 2011, 09:40
Сообщение #305


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 29-10-09
Из: Карелии
Пользователь №: 53 301



А может мне кто ни будь подсказать как этот fft модуль использовать в другом проекте ?
Вот например, у меня есть шина данных 16 бит (оцифрованный звук) и куда её подцепить?
Я пытался создать символ файла FFT_2048.vhd в Quartus 11 он не создает, пишет что не поддерживает пользовательский тип complex_data_bus.
Error (10017): Can't create symbol/include/instantiation/component file for entity "FFT_2048" because port "EXT_DATA_i" are not currently supported by the Quartus II symbol/include/instantiation/component file generator
Go to the top of the page
 
+Quote Post
Sefo
сообщение Oct 25 2011, 14:46
Сообщение #306


Местный
***

Группа: Свой
Сообщений: 429
Регистрация: 11-08-05
Из: Санкт-Петербург
Пользователь №: 7 537



Цитата(chirik @ Oct 9 2011, 12:40) *
Я пытался создать символ файла FFT_2048.vhd в Quartus 11 он не создает, пишет что не поддерживает пользовательский тип complex_data_bus.
Error (10017): Can't create symbol/include/instantiation/component file for entity "FFT_2048" because port "EXT_DATA_i" are not currently supported by the Quartus II symbol/include/instantiation/component file generator


Вы, очевидно, пытаетесь вставить модуль в графическую схему. В этом случае придется написать "обертку" у которой в качестве входов и выходов будут std_logic/std_logic_vector и которая подключит эти сигналы стандартных типов к сигналам с пользовательским типом (complex_data_bus, например).

Цитата(chirik @ Oct 9 2011, 12:40) *
А может мне кто ни будь подсказать как этот fft модуль использовать в другом проекте ?


Увы, на данный момент его еще рано использовать в другом проекте. К сожалению, пока БПФ остается не завершенным. Использовать Вы его сможете, только если доделаете его сами.

Цитата(Костян @ Sep 28 2011, 16:26) *
Почему для W используется разрядность всего 12 бит , тогда как данные 17 ?
Из каких соображений разрядность W взята меньше, чем входных данных ?

Цитата(almost @ Sep 29 2011, 11:18) *
По всей видимости, чтобы за грубить результаты вычислений, при этом экономя память.

Цитата(almost @ Sep 29 2011, 13:50) *
Это исследование необходимо для понимания (т.е. в образовательных целях=)) на что влияет разрядность W.
Для 16 бит, чтобы вычислять БПФ с максимальной точностью, необходимо иметь поворачивающие множители с разрядностью 16 бит.


Если для 16-ти разрядных данных взять 16-ти разрядные коэффициенты, то это не даст максимальную точность вычислений. Разрядность данных, причем не входных, а внутренних, для хранения промежуточных результатов, должна быть больше, чем коэффициентов. Т.е. если для 16-ти разрядных коэффициентов разрядность данных взять, к примеру, 18, то точность вычислений будет выше, чем для 16-ти разрядных данных.

Когда разрядность данных == разрядности коэффициентов, то при умножении на коэффициенты с малыми значениями будет "ощутимое" количество раз происходить обнуление результата.

Например, возьмем 5-ти разрядные коэффициенты и данные. Тогда за 1.0 у нас будет 8 (01000b). 00001b будет соответствовать 0.125. Если 0.875 * 0.125, то в арифметике с плавающей точкой получим 0.109375, но в арифметике с фиксированной точкой получим 0: (00111b * 00001b) >> 4.

Так что точность вычислений складывается из многих факторов. Потери точности также зависят и от того каким именно образом делать вычисления.
Go to the top of the page
 
+Quote Post
troiden
сообщение Oct 27 2011, 06:29
Сообщение #307


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 19-02-09
Из: Москва
Пользователь №: 45 069



Возникла идея сделать в ПЛИСе не только само вычисление FFT, но и усреднение результата по нескольким прогонам. Используется стандартная корка от Xilinx, на выходе она выдает действительную и мнимую части отсчетов. Как правильнее подойти к задаче - усреднять по модулю или усреднять действительную и мнимую части, а потом уже брать модуль?
Go to the top of the page
 
+Quote Post
almost_valid
сообщение Oct 27 2011, 06:41
Сообщение #308





Группа: Участник
Сообщений: 14
Регистрация: 19-10-11
Пользователь №: 67 824



Цитата(Sefo @ Oct 25 2011, 18:46) *
Если для 16-ти разрядных данных взять 16-ти разрядные коэффициенты, то это не даст максимальную точность вычислений. Разрядность данных, причем не входных, а внутренних, для хранения промежуточных результатов, должна быть больше, чем коэффициентов. Т.е. если для 16-ти разрядных коэффициентов разрядность данных взять, к примеру, 18, то точность вычислений будет выше, чем для 16-ти разрядных данных.

Когда разрядность данных == разрядности коэффициентов, то при умножении на коэффициенты с малыми значениями будет "ощутимое" количество раз происходить обнуление результата.

Например, возьмем 5-ти разрядные коэффициенты и данные. Тогда за 1.0 у нас будет 8 (01000b). 00001b будет соответствовать 0.125. Если 0.875 * 0.125, то в арифметике с плавающей точкой получим 0.109375, но в арифметике с фиксированной точкой получим 0: (00111b * 00001b) >> 4.

Так что точность вычислений складывается из многих факторов. Потери точности также зависят и от того каким именно образом делать вычисления.


Согласен с Вами, но я имел в виду что при прочих равных. Так то понятно, ошибки округления никуда не деть.

Цитата(troiden @ Oct 27 2011, 10:29) *
Возникла идея сделать в ПЛИСе не только само вычисление FFT, но и усреднение результата по нескольким прогонам. Используется стандартная корка от Xilinx, на выходе она выдает действительную и мнимую части отсчетов. Как правильнее подойти к задаче - усреднять по модулю или усреднять действительную и мнимую части, а потом уже брать модуль?


Ключевые слова для поиска: Когерентное и не когерентное накопление.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 27 2011, 07:34
Сообщение #309


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Sefo @ Oct 25 2011, 17:46) *
Например, возьмем 5-ти разрядные коэффициенты и данные. Тогда за 1.0 у нас будет 8 (01000b). 00001b будет соответствовать 0.125. Если 0.875 * 0.125, то в арифметике с плавающей точкой получим 0.109375, но в арифметике с фиксированной точкой получим 0: (00111b * 00001b) >> 4.

Чтобы не потерять ни единого бита при перемножении чисел, разрядность результата должна быть равна сумме разрядности входных данных. А уже выходные данные после всех вычислений можно и обрезать до нужной разрядности.

Цитата(almost_valid @ Oct 27 2011, 09:41) *
Ключевые слова для поиска: Когерентное и не когерентное накопление.

Не думаю. В данном случае оба варианта - некогерентное накопление. Если только каждые "прогоны"сигнала не набирались засинхронизированными, как в осциллографах. А будет ли раздельное усреднение мнимой и действительной части давать лучший результат? Не знаю. Наверное...
Go to the top of the page
 
+Quote Post
almost_valid
сообщение Oct 27 2011, 08:00
Сообщение #310





Группа: Участник
Сообщений: 14
Регистрация: 19-10-11
Пользователь №: 67 824



Цитата(ViKo @ Oct 27 2011, 11:34) *
Не думаю. В данном случае оба варианта - некогерентное накопление. Если только каждые "прогоны"сигнала не набирались засинхронизированными, как в осциллографах. А будет ли раздельное усреднение мнимой и действительной части давать лучший результат? Не знаю. Наверное...


Лучший результат по какому критерию? К примеру для когерентных РЛС, которые ведут единую обработку с нескольких каналов не когерентное накопление сродни чуме, т.е. там где фазовая информация важна то стопроцентно надо усреднять/накапливать когерентно. Но, к примеру в РСА иногда для избавления от "спекл шума" производят не когерентное накопление уже когерентно накопленных пачек и картинка существенно улучшается.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 27 2011, 08:26
Сообщение #311


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(almost_valid @ Oct 27 2011, 11:00) *
не когерентное накопление уже когерентно накопленных пачек

Когерентное накопление - когда пачки (кадры, реализации) накоплены засинхронизированными по какому-то событию. Скажем, в РЛС, по зондирующему импульсу. В осциллографах - по срабатыванию триггера синхронизации.
А что такое некогерентное усреднение когерентно накопленных пачек, мне не понятно. И обратное - когерентное усреднение некогерентно накопленных пачек - выглядит нонсенсом.
Go to the top of the page
 
+Quote Post
almost
сообщение Oct 27 2011, 11:22
Сообщение #312


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648



Цитата(ViKo @ Oct 27 2011, 12:26) *
Когерентное накопление - когда пачки (кадры, реализации) накоплены засинхронизированными по какому-то событию.


Я бы немного уточнил бы, сказал что когерентные сигналы уже созданы "синхронизированными" между собой, к примеру в РЛС сигналы синтезировались от одного опорного генератора. Т.е. их и оцифровывать для сохранения когерентности надо от того же источника, что бы в дальнейшим можно было оптимально накопить (когерентно сложить).

Цитата(ViKo @ Oct 27 2011, 12:26) *
А что такое некогерентное усреднение когерентно накопленных пачек, мне не понятно. И обратное - когерентное усреднение некогерентно накопленных пачек - выглядит нонсенсом.


Сугубо для борьбы со "спекл шумом" это делается. А вот обратное делать реально нонсенс.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 27 2011, 12:08
Сообщение #313


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(almost @ Oct 27 2011, 14:22) *
А вот обратное делать реально нонсенс.

Я согласен с вами, только уточню свою мысль еще раз.
Не бывает когерентного или некогерентного усреднения. А бывает усреднение когерентных (собранных синхронно) или некогерентных данных.
И усреднение модуля или поотдельности действительной и мнимой частей спектра к когерентности не имеют отношения.
Go to the top of the page
 
+Quote Post
almost
сообщение Oct 28 2011, 05:43
Сообщение #314


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 27-05-09
Из: Москва
Пользователь №: 49 648



Цитата(ViKo @ Oct 27 2011, 16:08) *
Не бывает когерентного или некогерентного усреднения. А бывает усреднение когерентных (собранных синхронно) или некогерентных данных.
И усреднение модуля или поотдельности действительной и мнимой частей спектра к когерентности не имеют отношения.


Да, согласен.
Надо раздобыть схему когерентного и не когерентного накопителя и по ней понять в чем же различия, может подскажите?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 28 2011, 07:11
Сообщение #315


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(almost @ Oct 28 2011, 08:43) *
Да, согласен.
Надо раздобыть схему когерентного и не когерентного накопителя и по ней понять в чем же различия, может подскажите?

Ну, два варианта уже высказаны - синхронизация в осциллографе, синхронизация в РЛС.
Например, микроконтроллер оцифровывает напряжение сети ~230V. Собирает некоторое количество выборок (кадр данных) для измерения, вычисления спектра.
Как обнаружилось, что напряжение перешло через 0 (можно прямо по коду АЦП), отсчитываем нужное количество выборок до конца кадра. Каждый раз одно и то же. Вот и синхронность (когерентность). Из-за шума будет некоторый сдвиг по времени от кадра к кадру. И из-за несинхронности частоты сети и частоты преобразования. Но это небольшие сдвиги.
А дальше вычислить спектр для каждого собранного кадра. А дальше усреднить действительные и мнимые части.
Go to the top of the page
 
+Quote Post

23 страниц V  « < 19 20 21 22 23 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01485 секунд с 7
ELECTRONIX ©2004-2016