前提・実現したいこと
N=200でデータを200個で設定しているがスペクトルの部分では100個のデータを扱ってグラフを表示させたい
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-182-b26606588d01> in <module> 23 plt.title('waveform'); plt.xlabel('time [s]'); plt.ylabel('amplitude') 24 plt.subplot(4,1,2) ---> 25 plt.stem(frequency,A,markerfmt='None',use_line_collection=True) 26 plt.title('spectrum'); plt.xlabel('freq [hz]'); plt.ylabel('gain') 27 plt.subplot(4,1,3) ~\Anaconda3\lib\site-packages\matplotlib\pyplot.py in stem(linefmt, markerfmt, basefmt, bottom, label, use_line_collection, data, *args) 2904 bottom=bottom, label=label, 2905 use_line_collection=use_line_collection, **({"data": data} if -> 2906 data is not None else {})) 2907 2908 ~\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, data, *args, **kwargs) 1587 def inner(ax, *args, data=None, **kwargs): 1588 if data is None: -> 1589 return func(ax, *map(sanitize_sequence, args), **kwargs) 1590 1591 bound = new_sig.bind(ax, *args, **kwargs) ~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in stem(self, linefmt, markerfmt, basefmt, bottom, label, use_line_collection, *args) 2848 2849 markerline, = self.plot(x, y, color=markercolor, linestyle=markerstyle, -> 2850 marker=markermarker, label="_nolegend_") 2851 2852 baseline, = self.plot([np.min(x), np.max(x)], [bottom, bottom], ~\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in plot(self, scalex, scaley, data, *args, **kwargs) 1664 """ 1665 kwargs = cbook.normalize_kwargs(kwargs, mlines.Line2D._alias_map) -> 1666 lines = [*self._get_lines(*args, data=data, **kwargs)] 1667 for line in lines: 1668 self.add_line(line) ~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in __call__(self, *args, **kwargs) 223 this += args[0], 224 args = args[1:] --> 225 yield from self._plot_args(this, kwargs) 226 227 def get_next_color(self): ~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _plot_args(self, tup, kwargs) 389 x, y = index_of(tup[-1]) 390 --> 391 x, y = self._xy_from_xy(x, y) 392 393 if self.command == 'plot': ~\Anaconda3\lib\site-packages\matplotlib\axes\_base.py in _xy_from_xy(self, x, y) 268 if x.shape[0] != y.shape[0]: 269 raise ValueError("x and y must have same first dimension, but " --> 270 "have shapes {} and {}".format(x.shape, y.shape)) 271 if x.ndim > 2 or y.ndim > 2: 272 raise ValueError("x and y can be no greater than 2-D, but have " ValueError: x and y must have same first dimension, but have shapes (100,) and (200,)
該当のソースコード
python
1import numpy as np 2import matplotlib.pyplot as plt 3import sip 4 5N=200 6 7x, fs = sip.wavread("./sounds/dialtone2.wav") 8print("Sampling Rate = ", fs, "Hz") 9 10X=sip.dft(x[0:N]) 11y=sip.idft(X) 12 13A=np.abs(X) 14AdB = 20*np.log10(A) 15k=np.arange(N/2) 16print(k) 17 18frequency = (k*fs)/N 19 20plt.figure(figsize=(10,10)) 21plt.subplot(4,1,1) 22plt.plot(np.arange(N)/fs,x[0:N]) 23plt.title('waveform'); plt.xlabel('time [s]'); plt.ylabel('amplitude') 24plt.subplot(4,1,2) 25plt.stem(frequency,A,markerfmt='None',use_line_collection=True) 26plt.title('spectrum'); plt.xlabel('freq [hz]'); plt.ylabel('gain') 27plt.subplot(4,1,3) 28plt.stem(frequency,AdB,markerfmt='None',use_line_collection=True) 29plt.title('spectrum'); plt.xlabel('freq [hz]'); plt.ylabel('gain [dB]') 30plt.subplot(4,1,4) 31plt.plot(np.arange(N)/fs,np.real(y)) 32plt.title('waveform'); plt.xlabel('time [s]'); plt.ylabel('amplitude') 33 34plt.tight_layout() 35plt.show()
試したこと
k=np.arange(N)/2に変えたところエラーは無くなったがkの中身が[0.5,1,1.5,2]といった感じで1~200を1/2した数値が格納されていた。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。