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

 
 
> БПФ, Прошу пояснения
Dmitriyspb
сообщение Apr 20 2015, 07:07
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Приветствую Вас, уважаемые знатоки! biggrin.gif

Вступление.
Появилось время и решил разобраться с тем каким образом я могу перенести сигнал из временной области в частотную при помощи ПЛИС. В этом мне может помочь БПФ (FFT).
Стал разбираться с математическим фундаментом этого преобразования и в общем и целом представление появилось (что-то вспомнилось из института), НО никак не могу разобраться каким образом
эту теорию (математическую) мне перенести в железо. Все красиво говорят, но дальше формул дело не доходит.

Вопрос.
Прошу мне помочь разобраться с алгоритмом БПФ (его прикрепляю к посту). Никак не могу разобраться с тем, что значат эти линии и точки их пересечений.

Для себя я уяснил, что входные отсчеты в нужном количестве я возьму с АЦП и запишу их в ОЗУ. Допустим 2048 отсчетов я записал в ОЗУ и что мне дальше с ними делать?

Уточните пожалуйста....куда мне двигаться с этими отсчетами?

Может примеры наглядные есть у кого. Я сам интернет копаю, но ответов на свои вопросы не нахожу. Возможно я что-то сильно недопонимаю.

P.S. Возможно подобный вопрос уже не раз поднимался....хотя я тут толком для себя полезного не нашел.
Прикрепленные файлы
Прикрепленный файл  _________FFT_2048.pdf ( 140.42 килобайт ) Кол-во скачиваний: 343
 


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
6 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 88)
Lmx2315
сообщение Apr 20 2015, 07:15
Сообщение #2


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



http://electronix.ru/forum/index.php?showtopic=58026
Реализация БПФ на ПЛИС, Тудности, встречаемые при реализации

з.ы.
может будет полезно


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 20 2015, 07:18
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Lmx2315 @ Apr 20 2015, 10:15) *
http://electronix.ru/forum/index.php?showtopic=58026
Реализация БПФ на ПЛИС, Тудности, встречаемые при реализации

з.ы.
может будет полезно


спасибо


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Apr 20 2015, 07:34
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



to Dmitriyspb что мешает взять готовую корку и настроить ее под свои нужды (для начала просто поточное, где не нужно самому хранить отсчеты)?
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 20 2015, 07:44
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(bogaev_roman @ Apr 20 2015, 10:34) *
to Dmitriyspb что мешает взять готовую корку и настроить ее под свои нужды (для начала просто поточное, где не нужно самому хранить отсчеты)?


Да, у Xilinx есть готовые корки и можно их взять и не париться.
Но я преследую учебные цели. Нужно разобраться пусть в самом простом БПФ.

В итоге цель реализовать анализатор спектра до 1 МГц. аппаратная платформа имеется. С дисплеем разберусь в конце. А сейчас нужно разобраться с БПФ.
Время позволяет реализовать это самостоятельно.


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Skryppy
сообщение Apr 20 2015, 09:06
Сообщение #6


Участник
*

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



Советую почитать Р. Лайонса "Цифровая обработка сигналов", там много интересного найдете.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 20 2015, 09:31
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Skryppy @ Apr 20 2015, 12:06) *
Советую почитать Р. Лайонса "Цифровая обработка сигналов", там много интересного найдете.
благодарю. пошел читать smile3046.gif


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 20 2015, 10:38
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Итак, я для себя составил ТХ к БПФ по основанию 2

1. Разрешение - 2,5 кГц
2. Число точек 2048
3. Частота дискретизации 5 МГц
4. Полоса для анализа 1 МГц

Читаю дальше....


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Dr.Alex
сообщение Apr 20 2015, 10:51
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863



Цитата(Dmitriyspb @ Apr 20 2015, 13:38) *
Итак, я для себя составил ТХ


Сначала надо написать БПФ на том языке, который вы знаете лучше всего, скорее всего это С. И убедиться что работает.
А потом уж на плисине делать.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 20 2015, 11:01
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Dr.Alex @ Apr 20 2015, 13:51) *
Сначала надо написать БПФ на том языке, который вы знаете лучше всего, скорее всего это С. И убедиться что работает.
А потом уж на плисине делать.


Спасибо
написать я уже решу на чем и когда. Я сейчас для себя пытаюсь нарисовать структуру. И понять алгоритм БПФ


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 20 2015, 13:41
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Итак.
Стало яснее, но вопросы остаются.
Общий принцип понятен. Стал углубляться, а именно рассматривать алгоритм "бабочка" и не могу понять откуда мне взять коэффициенты? Как они считаются?

На картинке 1 показано как высчитывается каждая переменная. А на рисунке 2 показано когда и что подставлять в качестве коэффициента.
Где взять коэффициенты?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 20 2015, 13:55
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Вот отсюда, например. Коэффициенты Фурье считаются как exp(i*2*pi*k*n/N). N - размер Фурье, k - индекс по частоте 0...N-1, n - индекс по времени 0...N-1. Коэффициенты соответственно комплексные нормированные к 1 и вещественные. Нормируйте их к разрядной сетке, округлите и сохраните их в ROM с коэффициентами. Разные реализации Фурье в разном порядке читают эту память. Есть реализации где коэффициенты считаются налету (при очень большом N)
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 21 2015, 06:18
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



UPD. Перепутал с коэффициентами DFT общего вида, пардон rolleyes.gif . Вот здесь хорошо расписано как считать поворотные коэффициенты для FFT. Фактически поворотные коэффициенты для FFT можно представить как вектор матрицы коэффициентов DFT соответствующий n=1. Таким образом для N точечного FFT потребуется N поворотных коэффициентов часть из которых тривиальная (1, -j), что упрощает алгоритм.
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 21 2015, 06:25
Сообщение #14


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Я сейчас решаю похожую задачу, предлагаю объединить наши усилия =)
Набросал код в матлабе, для примера на 16 точек. Понимаю, что профи матлаба меня сейчас наверное закидают тухлыми помидорами, но я написал "чтобы было наглядно, сюда смотреть буду и на verilog кодить"
Код
ss = [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
k2 = [0:7];
W2 = exp( -j*2*pi.*k2/16 );

s2r = [ss(1) ss(9) ss(5) ss(13) ss(3) ss(11) ss(7) ss(15) ss(2) ss(10) ss(6) ss(14) ss(4) ss(12) ss(8) ss(16)];

%первый шаг
s11 = s2r(1) + s2r(2);
s12 = s2r(1) - s2r(2);
s13 = s2r(3) + s2r(4);
s14 = s2r(3) - s2r(4);
s15 = s2r(5) + s2r(6);
s16 = s2r(5) - s2r(6);
s17 = s2r(7) + s2r(8);
s18 = s2r(7) - s2r(8);
s19 = s2r(9) + s2r(10);
s110= s2r(9) - s2r(10);
s111= s2r(11)+ s2r(12);
s112= s2r(11)- s2r(12);
s113= s2r(13)+ s2r(14);
s114= s2r(13)- s2r(14);
s115= s2r(15)+ s2r(16);
s116= s2r(15)- s2r(16);


%второй шаг

s21 = s11 + s13*W2(1);
s22 = s12 + s14*W2(5);
s23 = s11 - s13*W2(1);
s24 = s12 - s14*W2(5);

s25 = s15 + s17*W2(1);
s26 = s16 + s18*W2(5);
s27 = s15 - s17*W2(1);
s28 = s16 - s18*W2(5);

s29 = s19 + s111*W2(1);
s210 = s110 + s112*W2(5);
s211 = s19 - s111*W2(1);
s212 = s110 - s112*W2(5);

s213 = s113 + s115*W2(1);
s214 = s114 + s116*W2(5);
s215 = s113 - s115*W2(1);
s216 = s114 - s116*W2(5);

%шаг 3
s31 = s21 +  s25*W2(1);
s32 = s22 +  s26*W2(3);
s33 = s23 +  s27*W2(5);
s34 = s24 +  s28*W2(7);
s35 = s21 -  s25*W2(1);
s36 = s22 -  s26*W2(3);
s37 = s23 -  s27*W2(5);
s38 = s24 -  s28*W2(7);

s39 = s29 +  s213*W2(1);
s310= s210 + s214*W2(3);
s311= s211 + s215*W2(5);
s312= s212 + s216*W2(7);
s313 = s29 - s213*W2(1);
s314= s210 - s214*W2(3);
s315= s211 - s215*W2(5);
s316= s212 - s216*W2(7);

%шаг 4

s41 = s31 + s39*W2(1);
s42 = s32 + s310*W2(2);
s43 = s33 + s311*W2(3);
s44 = s34 + s312*W2(4);
s45 = s35 + s313*W2(5);
s46 = s36 + s314*W2(6);
s47 = s37 + s315*W2(7);
s48 = s38 + s316*W2(8);

s49 = s31 - s39*W2(1);
s410 = s32 - s310*W2(2);
s411 = s33 - s311*W2(3);
s412 = s34 - s312*W2(4);
s413 = s35 - s313*W2(5);
s414 = s36 - s314*W2(6);
s415 = s37 - s315*W2(7);
s416 = s38 - s316*W2(8);

Результат с матлабовской fft сошелся.

Сообщение отредактировал Kapsik - Apr 21 2015, 06:25
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 06:43
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 20 2015, 16:55) *
Вот отсюда, например. Коэффициенты Фурье считаются как exp(i*2*pi*k*n/N). N - размер Фурье, k - индекс по частоте 0...N-1, n - индекс по времени 0...N-1. Коэффициенты соответственно комплексные нормированные к 1 и вещественные. Нормируйте их к разрядной сетке, округлите и сохраните их в ROM с коэффициентами. Разные реализации Фурье в разном порядке читают эту память. Есть реализации где коэффициенты считаются налету (при очень большом N)



