0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

このプロジェクトでは、ブラウザ上で入力音声の波形を取得し、
その解析信号(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$ 位相シフトさせる変換です。
時間領域での畳み込みとしても定義されますが、実際には周波数領域で効率よく行うのが一般的です。

周波数領域での定義:

  1. 信号 $x(t)$ をフーリエ変換して $X(f)$ を得る
  2. 周波数領域で以下のようにフィルタをかける:

$$
H(f) =
\begin{cases}
1 & (f = 0) \\
2 & (f > 0) \\
0 & (f < 0)
\end{cases}
$$

  1. $X(f) \cdot H(f)$ に対して逆フーリエ変換することで、$z(t)$ を得る

何が見えているのか

  • 正弦波 → 真円
  • 複数の周波数 → 複雑なスパイラル構造
  • 振幅変調(AM) → 回転半径が変化
  • 周波数変調(FM) → 回転速度が変化

これにより、時間波形では見えなかった信号の構造を、
幾何学的な軌跡として可視化できます。

実装上のポイント

  • getDisplayMedia({ audio: true }) によって音声入力を取得
  • AnalyserNode.getFloatTimeDomainData() によって時間波形を取得
  • 外部ライブラリ(または自作関数)で FFT → ヒルベルト変換 → IFFT
  • キャンバス上で Re vs. Im を複素平面上に描画

📦 参考文献・資料

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?