【发布时间】:2020-08-25 03:18:59
【问题描述】:
我对 python、scipy、matplotlib 和一般编程完全陌生。 我正在使用我在网上遇到的以下代码将 FFT 应用于 .wav 文件:
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 到几千,具体取决于文件,我不知道这些是什么单位。我猜它们可能是相对幅度,我想知道是否有是一种将其转换为分贝的方法,因为我需要特定的值。
谢谢
唐吉
【问题讨论】:
-
单位与输入信号的单位相同。但是,分贝是一个相对单位,我不确定您所说的“特定值”是什么意思。
-
感谢您的评论。本质上,然后我需要在仅采用 db 幅度值的软件中重新使用从这些图表中获得的读数。所以我需要特定的分贝读数,最大声部分为 0db,然后相对于此。我不知道输入信号单元是什么
-
你只需要用这样的东西进行标准化吗?
FFT /= np.max(FFT)
标签: python python-3.x matplotlib scipy fft