1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

三角関数恒等式を「音波」で理解する:ドの音とFFT解析

Posted at

🎼 三角関数恒等式を「音波」で理解する:ドの音とFFT解析


概要

音は波、つまり**正弦波(サイン波)**です。たとえば「ド(C4)」の音はおよそ 261.6 Hz の正弦波として表されます:

$$
s(t) = \sin(2\pi f t)
$$

ここで、三角関数の恒等式を用いれば、複数の音の合成や分解、倍音や干渉などの音響現象を数式として理解できます。


📐 各恒等式を音波として解釈

🔹 加法定理(合成波の原理)

式:

$$
\sin(a \pm b) = \sin(a)\cos(b) \pm \cos(a)\sin(b)
$$

音としての意味:

2つの異なる周波数の音が合成された時、それぞれの振幅が混ざり合って別の成分を形成します。


🔹 倍角公式(倍音)

式:

$$
\sin(2θ) = 2\sinθ\cosθ
$$

音としての意味:

「ド」(261.6 Hz)→ sin波 → 倍角になると 523.2 Hz(1オクターブ上の「ド」)。倍音生成の数学的根拠です。


🔹 二重角の cos と tan

式:

$$
\cos(2θ) = \cos^2θ − \sin^2θ = 2\cos^2θ − 1 = 1 − 2\sin^2θ \
\tan(2θ) = \frac{2\tanθ}{1 − \tan^2θ}
$$

音としての意味:

位相差や振幅比の変換に現れる。特にLissajous図形などに関係。


🔹 半角公式(包絡線と振幅の分離)

式:

$$
\sin^2θ = \frac{1 − \cos(2θ)}{2},\quad \cos^2θ = \frac{1 + \cos(2θ)}{2}
$$

音としての意味:

振幅変調(AM)信号の包絡線として使われる。エネルギー分布の解析にも応用。


🔹 積和公式(AM・FM合成)

式:

$$
\sin(a)\sin(b) = \frac{1}{2} [\cos(a − b) − \cos(a + b)] \
\cos(a)\cos(b) = \frac{1}{2} [\cos(a − b) + \cos(a + b)] \
\sin(a)\cos(b) = \frac{1}{2} [\sin(a + b) + \sin(a − b)]
$$

音としての意味:

**AM(振幅変調)やFM(周波数変調)**の合成波がこれに対応。AMラジオの搬送波と情報信号の合成式と同様。


🔹 和積公式(ビート現象)

式:

$$
\sin(a) ± \sin(b) = 2\sin\left(\frac{a ± b}{2}\right)\cos\left(\frac{a ∓ b}{2}\right)
$$

音としての意味:

近い音同士が合成されると「うなり(ビート)」が発生します。これは振幅が周期的に変化する現象。


🎧 FFTでの観測

入力信号:

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft

fs = 44100
t = np.linspace(0, 0.02, int(fs*0.02), endpoint=False)
a = 2 * np.pi * 261.6 * t  # ド(C4)
b = 2 * np.pi * 293.7 * t  # レ(D4)
s = np.sin(a) + np.sin(b)  # 合成波

# FFT
fft_result = fft(s)
freqs = np.fft.fftfreq(len(t), 1/fs)
magnitude = np.abs(fft_result)[:len(t)//2]

plt.plot(freqs[:1000], magnitude[:1000])
plt.title("FFT of sin(C4) + sin(D4)")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude")
plt.grid()
plt.show()

出力:

  • 261.6Hz293.7Hz にピーク
  • (261.6 + 293.7)/2 = 277.65Hz の振幅変調も視認可能
  • ビート周波数 32.1Hz の包絡も

🔁 応用例:サイン波をベースにした音響処理

式種別 応用例 FFT結果
加法定理 周波数変調 (FM合成) 平均・差周波数が現れる
倍角公式 倍音(1オクターブ上) 周波数2倍のピーク
和積公式 ビート(うなり)生成 2ピーク+包絡周波数
積和公式 AM/FM合成波のモデリング サイドバンド成分
半角公式 エネルギー/包絡線抽出 平均成分と倍周波成分が見える

🧠 まとめ

これらの三角関数恒等式は、音の合成・分解・変調の本質を数式で表すものであり、音響合成、楽器モデリング、音声処理に不可欠です。


■ 補足:$\sin^n(\omega t)$ のFFTとは?

  • $\sin(\omega t)$ のべき乗は、単純な正弦波とは異なり、**複数の高調波(倍音)**を含みます。
  • 特に 奇数 n では奇数次高調波、偶数 n では偶数次高調波が現れます。

■ 例1:$\sin^2(\omega t)$

三角恒等式より:

$$
\sin^2(\omega t) = \frac{1 - \cos(2\omega t)}{2}
$$

⇒ 含まれる周波数成分:

  • DC成分(0 Hz)
  • $2\omega$(2倍の周波数)

■ 例2:$\sin^3(\omega t)$

$$
\sin^3(\omega t) = \frac{3\sin(\omega t) - \sin(3\omega t)}{4}
$$

⇒ 含まれる周波数成分:

  • $\omega$(基本周波数)
  • $3\omega$(3倍音)

■ 一般公式(Fourier展開)

$$
\sin^n(\omega t) = \sum_{k=1,3,5,\dots}^{n} a_k \sin(k\omega t) \quad \text{(n odd)}
$$

$$
\sin^n(\omega t) = \sum_{k=0,2,4,\dots}^{n} b_k \cos(k\omega t) \quad \text{(n even)}
$$

係数 $a_k, b_k$ は ベッセル関数や組合せ係数で決まります。


■ Python 実装例(FFTによる観察)

import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq

# パラメータ
fs = 10000
T = 1.0
t = np.linspace(0, T, int(fs*T), endpoint=False)
f0 = 50  # 基本周波数(Hz)
w = 2 * np.pi * f0

# 正弦波のべき乗
n = 3
y = np.sin(w * t)**n

# FFT
Y = fft(y)
freq = fftfreq(len(t), 1/fs)
mag = np.abs(Y)[:len(t)//2]

# グラフ
plt.plot(freq[:1000], mag[:1000])
plt.title(f"FFT of sin^{n}(2π×{f0}t)")
plt.xlabel("Frequency [Hz]")
plt.ylabel("Amplitude")
plt.grid()
plt.show()

■ 結果と解釈(例: $n=3$)

  • $f_0 = 50$ Hz の正弦波なら、FFTで:

    • 50 Hz のピーク(基本音)
    • 150 Hz のピーク(3次高調波)
  • 音楽的には「倍音構成」、波動物理では「非線形振動」のスペクトルとして利用。


■ 応用例

n 名称 含まれる周波数 音響効果
2 二乗波 DC, $2f$ AM変調、包絡線抽出
3 立方波 $f$, $3f$ 倍音豊かな音
4 4乗波 DC, $2f$, $4f$ ブザー、角波近似
n高次 高次非線形波 $f, 3f, 5f, \dots, nf$ 減衰、歪み分析

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?