我正在使用 scipy 的 wavfile 库来读取 wavfile。
rate, data = scipy.io.wavfile.read(filename)
这将返回给定 wav 文件名的速率和 RAW 数据。
要从 RAW 数据到频率,我需要对数据数组进行什么转换?
我知道 FFT 是用来去频域的,但我想去时域。
感谢任何帮助! :)
最佳答案
这将为您提供给定信号的平均频率:
def spectral_statistics(y: np.ndarray, fs: int) -> float:
"""
Compute mean frequency
:param y: 1-d signal
:param fs: sampling frequency [Hz]
:return: mean frequency
"""
spec = np.abs(np.fft.rfft(y))
freq = np.fft.rfftfreq(len(y), d=1/fs)
amp = spec / spec.sum()
mean = (freq * amp).sum()
return mean
正如您所说,您可以使用scipy
读取wave。如果您想获取音频 block 的频率,只需将您的数组拆分成多个部分并将每个部分分别传递给函数。
关于Python:从 Python 中的 wav 文件计算随时间变化的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54834469/