А может для этого существует какая-то программка специализированная, которая умеет считать коэффициенты? Никто не знает?

Цитата(Kapsik @ Apr 21 2015, 09:25) *
Я сейчас решаю похожую задачу, предлагаю объединить наши усилия =)
Набросал код в матлабе, для примера на 16 точек. Понимаю, что профи матлаба меня сейчас наверное закидают тухлыми помидорами, но я написал "чтобы было наглядно, сюда смотреть буду и на verilog кодить"
Код
ss = [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
k2 = [0:7];
W2 = exp( -j*2*pi.*k2/16 );

s2r = [ss(1) ss(9) ss(5) ss(13) ss(3) ss(11) ss(7) ss(15) ss(2) ss(10) ss(6) ss(14) ss(4) ss(12) ss(8) ss(16)];

%первый шаг
s11 = s2r(1) + s2r(2);
s12 = s2r(1) - s2r(2);
s13 = s2r(3) + s2r(4);
s14 = s2r(3) - s2r(4);
s15 = s2r(5) + s2r(6);
s16 = s2r(5) - s2r(6);
s17 = s2r(7) + s2r(8);
s18 = s2r(7) - s2r(8);
s19 = s2r(9) + s2r(10);
s110= s2r(9) - s2r(10);
s111= s2r(11)+ s2r(12);
s112= s2r(11)- s2r(12);
s113= s2r(13)+ s2r(14);
s114= s2r(13)- s2r(14);
s115= s2r(15)+ s2r(16);
s116= s2r(15)- s2r(16);


%второй шаг

s21 = s11 + s13*W2(1);
s22 = s12 + s14*W2(5);
s23 = s11 - s13*W2(1);
s24 = s12 - s14*W2(5);

s25 = s15 + s17*W2(1);
s26 = s16 + s18*W2(5);
s27 = s15 - s17*W2(1);
s28 = s16 - s18*W2(5);

s29 = s19 + s111*W2(1);
s210 = s110 + s112*W2(5);
s211 = s19 - s111*W2(1);
s212 = s110 - s112*W2(5);

s213 = s113 + s115*W2(1);
s214 = s114 + s116*W2(5);
s215 = s113 - s115*W2(1);
s216 = s114 - s116*W2(5);

%шаг 3
s31 = s21 +  s25*W2(1);
s32 = s22 +  s26*W2(3);
s33 = s23 +  s27*W2(5);
s34 = s24 +  s28*W2(7);
s35 = s21 -  s25*W2(1);
s36 = s22 -  s26*W2(3);
s37 = s23 -  s27*W2(5);
s38 = s24 -  s28*W2(7);

s39 = s29 +  s213*W2(1);
s310= s210 + s214*W2(3);
s311= s211 + s215*W2(5);
s312= s212 + s216*W2(7);
s313 = s29 - s213*W2(1);
s314= s210 - s214*W2(3);
s315= s211 - s215*W2(5);
s316= s212 - s216*W2(7);

%шаг 4

s41 = s31 + s39*W2(1);
s42 = s32 + s310*W2(2);
s43 = s33 + s311*W2(3);
s44 = s34 + s312*W2(4);
s45 = s35 + s313*W2(5);
s46 = s36 + s314*W2(6);
s47 = s37 + s315*W2(7);
s48 = s38 + s316*W2(8);

s49 = s31 - s39*W2(1);
s410 = s32 - s310*W2(2);
s411 = s33 - s311*W2(3);
s412 = s34 - s312*W2(4);
s413 = s35 - s313*W2(5);
s414 = s36 - s314*W2(6);
s415 = s37 - s315*W2(7);
s416 = s38 - s316*W2(8);

Результат с матлабовской fft сошелся.


Хорошо. biggrin.gif Напишите поподробнее пожалуйста как вы считаете коэффициенты? Wn = exp(-i*2*pi/n), n - размер фурье (число точек), i = [0 ..(n/2)-1] - номер коэффициента. А у Вас еще какой-то "k2" в формуле??????????


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 21 2015, 07:06
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
А может для этого существует какая-то программка специализированная, которая умеет считать коэффициенты? Никто не знает?

Matlab rolleyes.gif Считаем по формуле: w_sin(k) = imag(exp(-1i*2*pi*k/N)), w_cos(k) = real(exp(-1i*2*pi*k/N)), k=0...N-1
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 21 2015, 07:06
Сообщение #17


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Цитата(Dmitriyspb @ Apr 21 2015, 10:43) *
Хорошо. biggrin.gif Напишите поподробнее пожалуйста как вы считаете коэффициенты? Wn = exp(-i*2*pi/n), n - размер фурье (число точек), i = [0 ..(n/2)-1] - номер коэффициента. А у Вас еще какой-то "k2" в формуле??????????

Вы в #11 привели картинку. Там есть поворачивающие множители W. Их коэффициенты 0,1,2,3. Они рассчитываются у меня как W2, коэффициенты 0,1,2,3 записаны в k2. Получается вектор коэффициентов W с картинки из #11.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 07:32
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 21 2015, 10:06) *
Matlab rolleyes.gif


Ах... простите=))) глупый вопрос

Цитата(Kapsik @ Apr 21 2015, 10:06) *
Вы в #11 привели картинку. Там есть поворачивающие множители W. Их коэффициенты 0,1,2,3. Они рассчитываются у меня как W2, коэффициенты 0,1,2,3 записаны в k2. Получается вектор коэффициентов W с картинки из #11.


Тогда вроде все укладывается. Даже понятно.
_________________________________________________
Тут другой вопросик. Если в бабочку грузить отсчеты по порядку 0,1,2,3... и.т.д. ны выходе получаем кашу. Для того, чтобы этой каши не было используют при загрузки бит-реверсивную перестановку отсчетов. Я правильно понял? Т.е. перемешиваем на входе и имеем по порядку на выходе ИЛИ имеем по порядку на входе, тогда перемешиваем на выходе, чтобы упорядочить?

to Kapsik
Я на verilog это все дело планирую транслировать.
Вы в matlab будете коэффициенты считать?

Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 21 2015, 07:37
Сообщение #19


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Если в бабочку грузить отсчеты по порядку 0,1,2,3... и.т.д. ны выходе получаем кашу. Для того, чтобы этой каши не было используют при загрузки бит-реверсивную перестановку отсчетов. Я правильно понял? Т.е. перемешиваем на входе и имеем по порядку на выходе ИЛИ имеем по порядку на входе, тогда перемешиваем на выходе, чтобы упорядочить?


Ну да. Прореживание по времени / прореживание по частоте. На dsplib эти техники как раз и разобраны.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 08:03
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 21 2015, 10:37) *
Ну да. Прореживание по времени / прореживание по частоте. На dsplib эти техники как раз и разобраны.


Хорошо. Т.е.
1. Я складываю N (2048) отсчетов от АЦП в память.
2. После заполнения памяти начинаю вычитывать эти значения, НО вычитываю не по порядку а использую бит-реверсивный преобразователь адреса для памяти.

