找到单个波形android FFT之间的时间

时间:2014-04-26 06:26:02

标签: android time fft

我必须找出波形之间的时间。我该怎么找到?我正在使用FFT。我搜索了很多但没有得到足够的答案。 我有输入数组, 例如:

float[] array = { 1, 6, 1, 4, 5, 0, 8, 6, 6, 6, 1, 0, 5, 6, 1, 8, 3, 0};  
Using FFT, I am getting Spectrum, real part, and Imaginary part.
Based on this find out, Phases and Magnitude.
    mag[i] = Math.sqrt((real[i] * real[i]) + (imag[i] * imag[i]));
    phase[i] = Math.atan2(imag[i], real[i]);

我必须找到输入在图表中不断显示的时间(ms)。我附上了样本图片。 那么互相关呢? (http://en.wikipedia.org/wiki/Cross_correlation)。请澄清我。可能是我走错了路。

http://i58.tinypic.com/v3kuwg.pnghttp://i61.tinypic.com/izx66f.gif

2 个答案:

答案 0 :(得分:1)

根据您提供的图像作为参考,我将假设您要查找上面代码中提供的时域数据阵列中固有的基本频率周期,其中18个样本的数组是: [1,6,1,4,5,0,8,6,6,6,1,0,5,6,1,8,3,0]

但是,您没有提供时域数据的采样率,因此在下面的分析中,我假设采样率为10 KHz。您必须调整答案以适合您的实际采样率(也称为采样频率。)

这是图形形式的原始时域数据,删除了数据的DC偏移量(3.7222)。该时间序列是FFT的输入。请注意FFT自动添加的尾随零,以便输入长度为2的幂(在这种情况下总共32个样本):

Time-domain input data for the FFT, Sooeet.com FFT calculator

从FFT获得的数据的频谱如下:

FFT spectrum of time-domain data, Sooeet.com FFT calculator

最大能量的频率峰值出现在3438 Hz,相当于1/3438或0.291毫秒的周期。

但是,由于您的数据在采样间隔内是非周期性的,因此您应该在使用FFT处理数据之前对数据进行窗口化处理。在这种情况下需要窗口化以最小化FFT中的频谱泄漏误差。在从原始数据中删除DC偏移(3.7222)后,我将Blackman-Harris 92-dB窗口应用于数据:

Time-domain input data for the FFT, Blackman-Harris 92-dB window, Sooeet.com FFT calculator

在运行FFT之前将Blackman-Harris 92-dB窗口应用于数据后,这是数据的频谱:

FFT spectrum of time-domain data, Blackman-Harris 92-dB window, Sooeet.com FFT calculator

窗口化后,最大能量的频率峰值出现在3125 Hz,相当于1/3125或0.320毫秒的周期。

同样,您需要针对用于生成原始数据的实际采样频率调整这些结果。例如,如果您的实际采样频率为44.1 KHz,则上面的第一个峰值出现在(44.1 / 10)* 3438或15162 Hz,相应的周期为1/15162或0.066毫秒。

使用Sooeet FFT calculator.

完成FFT,窗口和图形

答案 1 :(得分:0)

很难知道你究竟在这里问什么。你在时域中有原始的实际输入信号,然后取fft你将得到一组复数值(实数和虚数),你也可以从中获得幅度和相位。

您的问题是每个输入样本之间的ms时间是多少?这完全取决于采样率。如果是音频,您可能会在Android上以44100 Hz(样本/秒)进行录制,这将导致每个样本之间的1/44100或0.022 ms。

但是,当您在频域中绘制幅度或相位时,即可。对于那些图,您需要一组频率,而不是时间值。那些频率值取决于fft的大小和输入信号的采样率。例如:https://electronics.stackexchange.com/questions/12407/what-is-the-relation-between-fft-length-and-frequency-resolution