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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> ДПФ/БПФ/ДКП на Cortex-M3 (1986ВЕ94Т), Вычисление БПФ на ARM
uwboy
сообщение Aug 19 2013, 10:39
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 19-08-13
Пользователь №: 77 977



Господа!
Есть необходимость решить задачу спектрального анализа квазипериодического сигнала. Частота дискретизации не менее 80 кГц (изначально 100 кГц, но возможно выбрать исходя из удобного числа отсчётов). Поступает сигнал непрерывно. Спектральный анализ проводится сначала приблизительный — на первой четверти выборки; затем точный — на всей выборке. Длина полной выборки 1 секунда. Для спектрального анализа следует выполнить одно из дискретных преобразований Фурье (как несведущий затрудняюсь определить).
Для ЦОС собираюсь использовать микросхему (1986ВЕ94Т, 1986ВЕ93Т или 1986ВЕ92Т). Предварительно планирую систему следующим образом. Буфер для исходных отсчётов собираюсь организовать на отдельных двух микросхемах (1645РУ4АУ): первая хранит первую четверть выборки и результаты ДПФ, вторая — остаток выборки. Перенаправлять вывод с внешнего АЦП собираюсь внешней же логикой. Сразу после захвата первой четверти отсчётов МК следует начать ДПФ на первой четверти выборки. Закончить следует быстрее, чем 250 мс (соответствует времени захвата четверти выборки), при этом должно остаться немного времени на анализ спектра (поиск пиков). По завершении захвата остатка выборки, МК выполняет ДПФ на первой четверти и остатке менее, чем за секунду.

Вопросы такие:
  1. Успеет МК выполнить ДПФ?
  2. Какой случай ДПФ более предпочтителен (вход — действительные целые, выход — амплитуды целые/дробные)?
  3. Значительно ли повысит быстродействие количество отсчётов являющееся степенью числа 2?
  4. Возможно ли использовать внутренний АЦП микросхемы 1986ВЕ94Т и единственную микросхему СОЗУ и копировать из внутреннего АЦП во внешнее СОЗУ отсчёты по прерываниям АЦП во время вычисления ДПФ? Не сильно ли это притормозит основную программу (ДПФ)?
  5. Значительно ли вырастет производительность ДПФ при использовании внутренней СОЗУ микросхемы 1986ВЕ94Т для части операций?


Поправьте, если я неправильно задаю вопрос или не в тот раздел обращаюсь. Поиск использовал, но просветления не достиг. Заранее спасибо, джентльмены!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 19 2013, 11:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А вы с преобразование Фурье хорошо знакомы?

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

если вы передадите отсчеты подряд 0 1 2 3 4 5 6 7 , то значения по частотам получите в битово - реверсивном порядке, то есть
0 4 2 6 1 5 3 7, где в каждой ячейке будет стоять амплитуда спектра частоты выборки делить на 2 в степени индекс. как то так.. При этом в 0 ячейке лежит постоянка с кривой амплитудой.

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


Для ускорения спектрального анализа надо применять БПФ - быстрое преобразование фурье, самое распространенное это так называемая схема бабочка, она требует количество входных отсчетов равных степени 2, потому ответ да степень 2 серъезно ускорит процесс.

Потом есть еще проблема при вырезании четверти сигнала, на концах вы получите обрезанный спектр, то есть локализцете сигнал во времянной области, а принцип неопределенности Гизенберга гласит что при этом вы получите бесконечный спектр, другими словами вырезав часть сигнала и посчитав спектр вы получите спектр чего угодно, но не исходного сигнала.

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

Вообщем в вашей концепции кроме выбора микросхем есть еще куча математических заморочек, считать придется во флотах, а то и даблах, целочисленных вариантов я что-то не припоминаю, ну кроме варианта ооочень больших целых типа бит на 128, которые точнее флота. И счета надо очень много, так что...
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Aug 19 2013, 12:21
Сообщение #3


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

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Цитата(uwboy @ Aug 19 2013, 06:39) *
Господа!
Частота дискретизации не менее 80 кГц (изначально 100 кГц, но возможно выбрать исходя из удобного числа отсчётов). Поступает сигнал непрерывно. Спектральный анализ проводится сначала приблизительный — на первой четверти выборки; затем точный — на всей выборке. Длина полной выборки 1 секунда. Для спектрального анализа следует выполнить одно из дискретных преобразований Фурье (как несведущий затрудняюсь определить).