на этом этапе у меня есть корректные отсчеты в нужном порядке.

3. Теперь я прохожу необходимое кол-во ступеней преобразования отсчетов из временной области в частотную (БАБОЧКА)
3.1. Тут использую ROM с отсчетами Wk, которые использую при вычислениях.

4. Через постоянное времени моей цифровой системы начнут выскакивать отсчеты в правильном порядке.

5. Эти отсчеты уже можно перенести на плоскость с заданным шагом (Частота дискретизации/ число точек)?????


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 21 2015, 08:11
Сообщение #21


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
5. Эти отсчеты уже можно перенести на плоскость с заданным шагом (Частота дискретизации/ число точек)?????

Если в вашем преобразовании есть восстановление порядка следования, то да. При этом смотрим например альтеровскую корку. Там есть опции прямого и обратного следования. В кастомизируемых корках еще может быть опция центрирования, когда 0 стоит не в начале выборки а в 1, что удобно в некоторых приложениях спектрального анализа.

Подумайте сразу еще и о скалирование результатов умножения. Чтобы потом не было сюрпризов. Это нужно делать на каждом этапе при целочисленной реализации. Очень важный и тонкий момент реализации. При этом FFT может выступать в качестве некоторого АРУ. Исходный масштаб можно восстановить, если вы будете накапливать информацию о скалировании с каждого шага.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 08:22
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 21 2015, 11:11) *
Если в вашем преобразовании есть восстановление порядка следования, то да.


Если я их загружаю в БАБОЧКУ в бит-реверсивном порядке, тогда у меня на выходе все должно быть упорядочено. Верно понимаю?

На счет скалирования (по просту говоря масштабирования) еще не думал. Ткните пожалуйста где почитать можно.


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 21 2015, 08:37
Сообщение #23


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Если я их загружаю в БАБОЧКУ в бит-реверсивном порядке, тогда у меня на выходе все должно быть упорядочено. Верно понимаю?

Это от алгоритма будет зависить. Можно сделать 1001 способом. Логичнее все манипуляции с перестановками делать отдельно а бабочку отдельно и кормить ее всегда данными, вычитываемыми по порядку. На dsplib объясняются 2 самых основных подхода к мультиплексированию, но наверное есть еще всякие частные решения, заточенные под конкретное железо.

Хы, какой я раритет нашёл, очень винтажно rolleyes.gif
Прикрепленный файл  kabalr1985.pdf ( 1.34 мегабайт ) Кол-во скачиваний: 194

Хоть самому читай. Ну а вообще поиск по scaling during fft stages можно смотреть.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 08:50
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



А что по этому поводу думает уважаемый Kapsik? Как он все это дело планирует в verilog описывать. Можно функционально рассказать

Цитата(serjj @ Apr 21 2015, 11:37) *
Это от алгоритма будет зависить. Можно сделать 1001 способом. Логичнее все манипуляции с перестановками делать отдельно а бабочку отдельно и кормить ее всегда данными, вычитываемыми по порядку. На dsplib объясняются 2 самых основных подхода к мультиплексированию, но наверное есть еще всякие частные решения, заточенные под конкретное железо.

Хы, какой я раритет нашёл, очень винтажно rolleyes.gif
Прикрепленный файл  kabalr1985.pdf ( 1.34 мегабайт ) Кол-во скачиваний: 194

Хоть самому читай. Ну а вообще поиск по scaling during fft stages можно смотреть.


спасибо


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 21 2015, 09:13
Сообщение #25


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Цитата(Dmitriyspb @ Apr 21 2015, 12:50) *
А что по этому поводу думает уважаемый Kapsik?

Хех, уважаемый, приятно, но боюсь пока не заслуженно ;-)

Набросал вот такую блочную схему. Коротенько описание. ser2par сдвиговый регистр, в нем копятся 16 отсчетов. Lat_data защелкивает эти отсчеты одновременно совершая перестановку. Далее идет мультиплексор который коммутирует отсчеты по нужным бабочкам, на выходе бабочек умножение и все по новой. Интересно, что скажут остальные по поводу такой реализации

.
Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 10:02
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Kapsik @ Apr 21 2015, 12:13) *
Интересно, что скажут остальные по поводу такой реализации

Остальные пока молчат.
Вот моя версия. Думаю что-то очень похожее.

А дальше что вы планируете с этими отсчетами делать?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 21 2015, 10:43
Сообщение #27


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Цитата(Dmitriyspb @ Apr 21 2015, 14:02) *
Остальные пока молчат.
Вот моя версия. Думаю что-то очень похожее.

А дальше что вы планируете с этими отсчетами делать?

Вообще я делаю эквалайзер. Так что буду выводить на VGA моник.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 21 2015, 10:49
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Kapsik @ Apr 21 2015, 13:43) *
Вообще я делаю эквалайзер. Так что буду выводить на VGA моник.


вы в Matlab коэффициенты считать для ROM будите? или уже посчитали?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 21 2015, 10:59
Сообщение #29


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Цитата(Dmitriyspb @ Apr 21 2015, 14:49) *
вы в Matlab коэффициенты считать для ROM будите? или уже посчитали?

Да, в матлабе посчитаю и в mif засуну.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 22 2015, 10:25
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Товарищи, правильно ли я считаю коэффициент для своей бабочки????????????????????????????????
В коде приведено k=2, N=2048;
Код
>> k=2;
>> N=2048;
>> W2=exp(-j*2*pi*k/N)

W2 =

   1.0000 - 0.0061i

>> W2= 1-0.0061

W2 =

    0.9939

>> % Преобразовываю в 16-ти разрядную
>> % целочисленную форму (1бит-знаковый + 15бит мантисса)
>>  L = (2^15)-1

L =

       32767

>> F = W2*L

F =

  3.2567e+004

>> round (F)

ans =

       32567;


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 22 2015, 11:24
Сообщение #31


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Код
>> W2= 1-0.0061

W2 =

    0.9939

Воу воу, это что? Коэффициент комплексный и умножение должно быть комплексным, а вы зачем-то из Re Im вычитаете.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 22 2015, 11:32
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 22 2015, 14:24) *
Код
>> W2= 1-0.0061

W2 =

    0.9939

Воу воу, это что? Коэффициент комплексный и умножение должно быть комплексным, а вы зачем-то из Re Im вычитаете.


Вот тут, та я и больше всего не понимаю. smile3046.gif smile3046.gif smile3046.gif

Как мне комплексное число перевести в целочисленную форму????


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 22 2015, 11:55
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Как мне комплексное число перевести в целочисленную форму????

комплексное число с точки зрения обработки это 2 числа: real(a) и imag(a). Переводите их отдельно. А все рассчёты нужно привести к форме re(a_new) = f_re(re(a_old), im(a_old)), im(a_new) = f_im(re(a_old), im(a_old)), благо все основные комплексные операции, с которыми программисту приходится иметь дело, допускают такую форму записи.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 22 2015, 12:03
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 22 2015, 14:55) *
комплексное число с точки зрения обработки это 2 числа: real(a) и imag(a). Переводите их отдельно. А все расчёты нужно привести к форме re(a_new) = f_re(re(a_old), im(a_old)), im(a_new) = f_im(re(a_old), im(a_old)), благо все основные комплексные операции, с которыми программисту приходится иметь дело, допускают такую форму записи.


перевел, а вот как потом на них умножать отсчеты? Отсчеты имеют целочисленную форму laughing.gif


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Apr 22 2015, 12:10
Сообщение #35


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Считали бы, как нормальные люди sm.gif, через синус и косинус. А эти комплексные экспоненты - в мусор! sm.gif Нечего человеку мозги засорять.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 22 2015, 12:33
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Считали бы, как нормальные люди sm.gif, через синус и косинус. А эти комплексные экспоненты - в мусор! sm.gif Нечего человеку мозги засорять.

Ну без понимание формулы Эйлера нельзя браться за Фурье rolleyes.gif

Цитата
перевел, а вот как потом на них умножать отсчеты? Отсчеты имеют целочисленную форму

(a_re + j*a_im)(w_re + j*w_im) = (a_re*w_re - a_im*w_im) + j*(a_re*w_im + a_im*w_re)

Цитата
можно, но функции синуса и косинуса реализовываются в ПЛИС довольно проблематично (требуется использование Cordic)

