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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Оптимизация дискретного преобразования Фурье, Как уменьшить время вычисления ДПФ?
_pv
сообщение Sep 28 2016, 09:31
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата
Это хорошая идея, если коэффициент нормировки будет константой для всех вариантов. Ну или хотя бы зависеть только от исходного числа отсчётов (которое не есть степень двойки) и желаемого (степень двойки, например 512).

если буфер добить нулями и сделать FFT то при правильной нормировке (Sqrt[512/348]) разницы нет и быть собственно не должно.
небольшая разница есть только из-за того что точек всё-таки не сильно много, и сетки частот разные.
 Уменьшено до 87%
Прикрепленное изображение
1334 x 1036 (109.72 килобайт)

зелёный график - ДФТ посчитанное Герцелем с шагом 1Гц. синий(348 точек) и желтый (512 точек = 348 + нули) график просто берут из него точки по разным сеткам частоты 8000/348 = 23Гц и 8000/512 = 15.6Гц соответственно

но если ваши алгоритмы распознавания чувствительны к такой разнице, то думаю можно сразу закапывать.
Go to the top of the page
 
+Quote Post
Olegas
сообщение Sep 28 2016, 17:13
Сообщение #17





Группа: Участник
Сообщений: 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 КБ. Многовато.
Go to the top of the page
 
+Quote Post
_pv
сообщение Sep 28 2016, 17:46
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



1) считайте ДПФ Герцелем - пример в предыдущем посте на картинке. там только один косинус для каждой частоты считать надо. и можно и без таблицы.
2) делайте FFT.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Sep 30 2016, 06:52
Сообщение #19


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) и так далее.

Ну и не надо считать компоненты спектра (пресловутые "палки") выше частоты Найквиста, поскольку амплитудный спектр симметричен.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
анатолий
сообщение Oct 5 2016, 15:34
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 10-12-05
Из: Украина
Пользователь №: 12 052



Для обработки речи что ДПФ, что БПФ - всё едино, т.к. любой микропроцессор успевает.
Например, в телефонном вокодере по 200 выборкам делают автокорреляцию,
по автокорреляции строят АР-фильтр, через фильтр пропускают синусоиды разной частоты,
выбирают синусоиды, на которые фильтр хорошо окликается
и делают интерполяцию частоты речевого сигнала.
На все это и многое другое типа вычисление периода основного тона, подбор сигнала возбуждения
тратится всего 20 млн.оп./с.
Go to the top of the page
 
+Quote Post

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

 


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


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