Несколько полезных строк на 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 пиков с наибольшей амплитудой. Результат представляет собой словарь комплексных значений соответствующих частот (ключей).