Имеется в виду табличные синус/косинус, которые потом также и умножаются на входные отчёты, но только это тоже самое получается что и комплексная экспонента, только понимания меньше. А вообще таки да слышал про Фурье на кордиках, но сам не видел rolleyes.gif

Сообщение отредактировал serjj - Apr 22 2015, 12:36
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 22 2015, 12:37
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Xenia @ Apr 22 2015, 15:10) *
Считали бы, как нормальные люди sm.gif, через синус и косинус. А эти комплексные экспоненты - в мусор! sm.gif Нечего человеку мозги засорять.


Да уж, я вот и буксую. biggrin.gif

Вот как сделать из вещественных входных отсчетов АЦП отсчеты I и Q я догадываюсь (I и Q - это вроде как и есть комплексное представление сигнала). Попросту говоря синус и косинус. И дальше для них будет две независимые ветки БПФ и коэффициенты БПФ (Wn) у каждого будут тоже свои. Верно понимаю?
Т.О. из комплексного выражения W1=x1+y1i
x - это мои коэффициент W1 для косинуса
y - это мои коэффициент W1 для синуса


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 22 2015, 12:38
Сообщение #38


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Вот как сделать из вещественных входных отсчетов АЦП отсчеты I и Q я догадываюсь (I и Q - это вроде как и есть комплексное представление сигнала). Попросту говоря синус и косинус. И дальше для них будет две независимые ветки БПФ и коэффициенты БПФ (Wn) у каждого будут тоже свои. Верно понимаю?
Т.О. из комплексного выражения W1=x1+y1i
x - это мои коэффициент W1 для косинуса
y - это мои коэффициент W1 для синуса

Неверно. Мнимая часть вносит вклад в рассчёт выходной действительной и наоборот. См. комплексное умножение.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 22 2015, 12:43
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 22 2015, 15:33) *
(a_re + j*a_im)(w_re + j*w_im) = (a_re*w_re - a_im*w_im) + j*(a_re*w_im + a_im*w_re)


Тут a_re - косинус, a_im - синус для входных отсчетов.
Аналогично для коэффициентов.
Вроде бы понял.

Вот только получается две ветки БПФ? для синуса и косинуса?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 22 2015, 12:49
Сообщение #40


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Тут a_re - косинус, a_im - синус для входных отсчетов.
Аналогично для коэффициентов.
Вроде бы понял.

Вот только получается две ветки БПФ? для синуса и косинуса?


a_re - действительная часть, a_im - мнимая. Преобразование Фурье определено для множества комплексных чисел, его нельзя вот так взять и сделать отдельно для действительной и мнимой частей. Если вы подадите в Фурье действительный сигнал (мнимая часть = 0), то на выходе вы будете иметь комплексный сигнал (мнимая часть != 0). Косинус и синус хорошие примеры для комплексной синусоиды exp(1i*2*pi*f*t), но ими не исчерпываются все комплексные числа rolleyes.gif
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 22 2015, 13:06
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 22 2015, 15:49) *
a_re - действительная часть, a_im - мнимая. Преобразование Фурье определено для множества комплексных чисел, его нельзя вот так взять и сделать отдельно для действительной и мнимой частей. Если вы подадите в Фурье действительный сигнал (мнимая часть = 0), то на выходе вы будете иметь комплексный сигнал (мнимая часть != 0). Косинус и синус хорошие примеры для комплексной синусоиды exp(1i*2*pi*f*t), но ими не исчерпываются все комплексные числа rolleyes.gif


Я запутался. smile3009.gif
Я понял, что коэффициенты я имею в комплексной форме,значит, отсчеты у меня должны быть тоже в комплексной форме. Так или снова не туда?

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

Меня больше всего смущает комплексное представление коэффициентов (Wn) БПФ, а отсчеты вещественные.
В итоге мне нужно сделать коэффициенты как отсчеты или отсчеты как коэффициенты?????
или можно и так и так???


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Swup
сообщение Apr 22 2015, 13:49
Сообщение #42


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

Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Вещественные числа - подмножество комплексных числе.
Ваше вещественное число А на самом деле комплексное число А+j*0. Т.е. вещественное число это такое комплексное число у которого нулевая мнимая часть. Как вам верно заметили выше преобразование фурье -комплексная операция.

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

Можно еще представить ваш сигнал в виде аналитического ( гуглите преобразование Гилберта), считать его комплексным и делать уже бпф от него. В таком случае отрицательная часть спектра будет нулевой.

ПС Извините конечно, но лично мое мнение: выражение в виде комплексных сигналов гораздо интуитивнее и проще чем в виде косинусных и синусных составляющих. В частности если заниматься обработкой радиолокационных сигналов))
Прям здесь можно заметить как представление чисел виде косинусов и синусов путает человека)) В любом случае одно с другой настолько тесно связано, что не вызывает трудностей. Формула Эйлера все дела.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Apr 22 2015, 13:54
Сообщение #43


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Dmitriyspb @ Apr 22 2015, 16:06) *
Меня больше всего смущает комплексное представление коэффициентов (Wn) БПФ, а отсчеты вещественные.
В итоге мне нужно сделать коэффициенты как отсчеты или отсчеты как коэффициенты?????


Если входные данные вещественные, то вам придется их дополнить нулевой мнимой частью, и только после этого запустить на этом месте БПФ. Уже после первого шага алгоритма ненулевые числа появятся и в мнимой части тоже.
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 23 2015, 05:32
Сообщение #44


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Мне показалось, что рисовать бабочки текстом это перебор, так что прикрепляю картинку. Реальная и мнимая части отдельно, я вижу так =)

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 23 2015, 06:14
Сообщение #45


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Xenia @ Apr 22 2015, 16:54) *
Если входные данные вещественные, то вам придется их дополнить нулевой мнимой частью, и только после этого запустить на этом месте БПФ. Уже после первого шага алгоритма ненулевые числа появятся и в мнимой части тоже.


Ага, понял. Спасибо огромное.

Нашел такую инфу и стараюсь её приложить к своей практической плоскости (см. картинки).
Прикрепленное изображение


Основываясь на этом родил такую структуру (см. картинки)

Прикрепленное изображение

Верно я понял или же нет?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 23 2015, 06:27
Сообщение #46


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Основываясь на этом родил такую структуру (см. картинки)

Как вы не хотите понять, что БПФ делается не отдельно для Re и Im каналов с Re и Im коэффициентами, а для комплексного сигнала с комлпексными коэффициентами и имеет комплексный выход. Если вы хотите дальше выход Фурье использовать для спектрального анализа, то вы можете перейти к abs(out), напряжение, или (abs(out))^2, мощность, out - комплексный.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 23 2015, 07:37
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 23 2015, 09:27) *
Как вы не хотите понять, что БПФ делается не отдельно для Re и Im каналов с Re и Im коэффициентами, а для комплексного сигнала с комлпексными коэффициентами и имеет комплексный выход. Если вы хотите дальше выход Фурье использовать для спектрального анализа, то вы можете перейти к abs(out), напряжение, или (abs(out))^2, мощность, out - комплексный.


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

Прикрепленное изображение


Цитата(Kapsik @ Apr 23 2015, 08:32) *
Мне показалось, что рисовать бабочки текстом это перебор, так что прикрепляю картинку. Реальная и мнимая части отдельно, я вижу так =)

Прикрепленное изображение


Тут тоже говорят об отдельном. Где подвох?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Kapsik
сообщение Apr 23 2015, 07:39
Сообщение #48


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

Группа: Свой
Сообщений: 100
Регистрация: 28-08-13
Из: SPb
Пользователь №: 78 086



Цитата(Dmitriyspb @ Apr 23 2015, 11:37) *
Вы скажите пожалуйста как Вы представляете себе в железе комплексный сигнал
Во эта операция требует отдельное перемножение вещественной и мнимой частей между коэффициентами и отсчетами.

Прикрепленное изображение




Тут тоже говорят об отдельном. Где подвох?


Дык я же и расписал по отдельности. Re и Im. Видно что результат совпал, с "прямым" расчетом...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 23 2015, 07:56
Сообщение #49


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Kapsik @ Apr 23 2015, 10:39) *
Дык я же и расписал по отдельности. Re и Im. Видно что результат совпал, с "прямым" расчетом...


ТОВАРИЩИ, мне кажется, что я понял=))))) 1111493779.gif 1111493779.gif smile3046.gif smile3046.gif smile3046.gif
Прикрепленное изображение


