Ваш план выше смотрит на точку ..., чтобы вычислить величину для данной корзины
mag = 2.0 * math.Sqrt(real*real+imag*imag) / number_of_samples
где number_of_samples - длина массива, переданного в вызов fft ... прекрасный аспект выполнения fft заключается в том, что вы можете затем применить обратное преобразование Фурье к этому набору (частота, величина, фазовый сдвиг), чтобы вернуть свой источник сигнал во временной области ... это хороший способ проверить правильность вашего процесса
Магия преобразования Фурье и обратное преобразование Фурье - пример:
вы начинаете с массива с плавающей запятой, который представляет что-то, что колеблется, например, звук, индекс фондового рынка или любой временной ряд ... это представление во временной области, поскольку это набор точек на кривой, где время остается слева от вас. правая ось X и верхняя и нижняя оси Y - это высота кривой ... затем вы передаете этот массив в вызов API FFT, который вернет вам ту же информацию в своем представлении в частотной области ... это та же информация просто в другом представлении ... в домене freq у вас будет массив, в котором элемент 0 всегда имеет частоту 0 циклов в секунду (смещение постоянного тока), а затем, когда вы выполняете итерацию по всему массиву, вы увеличиваете freq по формуле
incr_freq := sample_rate / number_of_samples
так что в комплексном массиве, сгенерированном вызовом fft, каждый элемент является данными для данной частоты, где каждый элемент является просто комплексным числом ... проще говоря, это представление домена freq является просто набором частот, каждый воплощенный freq комплексным числом (A + Bi), которое можно использовать для вычисления величины этой частоты и сдвига фазы
теперь интересная часть ... если вы отправите этот массив домена freq в обратное преобразование Фурье, вы вернете свои исходные данные, которые находятся во временном представлении
myAudio_TD (временной домен) -> отправить в fft -> myAudio_FD (freq domain)
тогда позже вы можете сделать обратное, как в
myAudio_FD (домен freq) -> отправить в обратный fft -> myAudio_TD (домен времени)
обратите внимание, что в этой последовательности вы начали с массива myAudio_TD, который был отправлен в вызов fft, а затем в обратный вызов fft, который волшебным образом возвращает вам ваш исходный myAudio_TD
чтобы увидеть полный анализ сложного массива, возвращенного из вызова fft, который включает в себя понятие Nyquist Limit, см. Получить частоту с наибольшей амплитудой из FFT