サイン波合成 SciPy

サイン波合成

SciPyを使用して、2つの波の重ね合わせに関する問題を解決し、結果をグラフ化してみましょう。

具体的には、異なる周波数振幅を持つ2つのサイン波を合成してその結果を可視化します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 時間軸を生成
t = np.linspace(0, 10, 1000, endpoint=False)

# 2つの異なる周波数のサイン波を生成
frequency1 = 2 # 周波数1
amplitude1 = 3 # 振幅1
signal1 = amplitude1 * np.sin(2 * np.pi * frequency1 * t)

frequency2 = 5 # 周波数2
amplitude2 = 2 # 振幅2
signal2 = amplitude2 * np.sin(2 * np.pi * frequency2 * t)

# 2つのサイン波を重ね合わせる
combined_signal = signal1 + signal2

# グラフを描画
plt.figure(figsize=(10, 6))
plt.plot(t, signal1, label="Signal 1")
plt.plot(t, signal2, label="Signal 2")
plt.plot(t, combined_signal, label="Combined Signal", linewidth=2)
plt.xlabel("Time")
plt.ylabel("Amplitude")
plt.legend()
plt.title("Superposition of Two Signals")
plt.grid(True)
plt.show()

このコードは、2つの異なる周波数振幅を持つサイン波を生成し、それらを合成しています。

最終的な合成信号をグラフ化して、2つの波の重ね合わせを視覚的に示しています。

2つのサイン波が相互に影響し合っている様子が見て取れます。

ソースコード解説

以下はソースコードの詳細な説明です。

  1. import numpy as npimport matplotlib.pyplot as pltは、NumPyおよびMatplotlibをインポートしています。
    これらのライブラリは数値計算とグラフ描画に使用されます。

  2. from scipy import signalはSciPyからsignalモジュールをインポートしています。
    このモジュールにはさまざまな信号処理関数が含まれており、このコードでは使用されていませんが、将来の拡張性を考慮してインポートされています。

  3. t = np.linspace(0, 10, 1000, endpoint=False)は、0から10までの範囲を持つ時間軸(t)を生成しています。
    np.linspace関数は、指定された範囲内で等間隔のサンプリングポイントを生成します。
    この場合、0から10までの範囲を1000個のサンプリングポイントで分割しています。

  4. frequency1amplitude1は、最初のサイン波(Signal 1)の周波数と振幅を設定しています。
    同様に、frequency2amplitude2は2番目のサイン波(Signal 2)の周波数と振幅を設定しています。

  5. signal1およびsignal2は、それぞれ異なる周波数と振幅を持つサイン波を生成しています。
    サイン波の式 amplitude * np.sin(2 * np.pi * frequency * t) を使って、指定された周波数と時間軸上のサンプリングポイントからサイン波を計算しています。

  6. combined_signalは、signal1signal2を単純に足し合わせて、2つのサイン波を重ね合わせた合成信号を生成しています。

  7. plt.figure(figsize=(10, 6))は、Matplotlibの新しいフィギュア(プロット領域)を作成し、図のサイズを指定しています。

  8. plt.plot(t, signal1, label="Signal 1")およびplt.plot(t, signal2, label="Signal 2")は、それぞれSignal 1とSignal 2のプロットを行っています。
    これらは青とオレンジの線で表されます。

  9. plt.plot(t, combined_signal, label="Combined Signal", linewidth=2)は、合成信号(Combined Signal)のプロットを行っています。
    この信号は緑の太い線で表されます。

  10. plt.xlabel("Time")plt.ylabel("Amplitude")は、X軸とY軸のラベルを設定しています。

  11. plt.legend()は凡例を表示し、plt.title("Superposition of Two Signals")はグラフのタイトルを設定しています。

  12. plt.grid(True)は、グリッド線を表示します。

  13. plt.show()は、グラフを表示します。

このコードは、2つの異なる周波数を持つサイン波を生成し、それらの波形が重ね合わさった合成信号を可視化するためのものです。

グラフはMatplotlibを使用して描画され、各要素が詳細に設定されています。

グラフ解説

このグラフは、2つの異なる周波数と振幅を持つサイン波が重ね合わさった結果を示しています。

以下はグラフの詳細な説明です。

  • 横軸(X軸)時間を表しており、0から10までの時間の範囲を表現しています。
    時間の単位は任意のもので、ここでは正確な時間を示すためにサンプリングポイントを生成しています。

  • 縦軸(Y軸)振幅を表しており、サイン波の振幅を示しています。
    振幅はサイン波の高さを表します。

  • 青い線「Signal 1」を表しており、周波数2のサイン波です。
    振幅は3です。

  • オレンジの線「Signal 2」を表しており、周波数5のサイン波です。
    振幅は2です。

  • 緑の太い線「Combined Signal」を表しており、Signal 1とSignal 2が重ね合わさった合成信号です。
    この信号は、Signal 1とSignal 2の振幅を加算したものです。

グラフの観察ポイント:

  1. 時間0から10の範囲で、Signal 1とSignal 2のサイン波が振動しています。
    それぞれの波形は異なる周波数を持っており、振幅も異なります。

  2. Combined Signal(緑の線)は、Signal 1とSignal 2を合成した結果であり、これら2つの波が重ね合わさったものです。
    振幅が合算されているため、Combined Signalの振幅はSignal 1とSignal 2の振幅を足し合わせたものになります。

  3. 合成信号には、2つの周波数成分の影響が見られます。
    Signal 1の高周波成分とSignal 2の低周波成分が相互作用して、新しい波形が形成されています。

このグラフは、2つの異なる波が重ね合わさると、それらの波形が相互に影響し合って新しい波形が生成されることを視覚的に示しています。

振幅や周波数が異なる波が同じ時間軸上で存在すると、それらの波形が重なり合って合成信号が形成されることが理解できます。