pythonで周波数を変えてコサイン波を書こう

pythonで周波数を学ぶpythonで遊ぼう

周波数のおさらい

周波数についておさらいしておきます。周波数=1秒間にいくつ波があるか?です。例えばコサイン波の場合、

矢印間が1つのコサイン波ですが、この間隔が1秒であれば、周波数は1Hz(ヘルツ)といいます。

周波数mのコサイン波は以下のように書けます。

y(t)=cos(2πmt)  (t:時間、π:円周率、m:周波数)

確認:t=1(s:秒)のとき、角度は2πmである。2π(rad)=360°で1回転(1Hz)なので、mをかけることで、1(s)間にm回転(m Hz)していることになります。

pythonで書いてみよう

ではpythonを使って、周波数1、3Hzのグラフを書いてることにしましょう。

コードは以下のように書いています。見慣れないwhileについては、コードの解説で見てみます。

import mathim
port matplotlib.pyplot as plt

pi=math.pi

jikan=[]
cos_1_atai=[]
cos_3_atai=[]
t=0

#while文開始
while t<2:
    jikan.append(t)
    sita=2*pi*t
    cos_1_atai.append(math.cos(sita))
    cos_3_atai.append(math.cos(3*sita))
    t=t+0.002
#while文終了

plt.plot(jikan,cos_1_atai,label='cos_1')
plt.plot(jikan,cos_3_atai,label='cos_3')
plt.legend(loc='lower left')
plt.show()

【コードを見てみよう】

グラフを書く際に、横軸は時間ですので、jikan=[]として、時間を入れる箱(配列)を用意します。

周波数1のコサイン波をcos_1_atai、周波数3のコサイン波をcos_3_atai に格納します。

赤で書きましたが、#から始まる文はコメント文と言って、プログラムとは関係がありません。人間が、コードの中身を理解できるように必要であればコメントを書いておきます。

whileについて

’while (条件):’と書いて場合、条件が成立している間は、whileの中身を実行しなさい、という意味になります。条件のところは t<2 になっていので、tが2より小さければwhileの中を繰り返し実行します。while文の前に、条件であるtは0から始まる、と書いておきます。

while文の中身を書く場合は、必ずTabキーを押してから書いていきます。

while t<2:

(Tabキーを1回押す)    jikan.append(t)  以下同じ

このような書き方を”字下げ”とよんでいます。

while文の中を見ると、t=t+0.002と書いてありますので、1回whileの中を実行するごとに、tの値は、0.002毎upしていきます。

cos(2πmt)=cos(2πtm)と解釈して、2πtを先に計算しておき、sitaに入れておきます。

周波数1のコサイン波はcos(sita×1)、周波数3のコサイン波はcos(sita×3) と書けます。

plt.legend(loc=’lower left’) と書くことで、凡例をグラフ中左下に入れることができます。実行結果を確認しておきましょう。

while文についての注意点

while文のような繰り返し処理をするプログラムは、条件式の更新を書き忘れると、無限ループに陥ってプログラムが終わらない、ということが起きることがあります。これは、プログラムの不備でなくて、たんなるヒューマンエラーです。例えば、次のようなコードを見てみましょう。

t=0
while t<10:
    print('*')

このプログラムを実行すると、終わりません。(実行した方は、ターミナル横の、ゴミ箱ボタンをおして終了させてください。)

whileの前にt=0としてwhile文を実行しているのですが、いつまでたってもtが10になることはないので、while文の中を何度も繰り返しています。なので、while文の中でtをカウントupさせるような条件を書いておかないといけません。

t=0
while t<10:
    print('*')
    t=t+1   #←書き加えた

このように書いておくと、while文を抜けることができます。

ちなみに次はoutです。

t=0
while t<10:
    print('*')   #←タブで字下げをしている
t=t+1  #←タブで字下げをしていない

このように書くと、タブで字下げをしている行はwhile文の中にいるのですが、t=t+1は字下げしていないので、while文の外にあります。なので、このプログラムも終わりません。tをカウントupするt=t+1はキチンとwhile文の中に、字下げして書きましょう。

コメント

タイトルとURLをコピーしました