|
Оптимизация дискретного преобразования Фурье, Как уменьшить время вычисления ДПФ? |
|
|
|
Sep 26 2016, 11:25
|
Группа: Участник
Сообщений: 5
Регистрация: 28-11-15
Пользователь №: 89 496

|
Всем доброго времени суток! Для реализации распознавания отдельных слов потребовалось вычисление дискретного преобразования Фурье. Быстрое преобразование применить нельзя, поскольку число отсчётов не является степенью двойки (в противном случае ухудшаются результаты работы основного алгоритма). Восстановление сигнала после преобразования не требуется, всё, что нужно от ДПФ - амплитуда и частота. Сейчас вычисляю ДПФ формулами по определению (формулы ниже, плюс ещё вычисление амплитуды). При обработке одного слова требуется выполнить 30 преобразований Фурье. Число отсчётов лежит в пределах 200 - 500 (конкретное значение заранее неизвестно), но одинаковое для всех тридцати преобразований.  В результате при реализации такого алгоритма на stm32f417 при частоте 168 МГц и арифметике с 32-битными float эти 30 преобразований (анализ одного произнесённого слова) вычисляются четыре-пять секунд, что составляет большую часть времени всех вычислений (80%). Для вычисления коэффициентов ДПФ и квадратных корней использую функции DSP-ядра этого микроконтроллера (синус, косинус, квадратный корень). И большую часть времени (68%) занимает как раз вычисление этих самых коэффициентов. Как ещё можно ускорить вычисление ДПФ?
|
|
|
|
|
 |
Ответов
|
Sep 28 2016, 08:01
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Olegas @ Sep 26 2016, 11:25)  Для вычисления коэффициентов ДПФ и квадратных корней использую функции DSP-ядра этого микроконтроллера (синус, косинус, квадратный корень). И большую часть времени (68%) занимает как раз вычисление этих самых коэффициентов. Как ещё можно ускорить вычисление ДПФ? Ну так, заранее вычислите эти коэффициенты и разместите их в таблице. У меня на 100 МГц ДСП двойной МАК для преобразования Фурье вычисляется за 10 нс. Т.о., для 200-500 точек время счёта Re/Im одной палки составит порядка 2-5 мкс. Для 30 частот время счета составит 60-150 мкс. Но это прикид для 100 МГц тактовой, а у вас 168 МГц тактовая, так что о каких секундах может идти речь?
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Sep 28 2016, 17:13
|
Группа: Участник
Сообщений: 5
Регистрация: 28-11-15
Пользователь №: 89 496

|
Цитата(=GM= @ Sep 28 2016, 11:01)  Ну так, заранее вычислите эти коэффициенты и разместите их в таблице. Я, наверное, неоптимально представляю, но для N отсчётов ДПФ требуется матрица размером N^2. Взяв по максимуму N=500 получим: 4*N^2=4*500^2/1024=976 КБ. Многовато.
|
|
|
|
|
Sep 30 2016, 06:52
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Olegas @ Sep 28 2016, 16:13)  Я, наверное, неоптимально представляю, но для N отсчётов ДПФ требуется матрица размером N^2. Взяв по максимуму N=500 получим: 4*N^2=4*500^2/1024=976 КБ Ну прямо в лоб-то считать не надо. Ваша таблица по рядам (и по столбцам) будет многократно повторяться. Лучше составьте таблицу одного периода синуса на N=500 точек (для двоичного ЦПУ практичнее брать число N степени двойки, например N=512). Для первой палки считаете МАКи, беря синусы: 0,1,2,..,499 (всего 500), для второй палки берете каждый второй: 0,2,4,..,498,0,2,4,..,498 (всего 500). Для третьей палки берете каждый третий:0,3,6,.. (всего 500) и так далее. Ну и не надо считать компоненты спектра (пресловутые "палки") выше частоты Найквиста, поскольку амплитудный спектр симметричен.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
Сообщений в этой теме
Olegas Оптимизация дискретного преобразования Фурье Sep 26 2016, 11:25 ViKo Например, увеличить в 4 раза частоту выборок, и де... Sep 26 2016, 11:32 andyp Цитата(Olegas @ Sep 26 2016, 14:25) В рез... Sep 26 2016, 11:34 _pv FFT требует ~100 тактов на отсчёт, соответственно ... Sep 26 2016, 13:49 Olegas Дело в том, что для распознавания необходим весь с... Sep 27 2016, 06:29 Александр77 Глядя на первый график (на котором представлены сп... Sep 27 2016, 06:42 _pv интерполировать надо нормально. от линейной интерп... Sep 27 2016, 06:50 Olegas То, что частоты сдвинуты - не страшно. Гораздо хуж... Sep 27 2016, 07:24 Александр77 Цитата(Olegas @ Sep 27 2016, 10:24) То, ч... Sep 27 2016, 12:02  Olegas Цитата(Александр77 @ Sep 27 2016, 15:02) ... Sep 27 2016, 19:35 ViKo Так вы не интерполируйте свой файл, тем более, лин... Sep 27 2016, 07:33 _pv этот файл "1.wav" сюда прикрепите Sep 27 2016, 07:56 x893 Когда то для ускорения использовали только uint16 ... Sep 27 2016, 12:25 _pv Цитата(x893 @ Sep 27 2016, 18:25) Когда т... Sep 27 2016, 12:55 _pv ЦитатаЭто хорошая идея, если коэффициент нормировк... Sep 28 2016, 09:31 _pv 1) считайте ДПФ Герцелем - пример в предыдущем пос... Sep 28 2016, 17:46 анатолий Для обработки речи что ДПФ, что БПФ - всё едино, т... Oct 5 2016, 15:34
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|