Цитата(serjj @ Apr 23 2015, 09:27) *
то вы можете перейти к abs(out), напряжение, или (abs(out))^2, мощность, out - комплексный.


Поясните пожалуйста


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 23 2015, 08:34
Сообщение #50


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Вы скажите пожалуйста как Вы представляете себе в железе комплексный сигнал

Это два логических сигнала, которые представляют собой один физический сигнал но не нужно путать это с двумя действительными каналами, т.к. в случае с каналами каждый сигнал обрабатывается независимо (ну или до какого то этапа обработки независимо, в любом случае каждый канал это отдельный физический сигнал). В случае же с комплексным числом логические сигналы Re и Im обрабатываются по правилами комплексной арифметики. Соответственно БПФ для них одно, как вы и нарисовали.
Цитата
ТОВАРИЩИ, мне кажется, что я понял=)))))
...
Поясните пожалуйста

Вы определенно на пути к истине. Осталось подумать что же неверно в "Участок 4" yeah.gif
После Фурье вы получили комлексный частотный образ входного комплексного сигнала. Если вы возьмёте модуль комплексного числа, то получите АЧХ, если аргумент - то ФЧХ, если квадрат модуля, то спектральную плотность мощности.

Сообщение отредактировал serjj - Apr 23 2015, 08:37
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 23 2015, 09:57
Сообщение #51


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 23 2015, 11:34) *
Вы определенно на пути к истине. Осталось подумать что же неверно в "Участок 4" yeah.gif
После Фурье вы получили комлексный частотный образ входного комплексного сигнала. Если вы возьмёте модуль комплексного числа, то получите АЧХ, если аргумент - то ФЧХ, если квадрат модуля, то спектральную плотность мощности.


Спасибо за пояснения=)
Продолжим!
ФЧХ и АЧХ меня не интересуют. Меня интересует спектр сигнала, поэтому беру квадрат модуля комплексного сигнала.
Прикрепленное изображение

На деле же, моя структура будет иметь вид
Прикрепленное изображение


правильно понял?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 23 2015, 10:05
Сообщение #52


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Да. Формально в схему еще нужно добавить RAM для Re и Im на выходе БПФ. И я подозреваю, что на 2-м участке у вас после ФНЧ должна стоять децимация. Если же Фурье делается на символьной частоте АЦП, то ФНЧ и перенос частоты не нужны, т.к. само Фурье обеспечивает фильтрацию, а зная полосу сигнала, который вы анализируете, вы просто берёте отсчёты частотного образа, которые попадают в эту полосу и работаете только с ними (это встречается например в приложениях с низкочастотной обработкой в акустике). Ну а так вроде всё норм.
Go to the top of the page
 
+Quote Post
Swup
сообщение Apr 23 2015, 10:40
Сообщение #53


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

Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Спектр Фурье это разложение сигнала на сумму комплексных экспонент. т.е. то что у вас есть на выходе БПФ - это спектр вашего сигнала.
Далее вы берете и из каждой комплексной экспоненты представленной в виде re+j*im выделяете амплитуду по формуле Эйлера. И получаете... Амплитудный спектр, т.е. распределение амплитуд по частоте или попросту говоря амплитудно-частотную характеристику. Ну а есть брать квадрат амплитуд то будет спектр мощности.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 23 2015, 10:42
Сообщение #54


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 23 2015, 13:05) *
Да. Формально в схему еще нужно добавить RAM для Re и Im на выходе БПФ.


Да, вы правы. Добавлю.

Цитата(serjj @ Apr 23 2015, 13:05) *
Если же Фурье делается на символьной частоте АЦП, то ФНЧ и перенос частоты не нужны, т.к. само Фурье обеспечивает фильтрацию, а зная полосу сигнала, который вы анализируете, вы просто берёте отсчёты частотного образа, которые попадают в эту полосу и работаете только с ними (это встречается например в приложениях с низкочастотной обработкой в акустике).


На мой взгляд это проще. Думаю так и поступить.
Частота дискретизации АЦП 5 МГц.
Полоса анализа (ширина полосы сигнала) 1 МГц.
Частота обработки БПФ тоже 5 МГц

учитывая эту информацию
Цитата(Xenia @ Apr 22 2015, 16:54) *
Если входные данные вещественные, то вам придется их дополнить нулевой мнимой частью, и только после этого запустить на этом месте БПФ. Уже после первого шага алгоритма ненулевые числа появятся и в мнимой части тоже.

Тогда структура принимает вид?
Прикрепленное изображение


Или так не стоит дополнять нулевой мнимой частью?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
serjj
сообщение Apr 23 2015, 10:58
Сообщение #55


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Цитата
Тогда структура принимает вид
...
Или так не стоит дополнять нулевой мнимой частью?

Вроде бы нормально все. Да, делайте преобразование в общем виде (как для комплексного сигнала по алгоритму) и на вход Im просто нули подавайте.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 23 2015, 11:15
Сообщение #56


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(serjj @ Apr 23 2015, 13:58) *
Вроде бы нормально все. Да, делайте преобразование в общем виде (как для комплексного сигнала по алгоритму) и на вход Im просто нули подавайте.


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

тогда приступим к детальному рассмотрению БПФ. smile3046.gif

Ту мне кажется для меня все понятнее, но все же постараюсь сформулировать. rolleyes.gif

Частота дискретизации для АЦП 5 МГц
БПФ будет производиться на этих же 5 МГц
Планирую для простоты для начала реализовать 128 точек.
________________________________________________________
Для полного объединения спектра размерностью 128 отсчетов требуется выполнить log2 128 циклов операций "бабочка".
Итого log2 128 =7 циклов
при этом каждый цикл состоит из 64 операций, т.к. при основании 2 в одной базовой операции БПФ задействовано 2 входных отсчета.
_________________________________________________________

общее число поворачивающих к-тов равно половине размерности входного сигнала 128/2 = 64 к-тов

_________________________________________________________
Верно я излагаю?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
des00
сообщение Apr 23 2015, 14:05
Сообщение #57


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



ТС в форуме про плисы, есть тема про БПФ. Пишут вместе с начинающим с начала и до конца.


--------------------
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Apr 27 2015, 05:30
Сообщение #58


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(des00 @ Apr 23 2015, 17:05) *
ТС в форуме про плисы, есть тема про БПФ. Пишут вместе с начинающим с начала и до конца.


Думаю этот пост претендует на самый "ПОЛЕЗНЫЙ" biggrin.gif

Всегда особенно ценил подобные советы laughing.gif


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
mihalevski
сообщение May 9 2015, 15:10
Сообщение #59


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

Группа: Участник
Сообщений: 100
Регистрация: 20-05-10
Из: Omsk
Пользователь №: 57 391



удален

Сообщение отредактировал mihalevski - May 9 2015, 15:18
Go to the top of the page
 
+Quote Post
Krys
сообщение May 18 2015, 07:04
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Dmitriyspb @ Apr 23 2015, 17:42) *
Или так не стоит дополнять нулевой мнимой частью?
Учитывая, что сигнал чисто вещественный, то спектр в отрицательной области будет комплексно-сопряжённым, следовательно при использовании полноценного БПФ для комплексных входных сигналов половина отсчётов будет избыточна. Избыточны и ресурсы на её расчёт.
Для расчёта спектра чисто вещественных сигналов используются особые модификации БПФ. Если не путаю DCT (дискретное косинус-преобразование). Короче гуглить надо, но смысл есть. Поискал у себя - чего-то с ходу не нашёл. Кажется припоминаю, что об этом всём должно быть во многих основополагающих книжках того же Лайноса, Рабинера с Голдом, Оппенгейма и т.п. Теория то давно придумана и задокументирована в букварях, велосипед изобретать не надо. Просто почитать самые канонические буквари.


Цитата(serjj @ Apr 22 2015, 19:33) *
(a_re + j*a_im)(w_re + j*w_im) = (a_re*w_re - a_im*w_im) + j*(a_re*w_im + a_im*w_re)
Добавлю. При реализации на ПЛИС иногда удобнее пользоваться формулой с тремя умножениями и 5 сложениями, т.к. DSP-блоков меньше съедается. Сама формула есть в датащите на дсп-блок от спартана6.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 18 2015, 10:18
Сообщение #61


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Krys @ May 18 2015, 10:04) *
Для расчёта спектра чисто вещественных сигналов используются особые модификации БПФ. Если не путаю DCT (дискретное косинус-преобразование).


