使用傅立叶变换(wav 文件的滴答声)找到波的不连续性

find wave discontinuity by using fourier transform( wav file's tick noise)

    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, 1, 2)
plt.plot(dif, label='dirivative')
plt.subplot(3, 1, 3)
plt.plot(absdif, label='absolut of derivative')

plt.show()

输出图: