ValueError: операнды не могут передаваться вместе с фигурами (1024,) (1024,2)

Вздох, я знаю, что это похоже на несколько других вопросов, но моя проблема здесь в том, что я не совсем понимаю, как работает функция specgram в Matlab. Я основываю свой код на этом примере, расположенном по адресу http://matplotlib.org/examples/pylab_examples/specgram_demo.html:

#!/usr/bin/env python
from pylab import *

dt = 0.0005
t = arange(0.0, 20.0, dt)
s1 = sin(2*pi*100*t)
s2 = 2*sin(2*pi*400*t)

# create a transient "chirp"
mask = where(logical_and(t>10, t<12), 1.0, 0.0)
s2 = s2 * mask

# add some noise into the mix
nse = 0.01*randn(len(t))

x = s1 + s2 + nse # the signal
NFFT = 1024       # the length of the windowing segments
Fs = int(1.0/dt)  # the sampling frequency

# Pxx is the segments x freqs array of instantaneous power, freqs is
# the frequency vector, bins are the centers of the time bins in which
# the power is computed, and im is the matplotlib.image.AxesImage
# instance

ax1 = subplot(211)
plot(t, x)
subplot(212, sharex=ax1)
Pxx, freqs, bins, im = specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900,
                                cmap=cm.gist_heat)
show()

Тем не менее, мне нужно прочитать в файле WAV, поэтому я изменяю его на:

#!/usr/bin/env python

from pylab import *
import scipy.io.wavfile

dt = 0.0005

sr, x = scipy.io.wavfile.read(fname) # the signal
NFFT = 1024       # the length of the windowing segments
Fs = int(1.0/dt)  # the sampling frequency

# Pxx is the segments x freqs array of instantaneous power, freqs is
# the frequency vector, bins are the centers of the time bins in which
# the power is computed, and im is the matplotlib.image.AxesImage
# instance

ax1 = subplot(211)
plot(x)
subplot(212, sharex=ax1)
Pxx, freqs, bins, im = specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900,
                                cmap=cm.gist_heat)
show()

и взамен получаю ValueError: operands could not be broadcast together with shapes (1024,) (1024,2), Что я здесь не понимаю?

Редактировать: полный возврат:

ValueError                                Traceback (most recent call last)
<ipython-input-13-4952b82b74f2> in <module>()
     16 subplot(212, sharex=ax1)
     17 Pxx, freqs, bins, im = specgram(x, NFFT=NFFT, Fs=Fs, noverlap=900,
---> 18                                 cmap=cm.gist_heat)
     19 show()
     20 

/Library/Python/2.7/site-packages/matplotlib-1.3.1-py2.7-macosx-10.8-x86_64.egg/matplotlib/pyplot.pyc in specgram(x, NFFT, Fs, Fc, detrend, window, noverlap, cmap, xextent, pad_to, sides, scale_by_freq, hold, **kwargs)
   3145                           window=window, noverlap=noverlap, cmap=cmap,
   3146                           xextent=xextent, pad_to=pad_to, sides=sides,
-> 3147                           scale_by_freq=scale_by_freq, **kwargs)
   3148         draw_if_interactive()
   3149     finally:

/Library/Python/2.7/site-packages/matplotlib-1.3.1-py2.7-macosx-10.8-x86_64.egg/matplotlib/axes.pyc in specgram(self, x, NFFT, Fs, Fc, detrend, window, noverlap, cmap, xextent, pad_to, sides, scale_by_freq, **kwargs)
   8932 
   8933         Pxx, freqs, bins = mlab.specgram(x, NFFT, Fs, detrend,
-> 8934              window, noverlap, pad_to, sides, scale_by_freq)
   8935 
   8936         Z = 10. * np.log10(Pxx)

/Library/Python/2.7/site-packages/matplotlib-1.3.1-py2.7-macosx-10.8-x86_64.egg/matplotlib/mlab.pyc in specgram(x, NFFT, Fs, detrend, window, noverlap, pad_to, sides, scale_by_freq)
    467 
    468     Pxx, freqs, t = _spectral_helper(x, x, NFFT, Fs, detrend, window,
--> 469         noverlap, pad_to, sides, scale_by_freq)
    470     Pxx = Pxx.real #Needed since helper implements generically
    471 

/Library/Python/2.7/site-packages/matplotlib-1.3.1-py2.7-macosx-10.8-x86_64.egg/matplotlib/mlab.pyc in _spectral_helper(x, y, NFFT, Fs, detrend, window, noverlap, pad_to, sides, scale_by_freq)
    262     for i in range(n):
    263         thisX = x[ind[i]:ind[i]+NFFT]
--> 264         thisX = windowVals * detrend(thisX)
    265         fx = np.fft.fft(thisX, n=pad_to)
    266 

ValueError: operands could not be broadcast together with shapes (1024,) (1024,2) 

1 ответ

Решение

Это не проблема с кодом: скорее это проблема с wavfile. Файл имеет два аудиоканала, таким образом, 2-й ряд данных.

Другие вопросы по тегам