Получается 80000выброк.с*0.75с = 60000точек. Это как-то фантастично выглядит. Какое же Вам нужно частотное разрешение?


--------------------
ASB
Go to the top of the page
 
+Quote Post
uwboy
сообщение Aug 19 2013, 12:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 19-08-13
Пользователь №: 77 977



Цитата(Golikov A. @ Aug 19 2013, 15:01) *
А вы с преобразование Фурье хорошо знакомы?

Из библиотеки FFTW запускал. Её документацию читал, но не вчитывался. В общих чертах представляю, что такое ДПФ и что именно оно вычисляет, но могу вчитаться в книжку Лайонса за подробностями, правда сомневаюсь, что что-то принципиально новое узнаю.

Цитата(Golikov A. @ Aug 19 2013, 15:01) *
там есть одна засадка что результат дается либо прореженный по частоте либо прореженный по времени

Прошу прошения, но что имеется в виду?


Цитата(Golikov A. @ Aug 19 2013, 15:01) *
Если хотите частоты нормальные, то надо так же загнуть первоначальные отсчеты. Именно поэтому в ДСП что рассчитаны на преобразование фурье есть спец модуль который железным образом делает такую индексацию.

Вот про такое был не в курсе.

Цитата(Golikov A. @ Aug 19 2013, 15:01) *
ответ да степень 2 серъезно ускорит процесс.

Хорошо, спасибо. Попробую 65 или 131 кГц.

Цитата(Golikov A. @ Aug 19 2013, 15:01) *
Потом есть еще проблема при вырезании четверти сигнала, на концах вы получите обрезанный спектр, то есть локализцете сигнал во времянной области...

Вот этот вопрос для целей моего анализа, насколько я понимаю, не принципиален. Впрочем, я могу ошибаться. Насколько я понял документацию к FFTW, библиотека не вычисляет оконных функций. Результат вычисления с прямоугольным окном даёт мне возможность провести анализ с той степенью достоверности, которая мне нужна. Скорее всего, можно без оконной функции.

Цитата(Golikov A. @ Aug 19 2013, 15:01) *
Вообщем в вашей концепции кроме выбора микросхем есть еще куча математических заморочек

Если это может послужить оправданием, то у меня это в первый раз.

Цитата(Golikov A. @ Aug 19 2013, 15:01) *
считать придется во флотах, а то и даблах, целочисленных вариантов я что-то не припоминаю, ну кроме варианта ооочень больших целых типа бит на 128, которые точнее флота. И счета надо очень много, так что...

FFTW с оптимизациями делает это на современном x86-м довольно долго, так что ARM захлебнётся в аналогичных вычислениях. Вы меня прямо опечалили.

Цитата(Aleksandr Baranov @ Aug 19 2013, 16:21) *
Получается 80000выброк.с*0.75с = 60000точек. Это как-то фантастично выглядит. Какое же Вам нужно частотное разрешение?

Нет, для точный расчётов первая четверть тоже используется, т.е. отсчётов в большом преобразовании будет 80000 или 100000. Разрешение по частоте должно быть 1 Гц. Именно так.

Цитата(Golikov A. @ Aug 19 2013, 15:01) *
целочисленных вариантов я что-то не припоминаю, ну кроме варианта ооочень больших целых типа бит на 128

А вот за этот вариант что скажете?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 19 2013, 13:27
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



скажу что нужен сопроцессор, ПЛИС какую нибудь, и на ней сделать параллельные вычислители, или специализированный считатель типа вот в соседней теме обсуждают
http://electronix.ru/forum/index.php?showtopic=114799
на этой платке стоит какой то могучий спец процессор который прям только считает

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

вот неплохой труд по БПФ
http://www.wl.unn.ru/ftp/public/analog/5.pdf


