擅长:python、mysql、java
<p>我也遇到了类似的问题,因此我重用了您的代码的一部分,并通过对同一帧执行连续的求值,然后从</p>
<p>我得到了一致的结果。</p>
<pre><code>def fondamentals(frames0, samplerate):
mid = 16
sample = mid*2+1
res = []
for first in xrange(sample):
last = first-sample
frames = frames0[first:last]
res.append(_fondamentals(frames, samplerate))
res = sorted(res)
return res[mid] # We use the medium value
def _fondamentals(frames, samplerate):
frames2=frames*hamming(len(frames));
frameSize=len(frames);
ceps=ifft(np.log(np.abs(fft(frames2))))
nceps=ceps.shape[-1]*2/3
peaks = []
k=3
while(k < nceps - 1):
y1 = (ceps[k - 1])
y2 = (ceps[k])
y3 = (ceps[k + 1])
if (y2 > y1 and y2 >= y3): peaks.append([float(samplerate)/(k+2),abs(y2), k, nceps])
k=k+1
maxi=max(peaks, key=lambda x: x[1])
return maxi[0]
</code></pre>