我已经了解了安卓视觉器的
onFftDataCapture((Visualizer visualizer,
byte[] fft,
int samplingRate)我如何知道哪个频率由fft中的哪个fft表示
例如,索引是否是频率的表示?就像index = frequency
对于指数0,频率为0 Hz,指数1为1Hz,等等?
发布于 2017-09-13 15:58:25
FFT产生复数,其中每个数字反映包含连续范围频率的桶的频域信息。解释FFT数据的通常方法如下:
bucketSize;i (假设它的基础是0)包含信息的频率范围从i * bucketSize到(i + 1) * bucketSize赫兹;samplingRate / 2以上的频率桶)的值将仅仅是前半部分的镜像,因此它们通常被丢弃;0)和最后一个(索引samplingRate / 2)桶,FFT表的值也是实的(假设是实值信号);a + ib,并计算sqrt(a*a + b*b)。现在回到onFftDataCapture的结果。这里,fft数组包含复数作为连续的字节对,除了前两个元素,所以fft[2]和fft[3]包含第一个桶、fft[4]和fft[5] --第二个元素的复数,等等。而fft[0]是0阶频率(DC)的FFT值(实),而fft[1]是最后一次频率。
因为,正如我前面提到的,对于实值信号,FFT表的第二部分并没有带来任何好处,所以是而不是fft数组中提供的。但是,由于每个快速傅立叶变换桶采用两个阵列单元,所以以赫兹为单位的桶大小仍将被计算为fft.length / samplingRate。注意,fft.length实际上是可视化器的setCaptureSize方法设置的捕获大小。
使用Math.hypot函数可以很容易地计算频率桶的大小,例如,对于第一个桶,它是Math.hypot(fft[2], fft[3])。对于DC桶,它只是Math.abs(fft[0]),对于最后一个频率桶,它是Math.abs(fft[1])。
https://stackoverflow.com/questions/46185101
复制相似问题