chromagram.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:Chord-Recognition 作者: orchidas 项目源码 文件源码
def CQT_fast(x,fs,bins,fmin,fmax,M):

    threshold = 0.0054 #for Hamming window
    K = int(bins*np.ceil(np.log2(fmax/fmin)))
    Q = 1/(2**(1/bins)-1)
    nfft = np.int32(nearestPow2(np.ceil(Q*fs/fmin)))
    tempKernel = np.zeros(nfft, dtype = np.complex)
    specKernel = np.zeros(nfft, dtype = np.complex)
    sparKernel = []

    #create sparse Kernel 
    for k in range(K-1,-1,-1):
        fk = (2**(k/bins))*fmin
        N = np.int32(np.round((Q*fs)/fk))
        tempKernel[:N] = hamming(N)/N * np.exp(-2*np.pi*1j*Q*np.arange(N)/N)
        specKernel = fft(tempKernel)
        specKernel[np.where(np.abs(specKernel) <= threshold)] = 0
        if k == K-1:
            sparKernel = specKernel
        else:
            sparKernel = np.vstack((specKernel, sparKernel))

    sparKernel = np.transpose(np.conjugate(sparKernel))/nfft
    ft = fft(x,nfft)
    cqt = np.dot(ft, sparKernel)
    ft = fft(x,nfft*(2**M))
    #calculate harmonic power spectrum
    #harm_pow = HPS(ft,M)
    #cqt = np.dot(harm_pow, sparKernel)
    return cqt
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号