【问题标题】:find wave discontinuity by using fourier transform( wav file's tick noise)通过使用傅立叶变换(wav 文件的滴答噪声)找到波不连续性
【发布时间】:2020-08-26 03:08:53
【问题描述】:
    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)

我做了一些 stftspechow。但我想找到波不连续的点(时间)。

例子)我想知道波形文件的不连续点

我的意思是这样

【问题讨论】:

    标签: python python-3.x fft wave


    【解决方案1】:

    您只需要使用导数来找出波浪中的不连续性。为了得到波的导数,我们可以使用带有过滤器的卷积。 这是一个示例代码:

    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()
    

    输出图:

    【讨论】:

    • 你能给我更多的指导吗?我试过了,但我得到了这些错误
    • dif = np.convolve('a.wav', filter) 文件“<__array_function__ internals>”,第 6 行,卷入文件“C:\Users\user\AppData\Local\Programs\ Python\Python36\lib\site-packages\numpy\core\numeric.py",第 817 行,在卷积中 return multiarray.correlate(a, v[::-1], mode) ValueError: data type must provide an itemsize
    • 您直接将文件传递给卷积,因此它给出了错误。首先读取 .wav 文件,然后转换为 numpy 数组,然后使用 convolve 函数求导
    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 1970-01-01
    • 2019-07-02
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多