上面的轮廓看起来很重要......来计算给定垃圾箱的大小
mag = 2.0 * math.Sqrt(real*real+imag*imag) / number_of_samples
其中 number_of_samples 是输入 fft 调用的数组长度...执行 fft 的美妙之处在于,您可以对该组(频率、幅度、相移)应用傅立叶逆变换以返回源时域信号...这样做是验证您的流程是否正确的好方法
傅里叶变换和傅里叶逆变换的魔力 - 一个例子:
你从一个浮点数组开始,它表示像音频、股票市场指数或任何时间序列这样摆动的东西……这是时域表示,因为它是曲线上的一组点,其中时间是从左到右的 X 轴上下 Y 轴是曲线的高度...然后您将此数组输入到 fft api 调用中,该调用将在其频域表示中返回相同的信息...与不同的表示形式...在频率域中,您将拥有一个数组,其中元素 0 始终是每秒 0 个周期的频率(直流偏移),然后当您迭代数组时,您可以使用公式递增频率
incr_freq := sample_rate / number_of_samples
因此,在 fft 调用生成的复数数组中,每个元素都是给定频率的数据,其中每个元素只是一个复数...简单来说,这个频域表示只是一组频率,每个频率由一个复数体现数字(A + Bi),可用于计算该频率的幅度和相移
现在是有趣的部分......如果您将此频域数组发送到傅立叶逆变换中,您将返回时域表示形式的原始数据
myAudio_TD(时域)-->发送到fft-->myAudio_FD(频域)
然后你可以自由地做相反的事情,如下所示
myAudio_FD(频率域)-->发送到逆fft-->myAudio_TD(时域)
请注意,在此过程中,您从数组 myAudio_TD 开始,该数组被发送到 fft 调用,然后发送到反向 fft 调用,该调用神奇地返回给您原始的 myAudio_TD
要查看从 fft 调用返回的复杂数组的完整解析,其中包括奈奎斯特极限的概念,请参阅从 FFT 中获取幅度最高的频率 https://stackoverflow.com/questions/55698193/get-frequency-with-highest-amplitude-from-fft/55699449#55699449