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

 
 
6 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> БПФ, Прошу пояснения
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
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

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 22:04
Рейтинг@Mail.ru


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