Оцифровывая с частотой 80 КГц, вы разглядите сигналы до 40 КГц, хорошо бы кстати на входе поставить фильтр на эту частоту, чтобы высшие частоты не портили сигнал. Но почему вы хотите для расчета использовать именно все точки из 1 секундного периода? Какая у вас минимальная частота в сигнале?
Считая дискретное преобразование вы получите частоты в зависимости от числа точек

40КГц 20КГц 10 5 2.5 1.25 ....

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


за вариант скажу вот что
DEST = ((long)(A) * (long)(cool.gif)>>15
то есть таблица синусов в 16 битных интах, а считают то в лонгах, и думаю бит на 64... АРМ без математического модуля не сильно быстрее лонги перемножает по сравнению с флотами. А если брать с модулем математическим, то может и флоты будет за 1 такт считать...

А вот битовую реверсию считать для БПФ - займет гораздо больше времени, а особенно учитывая что вы хотите запихать 85000 точек.



Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Aug 19 2013, 15:08
Сообщение #6


отэц
*****

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



QUOTE (uwboy @ Aug 19 2013, 14:39) *
Закончить следует быстрее, чем 250 мс (соответствует времени захвата четверти выборки), при этом должно остаться немного времени на анализ спектра (поиск пиков).

..если пиков немного то лучше отказаться от Фурье и считать Алгоритм Гёрцеля.


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Aug 19 2013, 20:38
Сообщение #7


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

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



Цитата(uwboy @ Aug 19 2013, 08:42) *
Результат вычисления с прямоугольным окном даёт мне возможность провести анализ с той степенью достоверности, которая мне нужна. Скорее всего, можно без оконной функции.

Нет, для точный расчётов первая четверть тоже используется, т.е. отсчётов в большом преобразовании будет 80000 или 100000. Разрешение по частоте должно быть 1 Гц. Именно так.


Прямоугольное окно сильно испортит картину. Какой тогда смысл в таком высоком разрешении? А сигнал, случайно не узкополосный? Если да, то частоту дискретизации можно сильно уменьшить.
Чтобы оценить время выполнения, можно зарядить 65536 - точечное БПФ на какой-нибудь мощной PC и засечь время.


--------------------
ASB
Go to the top of the page
 
+Quote Post
Alex11
сообщение Aug 19 2013, 21:31
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Про степень 2, что тут говорили - это относится не к частоте дискретизации, а к количеству отсчетов в окне. Здесь от Вас уже все добиваются - что Вы хотите анализировать и найти: какая нижняя частота сигнала, которая Вас интересует? Если Вам не нужно анализировать сигналы порядка 1 Гц, то нет смысла считать Фурье такой длины. Если нужно проанализировать наличие сигнала в данной выборке, но более высокочастотного, то лучше сделать несколько преобразований по более коротким буферам с перекрытием и "сложить" результаты. Времени потратите существенно меньше. В любом случае, Вам нужно использовать Фурье с окном. Выбор окна зависит от задачи - какие у Вас пики и что требуется получить в результате анализа - разрешение по частоте или анализ амплитуд гармоник.

И еще. Вам нужно разрешить пики, отстоящие по частоте на 1 Гц, возможность определить частоту пика с точностью 1 Гц или у Вас нижняя частота интересующего Вас сигнала 1 Гц? Это существенно разные вещи. Длинная выборка строго необходима только в первом и третьем случаях. Да и то, 1 сек не хватит для 1 Гц. Если пики отстоят друг от друга достаточно далеко, то можно обойтись гораздо меньшей кровью и подсчитать положение пика дополнительной обработкой спектра после Фурье.
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 20 2013, 04:01
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Golikov A. @ Aug 19 2013, 15:01) *
А вы с преобразование Фурье хорошо знакомы?

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

если вы передадите отсчеты подряд 0 1 2 3 4 5 6 7 , то значения по частотам получите в битово - реверсивном порядке, то есть
0 4 2 6 1 5 3 7, где в каждой ячейке будет стоять амплитуда спектра частоты выборки делить на 2 в степени индекс. как то так.. При этом в 0 ячейке лежит постоянка с кривой амплитудой.

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


