转换为对数梅尔刻度之后,我想在转换后的数据中,提取能量值最大的帧,并在这个帧中分别选取20-40,80-100HZ的区域,分别送入阈值判断
时间: 2024-04-09 20:29:22 浏览: 71
如果你想在转换为对数梅尔刻度后的数据中提取能量值最大的帧,并在该帧中分别选取20-40Hz和80-100Hz的区域进行阈值判断,你可以按照以下步骤进行:
```python
import numpy as np
import librosa
# 假设已经计算得到了对数梅尔刻度谱图数据 log_mel_spec
# 找到能量值最大的帧索引
max_energy_frame = np.argmax(np.max(log_mel_spec, axis=0))
# 定义频率范围
freq = librosa.mel_frequencies(n_mels=log_mel_spec.shape[0])
low_freq_range = np.where((freq >= 20) & (freq <= 40))[0]
high_freq_range = np.where((freq >= 80) & (freq <= 100))[0]
# 在能量值最大的帧中提取对应范围内的能量值
low_freq_energy = log_mel_spec[low_freq_range, max_energy_frame]
high_freq_energy = log_mel_spec[high_freq_range, max_energy_frame]
# 定义阈值
threshold_low = -20 # 低频阈值
threshold_high = -30 # 高频阈值
# 判断是否归类为异常
is_low_freq_abnormal = low_freq_energy < threshold_low
is_high_freq_abnormal = high_freq_energy < threshold_high
# 判断整体是否归类为异常
is_abnormal = np.logical_or(is_low_freq_abnormal, is_high_freq_abnormal)
# 输出异常判断结果
if is_abnormal:
print("该帧被归类为异常")
else:
print("该帧没有被归类为异常")
```
在这个示例代码中,我们首先找到能量值最大的帧索引 `max_energy_frame`,然后定义了20-40Hz和80-100Hz的频率范围。接下来,我们在能量值最大的帧中提取对应范围内的能量值,并定义了低频阈值 `threshold_low` 和高频阈值 `threshold_high`。然后,我们根据阈值判断这些能量值是否低于阈值,并最终得到整体是否归类为异常的判断结果。
请根据你的具体需求和数据进行适当的调整,例如调整阈值、频率范围等。
希望这个示例能满足你的需求!如果还有其他问题,请随时提问。
阅读全文