質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1007閲覧

データを利用する数の変更

1KtsBdY

総合スコア4

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/04 07:26

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

X=sip.dft(x[0:N])
と言う部分は変えずに
X2という新しい変数
X2=sip.dft(X[0:N//2])と定義して
A=np.abs(X2)としたところ解決しました

投稿2019/11/05 01:30

1KtsBdY

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問