def kayufft_db(signal, rate):
""" Perform FFT for wood's longitudinal stress wave signal
Inputs:
Acoustic signal in time domain and the sampling rate
Returns:
Signal in ferquency domain with unit in dB
"""
signal_length = len(signal)
fft_result = fft(signal)
uniq_points = int(ceil((signal_length + 1) / 2.0)) #only takes one side of FFT result
fft_result = fft_result[0:uniq_points]
fft_result = abs(fft_result)
fft_result = fft_result / float(signal_length)
fft_result = fft_result**2
if signal_length % 2 > 0:
fft_result[1:len(fft_result)] = fft_result[1:len(fft_result)] * 2
else:
fft_result[1:len(fft_result) - 1] = fft_result[1:len(fft_result) - 1] * 2
fft_abscissa = arange(0, uniq_points, 1.0) * (rate / signal_length)
fft_ordinate = 10 * log10(fft_result)
return fft_ordinate, fft_abscissa
评论列表
文章目录