擅长:python、mysql、java
<p>问题不在于你使用全局变量本身。问题是当您在<code>mfcc()</code>中调用<code>abs()</code>时,<code>nmax</code>尚未定义,因为直到稍后在函数中调用<code>melFilterBank()</code>时才会发生这种情况。将<code>nmax</code>的定义移到<code>mfcc()</code>的开头:</p>
<pre><code>def mfcc(signal,nfft,fs,nceps):
global nmax
nmax = nfft/2
p = 0.97
signal = preEmphasis(signal,p)
hammingWindow = np.hamming(len(signal))
signal = signal * hammingWindow
spec = np.abs(np.fft.fft(signal,nfft))[:nmax]
fscale =np.fft.fftfreq(nfft,d=1.0/fs)[:nmax]
numChannels = 20
df = fs/nfft
filterbank,fcenters = melFilterBank(fs,nfft,numChannels)
mspec = np.log10(np.dot(spec,filterbank.T))
ceps = scipy.fftpack.realtransforms.dct(mspec,type=2,norm="ortho",axis=-1)
return ceps[:nceps]
</code></pre>
<p>但是,在当前代码中,我不希望使用<code>global</code>,而是显式地传递所需的参数。在</p>