時間と周波数
音を窓で切って分析すると、窓が短いほど時刻は正確になり周波数はぼやける。両方のぼやけの積には下限 1/(4π) があり、ガウス窓だけが等号に乗る。
音を分析するには、窓で切り取るしかない
周転円で描く角で「形を円の足し算に分ける」道具を作った。ところが実際の音は始まったり止まったりするので、いつの音を分けるのかを決めなければならない。そこで一定の長さの窓で切り取ってから分ける(短時間フーリエ変換)。声紋(スペクトログラム)もイコライザもこれである。
ここに原理的な限界がある。窓を短くすると時刻は正確になるが周波数がぼやけ、長くすると逆になる。しかも両方の「ぼやけ」の積には下限がある。
Δt · Δf ≥ 1/(4π) = 0.0795775…
ガボール(1946)が通信の文脈で示したもので、ガウス窓だけが等号に乗る。測ったら 0.079578368 で、下限 0.079577472 との相対差は 2.3×10⁻⁵(離散化のぶん)。窓の幅 σ を変えても点数を変えても同じ値だった。Δt と Δf が反比例で打ち消すからである。
窓の端のなめらかさが、裾の落ち方を決める
| 窓 | 端のふるまい | 裾の傾き(実測) | Δt·Δf |
|---|---|---|---|
| 矩形 | 端で 1 のまま跳ぶ | −0.944 | 発散 |
| ハミング | 端で 0.08 のまま跳ぶ | −0.689 | 発散 |
| 三角 | 端で 0・傾きが跳ぶ | −1.952 | 1.095 倍 |
| ハン | 端で 0・傾きも 0 | −3.043 | 1.026 倍 |
| ブラックマン | 端で 0・傾きも 0 | −3.316 | 1.004 倍 |
| ガウス | 端まで滑らか | (直線に乗らない) | 1.000 倍 |
これは Hat タイルの輪郭で測ったのとまったく同じ規則である。周転円で描く角では「角があると係数が 1/k²、なめらかだと指数的」だった(見取り図の発見 25)。窓の端が「角」の役をしていて、跳びの階数がそのまま裾の指数になる。形の話と音の話が同じ一行に収まった。
不等式を語る前に、Δf が定義できるかを確かめないといけない
矩形窓の Δf は、連続の理論では発散する。裾が 1/f なので f²|W(f)|² が定数になり、分散の積分が閉じないからである。離散で計算すると有限の数字が出てくるが、それは点数を増やすと √N で増え続ける。数字が出たからといって「幅」が定義できているわけではない。
発散する窓と、裾の傾きが浅い窓はぴったり同じ集合だった(矩形とハミング)。「端で値が跳ぶか」→「裾が 1/f か」→「Δf が定義できるか」という三段の連鎖で、最初の一つが残りを決めている。ハミング窓の跳びは 0.08 しかないが、跳びは跳びである。
そして二段階で騙されかけた。
①ゼロパディングせずに(DFT の長さ = 窓長で)測ると、矩形窓の Δf がちょうど 0 になる。長さ N の矩形窓を長さ N の DFT にかけると完全な直流になるからで、これでは Δt·Δf = 0 =不等式を完全に破ってしまう。②同じ条件でハミング窓は下限の 0.992 倍になり、わずかに破っている。もっともらしい数字なので、そのまま表に載せかねない。
パディングを足すと直り(ハミングは 1.431 倍になる)、さらに点数を振ると発散が見える。ガウス窓はパディング量を1〜16倍に振っても 0.079577〜0.079578 で動かなかった。動かない窓だけが「測れている」。
解像度を2倍3倍に振って答えが動かないことを確かめる手順が、ここでも役に立った。ただしこの場合は「測り方が悪い」のではなく、測ろうとしている量が存在しないケースだった。答えが動くときは、測り方を疑うだけでなく、その量が定義できるかも疑う。
うなりを「2つの音」として分けるには、1秒かかる
分離できる最小の周波数差を二分探索で測ると、窓長との積が一定になった(2.157 / 2.140 / 2.132 / 2.127)。つまり Δf ∝ 1/N である。実用の数字に直すと(サンプリング 2000Hz):
| 分けたいもの | 周波数差 | 必要な窓長 |
|---|---|---|
| 純正5度(440 と 660Hz) | 220 Hz | 32 点 = 16 ms |
| 半音(440 と 466Hz) | 26 Hz | 256 点 = 128 ms |
| うなり(440 と 444Hz) | 4 Hz | 2048 点 = 1024 ms |
和音のモアレで、平均律5度のうなりの周期を 0.671 秒と計算した。そして今回、4Hz のうなりを「2つの別の音」として周波数で分けるには 1 秒以上かかると出た。同じオーダーである。
これは偶然ではない。「うなりとして時間で聞く」ことと「2つの音として周波数で分ける」ことは、同じ限界の裏表だからである。差が小さいほどうなりは遅くなり、同時に分離に必要な窓は長くなる。どちらも 1/Δf の話をしている。ゆっくりしたうなりが「音楽的」に感じられるのは、脳がまだ2音に分けきれていない領域だから、とまで言うのは踏み込みすぎだが、数としてはその境目にいる。
同じ一行が3つの舞台に出る。そして3つめで様子が変わる
この規則は周転円で描く角でも出ていた。多角形の輪郭のフーリエ係数は k⁻² で落ちる(角で1階微分が跳ぶ)。上の節の窓の裾も同じ話である。測った値は式とすべて 0.1 以内で合った(輪郭 −2.08・rect −0.92・tri −1.93・hann −3.06)。
では3つめの舞台はどうか。2次元の領域そのもののフーリエ変換(形状因子)を、厳密式で測った。正方形なら sinc の積、円板なら 2πR·J₁(qR)/q になる。
①円板(なめらかな境界)は1つの指数を持つ。|F|² ∝ q−3.03(R²=0.9987)で、どの向きでも同じ。
②正方形(角のある境界)は指数が向きで変わる。辺の法線方向で 2.02、斜め30°で 3.93。つまり角は「なめらかでない」だけでなく「向きを選ぶ」。1次元にはこの自由度がなかった。
③全方位を平均すると 3.01 になり、なめらかな円板の 3.03 と区別がつかなくなる。平均が、区別していた情報そのものを捨てている。三角格子を軸座標で丸めると偽の4回対称が立つのと同じ家系である。点や数に落とすとき、捨てたものが答えを変える。
だから「なめらかさが落ち方を決める」は、1次元では1つの数を決める一行で、2次元では向きの関数を決める一行だった。同じ規則の顔が舞台で変わる。
この節で確かめたのは測った指数だけである。「2次元の落ち方が向きで決まる」理由は次の節で導く。
円板の J₁ は x ≥ 25 で漸近展開に切り替えて計算した。べき級数だけだと x ≳ 40 で桁落ちして発散する。
なめらかな輪郭(楕円)は指数則ではなく指数関数的に落ちるので、傾きの数字は「直線に乗らない」ことの目印であって指数ではない(R²=0.906)。
なぜ向きで決まるか。稜線は辺の法線に立ち、平均は周長しか知らない
上の節で「導いていない」と書いた理由を、Hat の回折像で作った多角形のフーリエ変換の辺の和の式から導いた。辺の和の各項 (q×d)/(q²(q·d))·[e−iq·a − e−iq·b] は辺の両端に分かれるので、頂点で集め直すと
F(q) = (1/q²) Σv [tan∠(q, tout) − tan∠(q, tin)] e−iq·v
という角の式になる(辺の和と 10⁻¹⁴ で一致)。係数は q の向きだけで決まり、大きさによらない。ここから 3 つが出る。
①一般の向きでは q⁻⁴ で落ちる。係数が定数なので |F|² ∝ q⁻⁴ となり、帯で平均すると位相が混ざって q⁴|F|² → Σv cv² になる。正方形の 30° では測った値 21.4 に対して式 21.3、Hat の 73° では 175 に対して 177 で、2% 以内に収まった。
②辺の法線の向きでは tan が発散し、稜線が立つ。その向きは辺の式に戻ると g(0)=1 で、F = Σ辺⊥q ±L e−iq·a/q となる。高さは q²|F|² → ΣL² で決まる(正方形 1.99/式 2・Hat の 6 本は 6/2/6/6/6/2 と 2.5% 以内)。断面は sinc²(qL sinθ/2) なので幅は 1/q で縮む(θ½·q·L = 2.85 → 2.80 → 2.78、式 2·1.3916 = 2.78)。「どの向きを選ぶか」の答えは辺の法線で、高さは辺の長さの二乗和である。
③全方位の平均は 2×周長/q³ になる。稜線 1 本の角積分は (L²/q²)(2π/qL) = 2πL/q³ で、稜線は辺ごとに ±n の 2 本立つ。角の寄与 q⁻⁴ は 1 桁小さい。だから ⟨|F|²⟩ = 2P/q³ となる。円板も 4πR/q³ = 2·(2πR)/q³ で、同じ式に乗る。正方形・長方形・三角形・六角形・Hat・円板の 6 つを q=100〜400 で測ると、比はすべて 1 の 7% 以内に来た(平行な辺のない三角形は 1.000)。
だから「平均すると円板と区別がつかない」は偶然でない。向きの情報は稜線=辺の法線にだけ乗り、平均はそれを周長という 1 本の長さに潰す。指数 3 は形によらない。平均は周長しか知らない。1 次元では「導関数が何階まで連続か」が指数を 1 つ決めたが、2 次元では境界の各点が「どの向きに平らか」を持ち、その向きごとに 1 次元の規則(値が跳ぶ→振幅 1/q)が働く。多角形はその向きが有限個しかない形、円はすべての向きを持つ形で、平均はその違いを消す。
これは Porod 則の 2 次元版だった。d 次元では大きい q で q−(d+1) に落ち、係数が界面の量に比例する。Cherny らの総説は式 (19) で τ = d + 1 を「よく知られた Porod 則」と呼んで Porod 1951 を引き、2 次元の円板が 1/q³ で落ちることを「obeys the Porod law」と書いている。Bray の総説も式 (69) の S(k) ∼ 1/(L kd+1) を「Porod の法則として普遍的に知られる」とし、係数の 1/L が単位体積あたりの界面の量だと述べている。2 次元で q−3 をこう呼ぶ用例は文献にある。
係数が 2P ちょうどになることは、自分で出した。半径 R の円板の指示関数のフーリエ変換は 2πR·J₁(qR)/q で、大きい x で J₁(x)² の平均が 1/(πx) だから、|F(q)|²·q³ → (2πR)²/(πR) = 4πR となる。円板の周は 2πR なので、これがちょうど 2P である。⚠️ 「2 次元版の係数は 2P」と書いた文献は見つからなかったので、ここは一般式から自分で導いた値になる。
数値で平均を取るときの注意が 2 つある。帯で平均するとき q³ を外に出すと、q⁻³ の帯平均が膨らむ(±25% の帯で 1.14 倍、円板で測ると 1.175)。q のべきは積分の内側で掛ける。角度の刻みが稜線の幅 2π/(qL) より粗いと、平均が 2 倍以上外れる(q=400 で 180 刻みは 2.35 倍、720〜4096 刻みは 1.015 で動かない)。
有限の帯・刻みで測った値で、q→∞ の極限は取っていない。平行な辺の干渉 cos(q·w) が帯に残るので正方形・長方形・Hat は 1 のまわりで数% 揺れる。
自分で動かす
下の絵は、ページを開いたその場で上の図と同じ計算をして描いている(あらかじめ描いた絵の切り替えではない)。矩形窓を選んで点数 N を増やしてみてほしい。Δt·Δf が下限に落ち着かず、増え続ける。
- Δt
- —
- Δf
- —
- Δt·Δf
- —
- 下限 1/(4π) との比
- —
- 裾の傾き
- —
- N を4倍にすると
- —
選んだ窓の形(上)と、そのスペクトルの裾(下・両対数)
見どころは「N を4倍にすると」の欄である。端で値が跳ぶ窓(矩形・ハミング)は 2 倍に近づく=√N で発散し、Δt·Δf という量そのものが定義できない。端で 0 になる窓(三角・ハン・ブラックマン)は 1.00 倍で落ち着く。ガウスだけが下限 1/(4π) にぴたりと乗る。パディングのチェックを外すと、矩形の Δf が 0 になり、ハミングが下限を割って見える。上で二段階で騙されかけたのは、この状態だった。
どう作ったか
FFT(radix-2)を依存ゼロで書き、周転円で描く角の素朴な DFT と突き合わせた(最大差 4×10⁻¹²)。Δt は |w(t)|² の分散、Δf は |W(f)|² の分散で、どちらも重心を引いてから計算している。
「自分で動かす」では、窓と N を変えるたびに、発散する窓と裾の傾きが浅い窓が同じ集合になることをその場で確かめている。前の節の角の式は、Hat の回折像の辺の和の式と 10⁻¹⁴ で一致することを確かめてから使った。
出典
- 数理
- 不確定性関係 Δt·Δf ≥ 1/(4π)(分散で定義した場合)。D. Gabor, "Theory of communication" (1946) が通信の文脈で導入し、ガウス窓で等号が成り立つことを示した。窓関数(矩形・三角・ハン・ハミング・ブラックマン)は信号処理で標準的に使われている。FFT は Cooley と Tukey (1965) の方法による
- こちらの主張
- 「端で値が跳ぶ窓では Δt·Δf が点数の √N で増える(=Δf が定義できない)」「発散する窓の集合と、裾の傾きが浅い窓の集合が一致する」はこの作品でパディング量と点数を振って確かめたもので、文献での扱いは確かめていない
- 注意
- 分離できたかの判定は「スペクトルに2つの峰が立ち、その間の谷が峰の 10% 以上下がる」という自前の基準である。基準を変えれば数字は動く(レイリー基準などの標準的な定義とは一致しない)
- 生成
- generators/gabor.js(自前の FFT・6種類の窓関数・Δt/Δf の測定・裾の傾き・分離の二分探索・STFT・図3枚。依存ゼロ・乱数ゼロ)図とこのページの「自分で動かす」は、同じ計算 gallery/assets/gabor-live.js を使っている。