Вы в этом уверены??????????????????????????????????? wacko.gif
Мне кажется, что Вы что-то путаете. Ведь БПФ это и есть адаптация ДПФ к вычислительным мощностям маломощных ЭВМ.

А DCT используется в алгоритмах сжатия информации.



--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Krys
сообщение May 18 2015, 10:59
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



есть быстрое косинус-преобразование, по аналогии с быстрым Фурье-преобразованием. Я не то, чтобы не путаю. Я просто назвал общий класс преобразований, а быстрое или не быстрое - это уже подклассы. Главное, что это не Фурье, а косинус-преобразование, которое использует половину ресурсов.
Вы лучше взгляните главы книжек авторов, которые я назвал. Хотя бы пробегитесь по диагонали, может найдёте именно это. Я действительно уже подзабыл.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 18 2015, 11:12
Сообщение #63


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Krys @ May 18 2015, 13:59) *
есть быстрое косинус-преобразование, по аналогии с быстрым Фурье-преобразованием. Я не то, чтобы не путаю. Я просто назвал общий класс преобразований, а быстрое или не быстрое - это уже подклассы. Главное, что это не Фурье, а косинус-преобразование, которое использует половину ресурсов.
Вы лучше взгляните главы книжек авторов, которые я назвал. Хотя бы пробегитесь по диагонали, может найдёте именно это. Я действительно уже подзабыл.


Спасибо за советы. Обязательно взгляну и сразу дело пойдет в гору. Спасибо ещё раз.

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


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение May 18 2015, 11:14
Сообщение #64





Guests






Цитата(Dmitriyspb @ May 18 2015, 14:12) *
P.S. давайте по делу больше, а не писать названия знакомых книжек.


Т.е. - пересказывать их? crying.gif
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 18 2015, 11:21
Сообщение #65


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(TSerg @ May 18 2015, 14:14) *
Т.е. - пересказывать их? crying.gif


хм!? наизусть smile3009.gif


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
thermit
сообщение May 18 2015, 11:43
Сообщение #66


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(Dmitriyspb @ May 18 2015, 14:12) *
Спасибо за советы. Обязательно взгляну и сразу дело пойдет в гору. Спасибо ещё раз.

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



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

http://electronix.ru/forum/index.php?showt...t&p=1227495

2-е формулы.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 18 2015, 13:28
Сообщение #67


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(thermit @ May 18 2015, 14:43) *
Если нужно дпф над вещественными данными, можно его выполнить через комплексное половинной длины.

http://electronix.ru/forum/index.php?showt...t&p=1227495

2-е формулы.


Тогда возникает вопрос, а в чем преимущества алгоритма с полными комплексными числами перед алгоритмом, где только вещественная часть сигнала фигурирует?


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
thermit
сообщение May 18 2015, 14:17
Сообщение #68


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(Dmitriyspb @ May 18 2015, 16:28) *
Тогда возникает вопрос, а в чем преимущества алгоритма с полными комплексными числами перед алгоритмом, где только вещественная часть сигнала фигурирует?



Выход дпф есть комплексная последовательность вне зависимости от того, какие данные на входе.
Если входные данные вещественны, есть 2 варианта вычисления дпф:

1. Представить входную последовательность как комплексную, но половинной длины и выполнить дпф половинной длины. Затем преобразовать полученную посл в дпф исходной (см формулы).
2. Выполнить над исходной последовательностью преобразование хартли полной длины. Оно чисто вещественное. Затем преобразовать полученную последовательность в дпф при помощи несложных вычислений.

оба способа практически не отличаются с точки зрения ресурсов.
Go to the top of the page
 
+Quote Post
Krys
сообщение May 19 2015, 02:05
Сообщение #69


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Dmitriyspb @ May 18 2015, 18:12) *
Спасибо за советы. Обязательно взгляну и сразу дело пойдет в гору. Спасибо ещё раз.

P.S. давайте по делу больше, а не писать названия знакомых книжек.
Почитайте последние посты и поймите чего интересует автора поста и т.п.
Я так понимаю, Вы обиделись на советы почитать книжки и считаете их бесполезными или малополезными в виду неопределённости границ поиска? ))) А зря. Я сам не люблю, когда мне советуют почитать книжки, подразумевая в косвенной форме идти обратно учиться 5 лет в вузе ))) В данном случае я подразумевал, что я где-то встречал конкретную информацию. Нужно открыть книжки в оглавлении, найти главу про преобразование Фурье, там либо подглава будет про преобразование над вещественными данными, либо бегло пролистать текст главы просто самому, может что-то попадётся.
Попробую найти время, сам пробегусь. Заодно освежу в памяти


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 19 2015, 05:23
Сообщение #70


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(thermit @ May 18 2015, 17:17) *
Выход дпф есть комплексная последовательность вне зависимости от того, какие данные на входе.
Если входные данные вещественны, есть 2 варианта вычисления дпф:

1. Представить входную последовательность как комплексную, но половинной длины и выполнить дпф половинной длины. Затем преобразовать полученную посл в дпф исходной (см формулы).
2. Выполнить над исходной последовательностью преобразование хартли полной длины. Оно чисто вещественное. Затем преобразовать полученную последовательность в дпф при помощи несложных вычислений.

оба способа практически не отличаются с точки зрения ресурсов.


Этот момент я усвоил. Спасибо за комментарий. Мне вот интересно: если используя два описанных Вами метода реализовывать анализатор спектра, то результат будет одинаковый, либо будет какая-то разница? Ресурсов потребуется одинаково (если я правильно понял). Хочется понять практическую ценность этих двух методов. Или они просто идентичные и какой больше нравится тем и пользуйся?

Цитата(Krys @ May 19 2015, 05:05) *
Я так понимаю, Вы обиделись на советы почитать книжки и считаете их бесполезными или малополезными в виду неопределённости границ поиска? ))) А зря. Я сам не люблю, когда мне советуют почитать книжки, подразумевая в косвенной форме идти обратно учиться 5 лет в вузе ))) В данном случае я подразумевал, что я где-то встречал конкретную информацию. Нужно открыть книжки в оглавлении, найти главу про преобразование Фурье, там либо подглава будет про преобразование над вещественными данными, либо бегло пролистать текст главы просто самому, может что-то попадётся.
Попробую найти время, сам пробегусь. Заодно освежу в памяти


Давайте по теме и Объективно! Все хорошо biggrin.gif rolleyes.gif laughing.gif


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Krys
сообщение May 19 2015, 06:51
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Вот по теме нашёл для Вас: Лайонс_-_ЦОС_2е_издание_русский_перевод_2006.djvu. Страница 483. Глава 13.5. Эффективное вычисление БПФ действительных последовательностей.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 19 2015, 06:57
Сообщение #72


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Krys @ May 19 2015, 09:51) *
Вот по теме нашёл для Вас: Лайонс_-_ЦОС_2е_издание_русский_перевод_2006.djvu. Страница 483. Глава 13.5. Эффективное вычисление БПФ действительных последовательностей.


Спасибо Вам огромное. Ведь можем когда хотим biggrin.gif
Пошел читать smile3046.gif
______________________________________________________________________________
Сейчас ситуация следующая. Алгоритм я выбрал и разобрался с ним. Сейчас упорно ковыряю fft на verilog под fpga. По реализации вопросов не имею. Если возникнут, тогда это уже будет другая ветка по ПЛИС.

А вот для кругозора я почитаю как это можно сделать иначе.


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Krys
сообщение May 19 2015, 07:46
Сообщение #73


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Dmitriyspb @ May 19 2015, 13:57) *
Спасибо Вам огромное. Ведь можем когда хотим
Ага, мы можем, когда Вы хотите ))) Пожалуйста ))

Цитата(Dmitriyspb @ May 19 2015, 13:57) *
Алгоритм я выбрал и разобрался с ним
На чём остановились?

Цитата(Dmitriyspb @ May 19 2015, 13:57) *
Если возникнут, тогда это уже будет другая ветка по ПЛИС.
Возникнут... )) С разрядностью, гейном, округлением...


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
thermit
сообщение May 19 2015, 08:09
Сообщение #74


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата
Dmitriyspb:
Этот момент я усвоил. Спасибо за комментарий. Мне вот интересно: если используя два описанных Вами метода реализовывать анализатор спектра, то результат будет одинаковый, либо будет какая-то разница? Ресурсов потребуется одинаково (если я правильно понял). Хочется понять практическую ценность этих двух методов. Или они просто идентичные и какой больше нравится тем и пользуйся?


