如何使用python FFT工具从真实信号中提取时域幅度?

时间:2014-05-15 19:03:39

标签: python numpy fft

我正在研究一个问题,我想提取并比较每个频率下两个不同信号的时域幅度。信号是真实世界,因此有噪声和多个频率,所以我试图在FFT世界中工作。

我写了一个函数来获取数据集的FFT,然后返回幅度。这似乎对于模拟的纯正弦波是可行的,但是当在实际数据集上执行时,幅度总是减弱一些量。

def amplitudePowerSpectrum(time,data):
    dt = np.zeros(time.size-1,)
    avgdt = np.mean(time[1:-1] - time[0:-2])
    sampFreq = 1.0/(avedt)
    nyquistFreq = sampFreq/2.0  

    FFTData = np.abs(scipy.fftpack.fft(data))   
    ## Only care about positive frequencies
    FFTData = FFTData[0:len(FFTData)/2]
    ## This is how we get the power spectrum in terms of time-domain amplitudes
    amplitudeSpectrum = FFTData/len(FFTData)

    freqsData = scipy.fftpack.fftfreq(data.size, avgdt)
    freq = freqsData[0:len(freqsData)/2]        

    return (freq,amplitudeSpectrum,(sampFreq,nyquistFreq))

这是一个原始数据集的图,后跟一个计算出的振幅谱。如您所见,有两个特别不同的频率,其他噪声在顶部。 Time Domain

Frequency Domain Amplitudes

我希望图2中的幅度与图1中的时域幅度相匹配。但它们会被相当不错的因子衰减。最终目标是每个频率的输入(蓝色)和输出(红色)信号之间的比例因子。

首先,在真实数据集上的Fourrier域中准确地获得时域幅度?如果是这样,我错过了什么?我正在使用python numpy和scipy包

0 个答案:

没有答案