python - 峰值频率python的时间戳
问题描述
我已经使用此代码如何在 python 中提取与 fft 值相关的频率,并添加了一个 firwin 滤波器来检测短高频信号。信号长 1 秒,随机出现在 x 秒的 wav 音频文件中。我的代码如下所示:
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('SoundPeep.wav')
#print(frate)
b = signal.firwin(101, cutoff=900, fs= frate, pass_zero=False)
data = signal.lfilter(b, [1.0], data)
w = np.fft.fft(data)
freqs = np.fft.fftfreq(len(w))
#print(len(w)/frate)
#print(w.min(), w.max())
# (-0.5, 0.499975)
# Find the peak in the coefficients
idx = np.argmax(np.abs(w))
winner = np.argwhere(np.abs(w) == np.amax(np.abs(w)))
freq = freqs[idx]
freq_in_hertz = abs(freq * frate)
print("HZ")
print(freq_in_hertz)
occurence = idx/frate
print(occurence)
该代码在检测 HZ 峰值频率方面效果很好。我的问题是我想计算音频文件中高频信号的开始位置。我认为可以简单地通过将索引(idx)除以录制的帧速率来完成,但这似乎不起作用。
解决方案
您可以使用短时傅立叶变换制作声波图,以查看频率如何随时间变化。stft 返回 3 个值:时间戳、幅度和频率。如果幅度不相关,您可以从那里使用峰值检测。
推荐阅读
- reactjs - 尝试使用 Github Actions 工作流将 React App 部署到 Azure,但在 TypeScript 中出现错误
- node.js - NodeJS 在 Windows 10 上快速获取挂起请求
- java - 我们可以从java中删除不需要的分隔符吗
- kubernetes - CSI sidecar 的最低权限
- c# - 在特定位置实例化对象
- sql-server - 在没有数据库身份的情况下生成迁移
- curl - 在 JFrog Artifactory 中检查文件是否存在的 cURL 命令
- css - 如何防止 svg 将内容推到顶部?
- flutter - 从 PraseQuery 颤振中检索特定数据
- java - java.lang.NoClassDefFoundError问题如何解决项目中的hibernate问题?