Для ускорения спектрального анализа надо применять БПФ - быстрое преобразование фурье, самое распространенное это так называемая схема бабочка, она требует количество входных отсчетов равных степени 2, потому ответ да степень 2 серъезно ускорит процесс.

Потом есть еще проблема при вырезании четверти сигнала, на концах вы получите обрезанный спектр, то есть локализцете сигнал во времянной области, а принцип неопределенности Гизенберга гласит что при этом вы получите бесконечный спектр, другими словами вырезав часть сигнала и посчитав спектр вы получите спектр чего угодно, но не исходного сигнала.

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

Вообщем в вашей концепции кроме выбора микросхем есть еще куча математических заморочек, считать придется во флотах, а то и даблах, целочисленных вариантов я что-то не припоминаю, ну кроме варианта ооочень больших целых типа бит на 128, которые точнее флота. И счета надо очень много, так что...
Странно, зачем же тогда Техас библиотеки под 64 дсп писал sm.gif почему только флоат то?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 20 2013, 04:55
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



я не говорил только, но исходил из того что дабл на арме считать сильно дольше чем флоат. Причем без мат модуля получалось что 2 лонга перемножить чуть ли не дольше чем 2 флота, а считать в 16-32 битных интах мне кажется не хватит разрядности. Могу ошибаться, это на уровне интуиции... в добавок автор хочет еще и массивы запихивать в 80К точек, думаю там любая фиксированная точка к концу расчета переполнится....

Потому и говорю что скорее всего флоты, даблы лучше, но дольше.

Кстати АРМ с мат модулем даблы за сколько перемножает?

Go to the top of the page
 
+Quote Post
uwboy
сообщение Aug 20 2013, 07:16
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 19-08-13
Пользователь №: 77 977



Цитата(Lmx2315 @ Aug 19 2013, 19:08) *
..если пиков немного то лучше отказаться от Фурье и считать Алгоритм Гёрцеля.

Надо наперёд знать частоту. Мне наперёд частоты пиков неизвестны, даже приблизительно. А вот комбинировать с неточным БПФ вполне здраво: сначала вычислить приблизительное положение пиков через БПФ на четверти выборки, а затем вычислить найти точные частоты пиков через Алгоритм Гёрцеля.

Цитата(Aleksandr Baranov @ Aug 20 2013, 00:38) *
Прямоугольное окно сильно испортит картину.

Лишние регулярные составляющие будут?

Цитата(Aleksandr Baranov @ Aug 20 2013, 00:38) *
Какой тогда смысл в таком высоком разрешении?

Частоту измерять.

Цитата(Aleksandr Baranov @ Aug 20 2013, 00:38) *
А сигнал, случайно не узкополосный?

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

Цитата(Aleksandr Baranov @ Aug 20 2013, 00:38) *
Если да, то частоту дискретизации можно сильно уменьшить.

Возможно, верхняя частота исследуемого сигнала может лежать в диапазоне от пары десятков герц, до 15 кГц. А вот оценить частоту нужно с точностью до 1 Гц.

Цитата(Aleksandr Baranov @ Aug 20 2013, 00:38) *
Чтобы оценить время выполнения, можно зарядить 65536 - точечное БПФ на какой-нибудь мощной PC и засечь время.

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

Цитата(Alex11 @ Aug 20 2013, 01:31) *
Про степень 2, что тут говорили - это относится не к частоте дискретизации, а к количеству отсчетов в окне.

Ну, да. А у меня длина маленького окна 250 мс, а большого 1 секунда.

Цитата(Alex11 @ Aug 20 2013, 01:31) *
Здесь от Вас уже все добиваются - что Вы хотите анализировать и найти: какая нижняя частота сигнала, которая Вас интересует?

Допустим, 21 герц, но нужно знать, что это не 20 Гц и не 22 Гц, с вероятностью 50% и более.

