【问题标题】:Extracting Peaks From Signal Spectogram从信号频谱图中提取峰值
【发布时间】:2018-05-26 00:32:08
【问题描述】:

我正在处理一个音频文件,以从 audio.wav 文件中绘制一个频谱图。我浏览了 scipy 文档上的代码。

from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
fs = 10e3
N = 1e5
amp = 2 * np.sqrt(2)
noise_power = 0.01 * fs / 2
time = np.arange(N) / float(fs)
mod = 500*np.cos(2*np.pi*0.25*time)
carrier = amp * np.sin(2*np.pi*3e3*time + mod)
noise = np.random.normal(scale=np.sqrt(noise_po wer), size=time.shape)
noise *= np.exp(-time/5)
x = carrier + noise
f, t, Sxx = signal.spectrogram(x, fs)
plt.pcolormesh(t, f, Sxx)
plt.ylabel('Frequency [Hz]')
plt.xlabel('Time [sec]')
plt.show()

现在情节看起来有点像这样。 plot1

现在这个图是频率与时间的关系。我想在峰值(或最大值)处提取 y 值。有什么办法可以做到吗?

请记住,这个情节是基于我们手动创建的函数。如果是音频文件,一切都会被随机化。

【问题讨论】:

    标签: python matplotlib audio scipy signal-processing


    【解决方案1】:

    最大信号的频率可以通过

    找到
    f[np.argmax(Sxx, axis=0)]
    

    你可以把它画成

    m = np.argmax(Sxx, axis=0)
    plt.plot(t,f[m], color="crimson")
    

    【讨论】:

    • peterjbentley.com/heartchallenge/spectrograms1.jpg 帮我多做一点 如果你看上面的图,我需要确定最大峰值。我查看了 f[m] 值,您能解释一下这些值究竟是什么以及如何获得频率与时间图中的单个最高点吗?
    • f[m] 是最大信号的频率。例如。在t[i] 时,信号在f[m][i] 的频率处最大。我不知道你链接到的情节是什么,所以我不明白它的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多