Одинаковы с точностью до ошибок вычислений.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 19 2015, 08:58
Сообщение #75


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Krys @ May 19 2015, 10:46) *
Ага, мы можем, когда Вы хотите ))) Пожалуйста ))

И все равно надо что-то написать laughing.gif

Цитата(Krys @ May 19 2015, 10:46) *
На чём остановились?

Посмотрите эту ветку форума изначально. Там добрый человек меня тыкал носом в мои ошибки, а я рисовал структуры. В итоге структуру нарисовал.

Цитата(Krys @ May 19 2015, 10:46) *
Возникнут... )) С разрядностью, гейном, округлением...


Я тут покопался на форуме и нашел где объясняли как округлять (популярным языком). Ссылка есть во втором посте


Цитата(Krys @ May 19 2015, 10:46) *
Ага, мы можем, когда Вы хотите ))) Пожалуйста ))

На чём остановились?

Возникнут... )) С разрядностью, гейном, округлением...


Вот Вы человек способный, умный.... пишите без ошибок, пунктуацию соблюдаете, книжек много знаете разных, возможно их читаете. Такие люди как Вы обычно знают много....может поможете....

Меня волнует еще отвлеченный от этой темы вопрос


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Krys
сообщение May 19 2015, 11:37
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Dmitriyspb @ May 19 2015, 15:58) *
И все равно надо что-то написать
А как же )) Мы, злостные флудеры, такие ))) Расслабьтесь. Мы же сюда заходим не только работать, но и отдохнуть от работы. Лёгкий флуд - терпимо.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение May 20 2015, 05:20
Сообщение #77


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Krys @ May 19 2015, 14:37) *
А как же )) Мы, злостные флудеры, такие ))) Расслабьтесь. Мы же сюда заходим не только работать, но и отдохнуть от работы. Лёгкий флуд - терпимо.


Ах...вот оно что?!


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Dmitriyspb
сообщение Jun 26 2015, 07:14
Сообщение #78


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Уважаемые форумчане biggrin.gif Возникли трудности, прошу по возможности помощи.
Речь о БПФ, если кто не в курсе.
1. Бабочка по основанию 2
2. 16 точек
3. Частота дискретизации 5 МГц
4. Прореживание во времени
5. Соответственно 8 коэффициентов
6. Реализация на ПЛИС (verilog).
7. Моделирую в Modelsim
8. Пытаюсь smile3046.gif проверить работу алгоритма в Mathlab
________________________________________________________________________________
_
Я построил свою работу следующим образом:
1. Используя описание 16-ти точечного БПФ в Матлаб рассчитал коэфициенты и подставил удобные для себя входные отсчеты. В итоге построил график
Прикрепленное изображение
, на котором увидел ожидаемую для себя картинку при входных отсчетах
Код
ss = [828 1515 1943 2038 1784 1225 457 -390 -1170 -1750 -2030 -1963 -1560 -890 -68 0];

и коэффициентах
Код
w0 = (1+0i);
w1 = (0.9239-0.3827i);
w2 = (0.7071-0.7071i);
w3 = (0.3827-0.9239i);
w4 = (0-1i);
w5 = (-0.3827-0.9239i);
w6 = (-0.7071-0.7071i);
w7 = (-0.9239-0.3827i);


2. После этого зная из Матлаб результаты всех вычислений я переместился в Modelsim и начал там тестировать свой БПФ описанный на Verilog. В качестве входных значений я использовал те же, что и в Матлаб представленных в дополнительном коде. т.е. мантисса занимает биты с 0 по 10, а 11 бит знаковый в итоге диапазон входных значений от -2047 до +2047.
С коэффициентами иначе. Та как коэффициенты у меня меняются от -1 до +1, тогда я их домножил на все те же 2047 и округлил, 11 битом прикрепил знак. В итоге мои коэффициенты стали иметь вид:
Код
w0 = 2047 + 0i;
w1 = 1891-783i;
w2 = 1447-1447i;
w3 = 783-1891i;
w4 = 0-2047i;
w5 = -783-1891i;
w6 = -1447 - 1447i;
w7= -1891-783i;


3. И тут я как "умная Маша" smile3046.gif попытался засунуть округленные коэффициенты в целочисленной форме в Матлаб. В итоге у меня на выходе ерунда вместо прежней картинки.
И я не понимаю почему????
Нужно что-то менять в матлаб? Просто мне никак не проверить корректность работы БПФ описанного verilog. Хочется иметь одни и те же коэффициенты и в Матлаб и в Моделсим.

Привожу код БПФ из Матлаб


Код
ss = [828 1515 1943 2038 1784 1225 457 -390 -1170 -1750 -2030 -1963 -1560 -890 -68 0];
%k2 = [0:7];
%W2 = exp( -j*2*pi.*k2/16 );
w11 = (1+0i);
w12 = (0.9239-0.3827i);
w13 = (0.7071-0.7071i);
w14 = (0.3827-0.9239i);
w15 = (0-1i);
w16 = (-0.3827-0.9239i);
w17 = (-0.7071-0.7071i);
w18 = (-0.9239-0.3827i);

W2 = [ w11 w12 w13 w14 w15 w16 w17 w18];
s2r = [ss(1) ss(9) ss(5) ss(13) ss(3) ss(11) ss(7) ss(15) ss(2) ss(10) ss(6) ss(14) ss(4) ss(12) ss(8) ss(16)];

%первый шаг
s11 = s2r(1) + s2r(2);
s12 = s2r(1) - s2r(2);
s13 = s2r(3) + s2r(4);
s14 = s2r(3) - s2r(4);
s15 = s2r(5) + s2r(6);
s16 = s2r(5) - s2r(6);
s17 = s2r(7) + s2r(8);
s18 = s2r(7) - s2r(8);
s19 = s2r(9) + s2r(10);
s110= s2r(9) - s2r(10);
s111= s2r(11)+ s2r(12);
s112= s2r(11)- s2r(12);
s113= s2r(13)+ s2r(14);
s114= s2r(13)- s2r(14);
s115= s2r(15)+ s2r(16);
s116= s2r(15)- s2r(16);


%второй шаг

s21 = s11 + s13* W2(1);
s22 = s12 + s14* W2(5);
s23 = s11 - s13* W2(1);
s24 = s12 - s14* W2(5);

s25 = s15 + s17* W2(1);
s26 = s16 + s18* W2(5);
s27 = s15 - s17* W2(1);
s28 = s16 - s18* W2(5);

s29 = s19 + s111* W2(1);
s210 = s110 + s112*W2(5);
s211 = s19 - s111* W2(1);
s212 = s110 - s112*W2(5);

s213 = s113 + s115*W2(1);
s214 = s114 + s116*W2(5);
s215 = s113 - s115*W2(1);
s216 = s114 - s116*W2(5);

%шаг 3
s31 = s21 +  s25*W2(1);
s32 = s22 +  s26*W2(3);
s33 = s23 +  s27*W2(5);
s34 = s24 +  s28*W2(7);
s35 = s21 -  s25*W2(1);
s36 = s22 -  s26*W2(3);
s37 = s23 -  s27*W2(5);
s38 = s24 -  s28*W2(7);

s39 = s29 +  s213*W2(1);
s310= s210 + s214*W2(3);
s311= s211 + s215*W2(5);
s312= s212 + s216*W2(7);
s313 = s29 - s213*W2(1);
s314= s210 - s214*W2(3);
s315= s211 - s215*W2(5);
s316= s212 - s216*W2(7);

%шаг 4

s41 = s31 + s39*W2(1);
s42 = s32 + s310*W2(2);
s43 = s33 + s311*W2(3);
s44 = s34 + s312*W2(4);
s45 = s35 + s313*W2(5);
s46 = s36 + s314*W2(6);
s47 = s37 + s315*W2(7);
s48 = s38 + s316*W2(8);

s49 = s31 - s39*W2(1);
s410 = s32 - s310*W2(2);
s411 = s33 - s311*W2(3);
s412 = s34 - s312*W2(4);
s413 = s35 - s313*W2(5);
s414 = s36 - s314*W2(6);
s415 = s37 - s315*W2(7);
s416 = s38 - s316*W2(8);

%Строим график

x = [0 : 15];
y = [s41, s42, s43, s44, s45, s46, s47, s48, s49, s410, s411, s412, s413,s414, s415, s416];
plot (x, y)



