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

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

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

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

Q&A

解決済

1回答

1833閲覧

矩形波をフーリエ変換するプログラミングが書けません

fairlady

総合スコア4

Python

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

0グッド

0クリップ

投稿2022/10/19 05:29

編集2022/10/19 05:58

学校の課題で矩形波をPythonで書かなければならないのですが、わかりません。

発生している問題・エラーメッセージ

・f(t) = 5 (0.4 < t < 0.6)
・f(t) = 0 (それ以外)
の矩形波の書き方が分からないです。どなたかご教授頂きたいです。
書きあがった矩形波をフーリエ変換するというのが課題内容です。

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

該当のソースコード

python

1 2import numpy as np # NumPy 3from scipy import signal # Sci+Py 4import matplotlib.pyplot as plt # Matplotlib 5 6# データのパラメータ 7N = 100 # サンプル数 8SF = 100.0 # サンプリング周波数 9DT = 1.0 / SF # サンプリング間隔 10fn = 1/(2*DT) # ナイキスト周波数 11t = np.arange(0, N*DT, DT) # 時間軸 12freq = np.linspace(0, 1.0/DT, N) # 周波数軸 13 14# フィルタのパラメータ 15gpass = 1 # 通過域最大損失量[dB] 16gstop = 40 # 阻止域最小減衰量[dB] 17 18# 短形波fを生成 19f = 0 20for i in range(len(t)): 21 if 0.4 < t < 0.6: 22 f = 5 23 else : 24 f = 0 25 26# 高速フーリエ変換(周波数成分) 27F = np.fft.fft(f) 28 29# =============================================== 30# グラフ表示 31# =============================================== 32fig = plt.figure(figsize = (12.0, 10.0)) 33plt.subplots_adjust(wspace=0.4, hspace=0.6) 34 35# 信号fを表示 36plt.subplot(222) 37plt.plot(t, f) 38plt.xlabel("Time [s]") 39plt.ylabel("Signal") 40plt.grid() 41 42# 信号fの周波数成分 43plt.subplot(223) 44plt.plot(freq, np.abs(F/(N/2)), marker="s", linewidth="0") 45plt.xlabel('Frequency [Hz]') 46plt.ylabel('Amplitude') 47plt.xlim(0, int(SF/2.0)/2.0) 48plt.grid()

試したこと

矩形波 f について定義し、for , if を使ってf(t) = 0、f(t) = 5になる条件を入力してみたのですが、エラーが表示されてしまいました。条件の入力の仕方が間違えていると思っています。
f をリストにして行ってみましたが、同じエラーが出てきました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

幾分かツッコミどころはありますが,とりあえず動作のための変更点を述べます.

矩形波の生成

上のコードでは変数fを書き換えまくっているだけで,波形を表現する配列ではありません.配列の操作に関して学ばれると良いでしょう.

Python

1f = np.zeros_like(t) # tと同じサイズの配列生成(初期値は0) 2f[(0.4 < t) & (t < 0.6)] = 5 # 0.4 < t < 0.6のインデックスを5にする.

グラフの表示

matplotlibでは最後にplt.show()としなければ結果が表示されませんので一番最後の行にplt.show()を挿入してください.

投稿2022/10/19 05:41

PondVillege

総合スコア1579

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

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

fairlady

2022/10/19 06:03

解決することができました。 配列に関して学ぶことも必要だと認識できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問