मैं एक .wav फ़ाइल पर कुछ विश्लेषण करने की कोशिश कर रहा हूँ, मैंने निम्नलिखित प्रश्न से कोड लिया है (पायथन स्किपी एफएफटी wav फाइलें) और ऐसा लगता है कि मुझे वही देना है जो मुझे चाहिए हालांकि कोड चलाते समय मैं निम्नलिखित त्रुटि में चलाता हूं:

लेखन त्रुटि: स्लाइस सूचकांक पूर्णांक या कोई नहीं होना चाहिए या एक अनुक्रमणिका विधि होनी चाहिए

यह मेरे कोड की लाइन 9 पर होता है। मैं यह नहीं समझता कि ऐसा क्यों होता है, क्योंकि मैंने सोचा था कि एब्स फ़ंक्शन इसे एक पूर्णांक बना देगा।

    import matplotlib.pyplot as plt
from scipy.fftpack import fft
from scipy.io import wavfile # get the api
fs, data = wavfile.read('New Recording 2.wav') # load the data
a = data.T[0] # this is a two channel soundtrack, I get the first track
b=[(ele/2**8.)*2-1 for ele in a] # this is 8-bit track, b is now normalized on [-1,1)
c = fft(b) # calculate fourier transform (complex numbers list)
d = len(c)/2  # you only need half of the fft list (real signal symmetry)
plt.plot(abs(c[:(d-1)]),'r') 
plt.show()
plt.savefig("Test.png", bbox_inches = "tight")
0
BeigeSponge 15 अक्टूबर 2020, 12:45

1 उत्तर

सबसे बढ़िया उत्तर

abs() आपके नंबर को पूर्णांक नहीं बनाता है। यह सिर्फ नकारात्मक संख्याओं को सकारात्मक संख्याओं में बदल देता है। जब len(c) एक विषम संख्या है तो आपका चर d एक फ्लोट है जो x.5 में समाप्त होता है।

आप जो चाहते हैं वह शायद abs(d) के बजाय round(d) है

0
blues 15 अक्टूबर 2020, 16:38