试图了解用于开始检测的频率估计代码

问题描述

我试图了解下面的代码到底能做什么,但这并不容易。
它的最终目标是通过获取np.diff(ifr)来检测信号中的起始点。
但是,我无法确切了解最后一行的内容(#frequency估算)。

import numpy as np

audio,sr = librosa.load(audio_path,sr=None)

M = 1024
hopsize = int(M/16)
hopfac = int(M/hopsize)
nfft = M
overlap = nfft*(1-1/hopfac)
win = np.ones(nfft)

_,_,X = signal.stft(audio,fs=sr,window=win,nperseg=M,noverlap = overlap)

# FFT bins
k = np.arange(nfft/2 + 1)

ifr = np.zeros(np.shape(X))
T = np.zeros(np.shape(X)[1])

for i in range(0,np.shape(X)[1]):
# one instance of the spectrum
Xk = X[:,i]
Xkplus1 = np.append(Xk[1:],0.000001)
Xkminus1 = np.append(0.00001,Xk[0:-1])

# frequency estimation (hop one trick)
ifr[:,i] = np.multiply(sr,np.subtract(np.divide(k,nfft),np.imag(np.multiply(1j/nfft,np.divide(np.subtract(Xkplus1,Xkminus1),np.add(np.subtract(np.subtract(np.multiply(Xk,2),Xkplus1),2*0.000001))))))

特别是(Xkplus1-Xkminus1)/(2Xk-Xkplus1-Xkminus1)对我来说没有意义。
有人可以向我解释吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)