FFT中的振幅单位

问题描述 投票:0回答:1

我对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

python python-3.x matplotlib scipy fft
1个回答
2
投票

它们是相对于你的输入信号中的样本所使用的量化单位的振幅。 所以,如果没有根据已知的源输入电平来校准你的输入信号(以获得每1位变化的伏特等),实际单位是未知的。 如果经过校准,您可能仍然需要将FFT输出的幅度除以N(FFT长度),这取决于您特定的FFT实现。

要获得分贝,请通过取FFT结果的20*log10(abs(...))进行转换,并偏移0dB校准级别。

© www.soinside.com 2019 - 2024. All rights reserved.