Народ, ну не все в физтехах учились, объясните по-человечески плиз...
Суть в чём - стало мне интересно как работают индикаторы спектра во всяких плеерах. Ну я догадывался что из формы волны как-то вытаскиваются частоты, но вот как... Захотелось понять и сделать такое же с нуля.
Нашёл что это называется БПФ. Увидел там всем известную формулу. Решил что e в этой формуле это число Эйлера и расписал формулу в виде программы. Прогнал через эту процедуру массив с точками синусоиды. Рассчитывал получить на выходе массив со всеми нулями и не-нулём в одном элементе, получил совсем другое... Что я не так делаю и как надо делать?
Число взяли не то. Разложение по спектру, а в данном случае по синусоидам это и есть преобразование Фурье. Грубо говоря это разложение вектора (т.е. гармоники) в пространстве гладких функций на базисные вектора (синусоиды). Коэффициентами разложения обычно является скалярное произведение. В данном случае скалярное произведение это интеграл (или сумма в дискретном случае). А по-скольку канал дискретный, то и преобразование делается дискретное.
Объяснение несколько грубова-то, но суть отражает.
Всё правильно. Видимо, период синусоиды не соизмерим с длиной отрезка, на котором она задана, так что функция терпит разрыв на концах отрезка (вместе со своими производными, разумеется). При преобразовании Фурье разрывная функция даёт бяки в спектре вида 1/x^{a+1}, где a - первая производная, терпящая разрыв. ЧТобы с такими явлениями бороться, обычно перемножают сигнал со сглаживающй "шляпой" (типа окна Хамминга), чтобы сигнал и первые его производные обратились в нуль на конце отрезка. Ну, а потом берут FFT. Спектр несколько уширяется (поскольку он свёртывается с фурье-образом "шляпы"), но не существенно. В случае чистой синусоиды спектр размажется где-то на 2-3 точки.
Ну, и если вопрос касается, как именно работают индикаторы спектра в плеерах, то именно так и работают. Только отрезки, которые преобразуются по фурье, берутся с половинным перекрытием, так что после перемножения с окном, сумма сигналов двух соседних отрезков в области перекрытия равна в точности исходному сигналу. А потом с полученным набором спектров можно уже делать, что угодно. Например, накладывать их друг на друга с экспоненциальным fading-ом или как-то усреднять.