我对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]