Цитата(Alex11 @ Aug 20 2013, 01:31) *
Выбор окна зависит от задачи - какие у Вас пики и что требуется получить в результате анализа - разрешение по частоте или анализ амплитуд гармоник.

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

Цитата(Alex11 @ Aug 20 2013, 01:31) *
возможность определить частоту пика с точностью 1 Гц

Именно это. Причём нужно это как можно быстрее. Темп выдачи составляет одну секунду. Начальное запаздывание на секунду мне простительно.

Цитата(Alex11 @ Aug 20 2013, 01:31) *
Если пики отстоят друг от друга достаточно далеко, то можно обойтись гораздо меньшей кровью и подсчитать положение пика дополнительной обработкой спектра после Фурье.

Допустим, что соседние пики отстоять могут на 3 Гц. Кстати, буду очень признателен, если расскажете мне о «дополнительной обработке спектра после Фурье».

Сообщение отредактировал uwboy - Aug 20 2013, 07:17
Go to the top of the page
 
+Quote Post
prig
сообщение Aug 20 2013, 08:35
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 869
Регистрация: 30-01-08
Из: СПб
Пользователь №: 34 595



Цитата(Golikov A. @ Aug 19 2013, 15:01) *
А вы с преобразование Фурье хорошо знакомы?
...
Вообщем в вашей концепции кроме выбора микросхем есть еще куча математических заморочек, считать придется во флотах, а то и даблах, целочисленных вариантов я что-то не припоминаю, ну кроме варианта ооочень больших целых типа бит на 128, которые точнее флота. И счета надо очень много, так что...


А Вы сами хорошо знакомы?

И откуда требования к точности?
Целочисленные(с фиксированной точкой) 32-битные варианты, включая варианты с групповой плавающей точкой, более чем достаточны для подавляющего числа приложений. Во всяком случае, для 64К БПФ с 32-битной групповой плавающей точкой надо ещё поискать тот сигнал, что бы точность вычисления начала сказываться.

Тот, кто не умеет работать с целочисленными вычислениями, или производительность/стоимость не слишком важна, использует флоат. Остальные используют фикс. точку.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 20 2013, 11:53
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(prig @ Aug 20 2013, 12:35) *
А Вы сами хорошо знакомы?

И откуда требования к точности?
Целочисленные(с фиксированной точкой) 32-битные варианты, включая варианты с групповой плавающей точкой, более чем достаточны для подавляющего числа приложений. Во всяком случае, для 64К БПФ с 32-битной групповой плавающей точкой надо ещё поискать тот сигнал, что бы точность вычисления начала сказываться.

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



Я считал в даблах меня ресурсы не жали.
интуитивно казалось что 32 битных не хватит, но если говорите что хватает, ну и хорошо...
Go to the top of the page
 
+Quote Post
uwboy
сообщение Aug 20 2013, 12:02
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 19-08-13
Пользователь №: 77 977



Спасибо, господа, за ваши советы.
Уже прочёл про полифазное БПФ.
Покрутил частотный план всего измерителя. Предел, который достижим при допустимой погрешности следующий:
  • частота дискретизации 32768 Гц (соответственно четверть выборки 8192 отсчёта, целое, 12 или 16 разрядов, плюс полная выборка в 32768 отсчётов);
  • до шести узкополосных составляющих (каждая состоит из несущей и паразитной 10-20% АМ в пределах от 2 до 200 Гц); несущие располагаются случайно в диапазоне от 100 Гц до 16 кГц; разброс мощностей составляющих до 10 дБ (или ±5 дБ).

Требуется определить частоты несущих с точностью до 1 Гц.
Какие есть у вас рекомендации?

Сообщение отредактировал uwboy - Aug 20 2013, 12:05
Go to the top of the page
 
+Quote Post
DASM
сообщение Aug 20 2013, 19:14
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Golikov A. @ Aug 20 2013, 15:53) *
Я считал в даблах меня ресурсы не жали.
интуитивно казалось что 32 битных не хватит, но если говорите что хватает, ну и хорошо...

Вы цену и производительность фиксед пойнт и дабла сравнили?
Go to the top of the page
 
+Quote Post

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

 


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


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