cyber_genius
@cyber_genius

FFT. Как найти основные гормоники сигнала?

Нужен совет или алгоритм по нахождению основных гормоник сигнала. Для примера есть спектр сигнала (см. рисунок), "на глаз" видно какие присутствуют основные гормоники в сигнале, но вот как сделать так чтобы выявить программно. Другими словами нужно получить точно такой же буффер, в котором будут только гормоники 20Hz и в каких местах буффера (512байт).
8621554b8532479e8c9c3d27dda1b1a3.jpg
  • Вопрос задан
  • 2882 просмотра
Решения вопроса 1
Lerg
@Lerg
Defold, Corona, Lua, GameDev
Гуглить peak detection algorithm.
В общем случае нужно пропустить данные через сглаживающий фильтр, скорректировать рядом стоящие пики, выделить основную гармонику и с её помощью произвести поиск более высоких и слабых гармоник.

www.biomedcentral.com/1471-2105/10/4
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Makeman
Несколько полезных строк на C#
// Complex[] fftResultComplexFrame
var y = 0;
var dic = fftResultComplexFrame.ToDictionary(c => y++, c => c);
var tops = dic.OrderByDescending(p => p.Value.Magnitude).Take(20).ToList();

На входе массив комплексных значений, полученных путём прямого преобразования Фурье.
Из него выделяем 20 пиков с наибольшей амплитудой. Результат представляет собой словарь комплексных значений соответствующих частот (ключей).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы