三角波

三角波

三角波は、音楽信号処理でよく使われる基本的な波形の一つで、名前の通り三角形の形をしています。

三角波は直線的に上昇し、最高点に達すると直線的に下降するという特徴を持ちます。

これは、次の特徴を持ちます。

  1. 周期的: 三角波は一定の周期で繰り返されます。
  2. 対称性: 上昇部分下降部分が対称で、鋭い頂点を持ちます。
  3. 線形変化: 各周期内で直線的に増加し、減少します。

数学的表現

三角波の数学的表現は以下のように定義されます。

$$
\text{tri}(t) = 2 \left| \frac{t}{T} - \left\lfloor \frac{t}{T} + 0.5 \right\rfloor \right|
$$

ここで、$ ( T ) $は周期を表します。

三角波はこの数式により、時間に対して周期的に増減する波形として描かれます。

ソースコード例

三角波をPythonで3Dグラフ化する方法を示します。

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
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 三角波の定義
def triangle_wave(t, period=1):
return 2 * np.abs(2 * (t / period - np.floor(t / period + 0.5))) - 1

# 時間軸と空間軸の設定
t = np.linspace(0, 10, 500)
x = np.linspace(-5, 5, 500)
T, X = np.meshgrid(t, x)
Z = triangle_wave(T)

# 3Dプロットの作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(T, X, Z, cmap='viridis')

# グラフのラベル
ax.set_xlabel('Time')
ax.set_ylabel('X')
ax.set_zlabel('Amplitude')
ax.set_title('3D Triangle Wave')

plt.show()

[実行結果]

ソースコード解説

このPythonソースコードの説明を行います。

1. 必要なライブラリのインポート

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

ここでは、NumPyMatplotlib、および3Dプロットのためのmpl_toolkits.mplot3dをインポートしています。

NumPy数値計算用Matplotlibデータ可視化用のライブラリです。

2. 三角波の定義

1
2
def triangle_wave(t, period=1):
return 2 * np.abs(2 * (t / period - np.floor(t / period + 0.5))) - 1

この関数は、指定された周期で三角波を生成します。

数式に基づいて、時間 t に対する三角波の値を計算します。

period波の周期を設定する引数です。

3. データの設定

1
2
3
4
t = np.linspace(0, 10, 500)
x = np.linspace(-5, 5, 500)
T, X = np.meshgrid(t, x)
Z = triangle_wave(T)

ここでは、時間軸 t空間軸 x を設定します。

np.linspace 関数は、指定した範囲で等間隔に分割された値を生成します。

np.meshgrid 関数を使用して、2Dグリッドデータ TX を作成し、三角波関数 triangle_wave を用いて Z を計算します。

4. 3Dプロットの作成

1
2
3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(T, X, Z, cmap='viridis')

ここでは、3Dプロットを作成します。

fig は図を生成し、ax は3Dプロットのための軸を設定します。

ax.plot_surface は、TX、および Z を使って表面プロットを作成し、カラーマップ viridis を適用します。

5. グラフのラベル付け

1
2
3
4
ax.set_xlabel('Time')
ax.set_ylabel('X')
ax.set_zlabel('Amplitude')
ax.set_title('3D Triangle Wave')

ここでは、3Dグラフにラベルとタイトルを設定します。

set_xlabelset_ylabel、および set_zlabel メソッドで各軸にラベルを付け、set_title メソッドでグラフのタイトルを設定します。

6. グラフの表示

1
plt.show()

最後に、plt.show() を呼び出してグラフを表示します。

これにより、作成した3D三角波グラフが表示されます。

グラフ解説

[実行結果]

1. 時間軸 (Time):

  • $( t ) $は時間を表し、三角波の周期的な変化を示します。
  • このプロットでは、時間$ ( t ) $が$0$から$10$までの範囲を持ちます。

2. 空間軸 (X):

  • $( x ) $は空間を表し、プロットの幅を示します。
  • このプロットでは、空間$ ( x ) $が$-5$から$5$までの範囲を持ちます。

3. 振幅 (Amplitude):

  • $( z ) $は三角波の振幅を示します。
  • 三角波の特徴として、振幅は周期ごとに上下します。

4. 3Dプロット:

  • plot_surface 関数を使って、時間 $ ( t ) $と空間 $ ( x ) $に対する三角波の振幅を3Dで視覚化します。
  • カラーマップ viridis は、振幅の値に対する色を割り当てます。

この3Dプロットは、時間軸に沿って周期的に変化する三角波を視覚的に表現し、三角波の特性をより直感的に理解するのに役立ちます。