问题描述
audio_sample,sampling_rate = librosa.load('a.wav',sr=None)
S = np.abs(librosa.stft(audio_sample,n_fft=1024,hop_length=512,win_length=1024,window=signal.hann))
mag_db = librosa.amplitude_to_db(S)
mag_n = _normalize(mag_db)
librosa.display.specshow(mag_n,y_axis='linear',x_axis='time',sr=sampling_rate)
我做了一些 stft ,然后做了 spechow 。但是我想找到波浪不连续的时间点。
示例)我想知道波形文件的不连续点
解决方法
您只需要使用导数来查找波动中的不连续性。要获取波的导数,可以将 convolution 与滤波器一起使用。 这是示例代码:
import numpy as np
import matplotlib.pyplot as plt
# generating the wave
angle1 = np.linspace(0,5*np.pi/2,100)
wave1 = np.sin(angle1)
angle2 = np.linspace(0,3*np.pi/2)
wave2 = np.sin(angle2)
angle3 = np.linspace(np.pi/2,2*np.pi)
wave3 = np.sin(angle3)
wave = np.append(wave1,wave2)
wave = np.append(wave,wave3)
# differentiation
filter = [-1,1]
dif = np.convolve(wave,filter)
absdif = np.abs(dif)
print('discontinuity at:',np.where(absdif > 0.75)[0])
plt.subplot(3,1,1)
plt.plot(wave,label='input wave')
plt.subplot(3,2)
plt.plot(dif,label='dirivative')
plt.subplot(3,3)
plt.plot(absdif,label='absolut of derivative')
plt.show()