Python:在Python中从wav文件计算随时间变化的频率吗?

时间:2019-02-22 20:10:33

标签: python python-3.x audio scipy frequency

我正在使用scipy的wavfile库读取wavfile。

rate, data = scipy.io.wavfile.read(filename)

这将返回给定的wav文件名的速率和RAW数据。

要从RAW数据转换为频率,我需要对数据阵列进行哪些转换?

我了解FFT用于频域,但我想转到时域。

感谢您的帮助! :)

1 个答案:

答案 0 :(得分:2)

这将为您提供给定信号的平均频率:

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。如果您想获得音频块的频率,只需将阵列分成几部分,然后分别将其传递给函数即可。