我对python、scipy、matplotlib和一般的编程是完全陌生的。我正在使用我在网上看到的以下代码,对.wav文件应用FFT。
import scipy.io.wavfile as wavfile
import scipy
import scipy.fftpack as fftpk
import numpy as np
from matplotlib import pyplot as plt
s_rate, signal = wavfile.read("file.wav")
FFT = abs(scipy.fft.fft(signal))
freqs = fftpk.fftfreq(len(FFT), (1.0/s_rate))
plt.plot(freqs[range(len(FFT)//2)], FFT[range(len(FFT)//2)])
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
所得到的图表给出的振幅值从0到几千不等,取决于文件,我不知道这些振幅值的单位是什么。我猜测它们可能是相对振幅,我想知道是否有办法将其转化为分贝,因为我需要具体的数值。
谢谢你的帮助
Tanguy
它们是相对于你的输入信号中的样本所使用的量化单位的振幅。 所以,如果没有根据已知的源输入电平来校准你的输入信号(以获得每1位变化的伏特等),实际单位是未知的。 如果经过校准,您可能仍然需要将FFT输出的幅度除以N(FFT长度),这取决于您特定的FFT实现。
要获得分贝,请通过取FFT结果的20*log10(abs(...))进行转换,并偏移0dB校准级别。