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

标签 python python-3.x audio scipy frequency

我正在使用 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/

相关文章:

python - 为什么这会给我无限循环?

python - 循环多个值的多个生成器

iphone - 如何转换WAV音频文件以播放Core Audio?

python - 我可以在 Python 列表推导中为表达式取别名以防止它们被多次评估吗?

python - 使用 python socketserver 如何将变量传递给处理程序类的构造函数

python - 如何在 twisted.web(或 twisted.web2)中添加钩子(Hook)?

python - 记录器创建多个文件

python - 使用两个嵌套 for 循环打印两个列表的公共(public)元素

actionscript-3 - 为什么不播放此嵌入式声音文件?

javascript - "useRefs"变量是 div 引用的初始值?