如何在python中找到wav文件的峰值频率?

时间:2019-07-17 00:29:20

标签: python-3.x

我对python和信号处理还很陌生,我被赋予一项任务来录制音频“ x”秒,然后在音频文件中找到峰值频率。

到目前为止,我已经成功实现了录音部分(以.wav文件形式记录,采样率= 96kHz),但是我无法在该文件中正确找到并输出峰值频率。

此任务的目标是,如果找到高于某个阈值的频率,则将执行其他操作。谁能帮助我找到峰值频率。

到目前为止,我已经尝试使用scipy fft软件包和一些来自研究的代码来进行尝试。

    from scipy import signal
    from scipy.io import wavfile
    from scipy.fftpack import fft, ifft,fftfreq
    import matplotlib.pyplot as plt
    import wave 
    import numpy as np
    import sys
    import struct

    frate,data = wavfile.read('output.wav')
    print(frate)

    w = np.fft.fft(data)
    freqs = np.fft.fftfreq(len(w))

    # Find the peak in the coefficients
    idx = np.argmax(np.abs(w))
    print(idx)
    freq = freqs[idx]
    freq_in_hertz = abs(freq * frate)

    print(freq_in_hertz)
    print("HZ")

录制音频时,上面的代码有时可以工作,但是会检测到不正确的峰值频率(例如,我录制的东西的频率为10kHz,但它表示检测到的峰值频率为6kHz)

其他时候,当我录制音频并尝试找到峰值频率时,出现以下错误消息: 发生异常:IndexError 索引547388超出轴0的范围,大小为480000   文件“ C:\ Users \ aviso \ Documents \ VS Code Projects \ FinalDesign \ HighFreqTest.py”,第22行,在     freq = freqs [idx]

0 个答案:

没有答案