--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
Krys
сообщение Aug 21 2015, 04:24
Сообщение #79


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



решили проблему? В чём была ошибка?


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Corner
сообщение Aug 24 2015, 15:48
Сообщение #80


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Предполагаю, что вы напутали со знаковой математикой. Verilog, в отличие от С, считает переменные без знаковыми, покуда не укажете обратное.
Go to the top of the page
 
+Quote Post
Krys
сообщение Aug 25 2015, 05:59
Сообщение #81


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



К счастью, в доп.коде операции делаются идентично, поэтому указание знака необязательно. Лично я ставлю reg signed или wire signed только для того, чтобы в симуляторе наблюдать сразу знаковые значения.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Corner
сообщение Sep 21 2015, 19:27
Сообщение #82


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815



Цитата(Kapsik @ Apr 21 2015, 14:59) *
Да, в матлабе посчитаю и в mif засуну.

Quartus поддерживает инструкцию $readmemh для блочного ROM в Verilog. Вообще не надо париться с написанием. Забил reg. Прописал $readmemh в initial.

Цитата(Krys @ Aug 25 2015, 09:59) *
К счастью, в доп.коде операции делаются идентично, поэтому указание знака необязательно. Лично я ставлю reg signed или wire signed только для того, чтобы в симуляторе наблюдать сразу знаковые значения.

Ничего подобного. При умножении надо указывать $signed иначе будет непредсказуемая ерунда, даже если указана знаковая переменная.
Go to the top of the page
 
+Quote Post
novartis
сообщение Sep 23 2015, 06:23
Сообщение #83


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Пока тема свежая, задамка вопрос по БПФ.

Вот написал я свое ядро бпф.
Работает оно так, что подаю на вход N точек, оно N*log(N) тактов рассчитает результат.
И получается, что пока производится расчет я не могу на вход подавать следующий кадр, так как внутри задействована память на N отсчетов, умножитель, два сумматора, и во время расчета они постоянно заняты, конвеером пустить новые данные ну ни как.
А вот у альтеры и ксайлинка ip-ядра способны принимать новые кадры без пауз.
Как это у них реализовано?

Самый дубовый вариант - буферизировать входные данные. Но размер буфера будет определяться величиной log(N), а у альтеры/ксайлинкса не наблюдается, чтобы ядро требовало больше памяти, чем под один кадр.
Go to the top of the page
 
+Quote Post
TRILLER
сообщение Sep 23 2015, 08:12
Сообщение #84


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

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



Цитата(novartis @ Sep 23 2015, 09:23) *
Пока тема свежая, задамка вопрос по БПФ.

Вот написал я свое ядро бпф.
Работает оно так, что подаю на вход N точек, оно N*log(N) тактов рассчитает результат.
И получается, что пока производится расчет я не могу на вход подавать следующий кадр, так как внутри задействована память на N отсчетов, умножитель, два сумматора, и во время расчета они постоянно заняты, конвеером пустить новые данные ну ни как.
А вот у альтеры и ксайлинка ip-ядра способны принимать новые кадры без пауз.
Как это у них реализовано?

Самый дубовый вариант - буферизировать входные данные. Но размер буфера будет определяться величиной log(N), а у альтеры/ксайлинкса не наблюдается, чтобы ядро требовало больше памяти, чем под один кадр.

Вообще-то обычный Радикс-2/4 работает именно кадрами. Накапление->вычисление->выдача результата(накопление). Есть ещё по-моему потоковый алгоритм у них, но только на небольшое число точек и с большим ресурсом..
В своё время делал FFT - при разумной полосе спектра сигнала(скажем до 50 МГц) вполне хватает буфера на N точек.
1. Ядро вполне реально разогнать до максимальной частоты BRAM/DSP - смотря что меньше. Пусть будет 500. А это сразу даёт 10 тактов вычисления на 1 такт данных.
2. Первую бабочку можно сделать сразу в момент прихода второй половины входных отсчётов, так как там коэффициенты только единицы.
3. При реализации БПФ с прореживанием по частоте довольно легко при каждом следующем проходе увеличивать число ядер вдвое(в разумных пределах), так как области данных между собой больше не пересекаются и в связи с этим можно разграничить доступ к области памяти.
Всё это конечно усложняет реализацию, но бывают случаи, когда это меньшее из зол.
Go to the top of the page
 
+Quote Post
novartis
сообщение Sep 24 2015, 15:05
Сообщение #85


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Погонял модель бпф от альтеры и в сигналтапе на железе посмотрел. Потоком кадры друг за дружкой засылаю, на выходе результат также потоком выходит, без разрывов. Как же они это реализовали?
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Sep 25 2015, 08:48
Сообщение #86


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Бегло читаем документ.

Находим в нем "The variable streaming FFTs implement either a radix-2^2 single delay feedback FFT, ..."

Ищем гуглом "sdf fft" или "r4sdf fft", или "r2sdf fft"

Цитата(novartis @ Sep 24 2015, 16:05) *
Погонял модель бпф от альтеры и в сигналтапе на железе посмотрел. Потоком кадры друг за дружкой засылаю, на выходе результат также потоком выходит, без разрывов. Как же они это реализовали?
Go to the top of the page
 
+Quote Post
Corner
сообщение Sep 27 2015, 20:05
Сообщение #87


Профессионал
*****

Группа: Участник
Сообщений: 1 072
Регистрация: 11-12-12
Пользователь №: 74 815




Цитата(novartis @ Sep 23 2015, 10:23) *
Пока тема свежая, задамка вопрос по БПФ.

Вот написал я свое ядро бпф.
Работает оно так, что подаю на вход N точек, оно N*log(N) тактов рассчитает результат.
И получается, что пока производится расчет я не могу на вход подавать следующий кадр, так как внутри задействована память на N отсчетов, умножитель, два сумматора, и во время расчета они постоянно заняты, конвеером пустить новые данные ну ни как.
А вот у альтеры и ксайлинка ip-ядра способны принимать новые кадры без пауз.
Как это у них реализовано?

Самый дубовый вариант - буферизировать входные данные. Но размер буфера будет определяться величиной log(N), а у альтеры/ксайлинкса не наблюдается, чтобы ядро требовало больше памяти, чем под один кадр.

Самый дубовый вариант, это поставить N блоков БПФ и коммутировать поотсчетно, подавая их на входы со сдвигом на отсчет. А у Altera и Xilinx используется БПФ со сдвигом не на отсчет, а на 1/2... 1/4 размера блока. По сути, имеется 2... 4 БПФ блока. В результате, на выходе почти отсутствуют разрывы фазы. Но такое преобразование годится не для всех видов модуляции. Иногда приходится делать перекрытие еще меньше 1/4.

Сообщение отредактировал Corner - Sep 27 2015, 20:07
Go to the top of the page
 
+Quote Post
Acvarif
сообщение Sep 30 2015, 16:55
Сообщение #88


Знающий
****

Группа: Участник
Сообщений: 998
Регистрация: 27-08-08
Пользователь №: 39 850



Цитата(Corner @ Sep 27 2015, 23:05) *
Самый дубовый вариант, это поставить N блоков БПФ и коммутировать поотсчетно, подавая их на входы со сдвигом на отсчет. А у Altera и Xilinx используется БПФ со сдвигом не на отсчет, а на 1/2... 1/4 размера блока. По сути, имеется 2... 4 БПФ блока. В результате, на выходе почти отсутствуют разрывы фазы. Но такое преобразование годится не для всех видов модуляции. Иногда приходится делать перекрытие еще меньше 1/4.

По поводу поточного БПФ - все достаточно просто. Описано в соответствующих букварях. Небольшая заметка по этому поводу для ПЛИС http://acvarif.info/prvhdl/prvhdl25.html Такой метод довольно ресурсозатратный, но при наличии в ПЛИС аппаратных умножителей все работает неплохо.
Go to the top of the page
 
+Quote Post
Krys
сообщение Oct 13 2015, 09:19
Сообщение #89


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(Corner @ Sep 22 2015, 02:27) *
Ничего подобного. При умножении надо указывать $signed иначе будет непредсказуемая ерунда, даже если указана знаковая переменная.
Для сложения - без разницы. А для умножения - согласен, могут быть нюансы. И то, у Xilinx реализован аппаратный умножитель чисел дополнительного кода, так что это для него нативно.


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post

6 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:27
Рейтинг@Mail.ru


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