とりあえずまずは使ってみてや。👋
別タブで開いてる音を解析信号にして可視化します


このプロジェクトでは、ブラウザ上で入力音声の波形を取得し、
その解析信号(analytic signal)を生成して、複素数平面上に可視化します。
解析信号(Analytic Signal)
解析信号とは、元の実数信号から得られる複素数値信号であり、
時間領域信号の振幅包絡や瞬時位相を取り出すために使われます。
ある実数信号 $x(t)$ に対して、その解析信号 $z(t)$ は以下の形で定義されます:
$$
z(t) = x(t) + i \cdot \mathcal{H}[x(t)]
$$
ここで $\mathcal{H}[x(t)]$ は ヒルベルト変換(Hilbert Transform)です。
解析信号の性質:
- 実部: 元の信号そのもの
- 虚部: 元信号のヒルベルト変換(=90度位相シフトされた信号)
- 絶対値: 瞬時振幅 $|z(t)|$
- 偏角(角度): 瞬時位相 $\arg z(t)$
ヒルベルト変換
ヒルベルト変換は、信号に対してすべての周波数成分を $-90^\circ$ 位相シフトさせる変換です。
時間領域での畳み込みとしても定義されますが、実際には周波数領域で効率よく行うのが一般的です。
周波数領域での定義:
- 信号 $x(t)$ をフーリエ変換して $X(f)$ を得る
- 周波数領域で以下のようにフィルタをかける:
$$
H(f) =
\begin{cases}
1 & (f = 0) \\
2 & (f > 0) \\
0 & (f < 0)
\end{cases}
$$
- $X(f) \cdot H(f)$ に対して逆フーリエ変換することで、$z(t)$ を得る
何が見えているのか
- 正弦波 → 真円
- 複数の周波数 → 複雑なスパイラル構造
- 振幅変調(AM) → 回転半径が変化
- 周波数変調(FM) → 回転速度が変化
これにより、時間波形では見えなかった信号の構造を、
幾何学的な軌跡として可視化できます。
実装上のポイント
-
getDisplayMedia({ audio: true })
によって音声入力を取得 -
AnalyserNode.getFloatTimeDomainData()
によって時間波形を取得 - 外部ライブラリ(または自作関数)で FFT → ヒルベルト変換 → IFFT
- キャンバス上で Re vs. Im を複素平面上に描画