diff --git a/wip/dsp.md b/wip/dsp.md index 12c7278..ebfef1c 100644 --- a/wip/dsp.md +++ b/wip/dsp.md @@ -199,17 +199,28 @@ $S(\omega)$ はその内訳である。どの周波数の成分がどれだけ ハイパスフィルタはその逆で、高い周波数を通し、低い周波数を削ぐ。 バンドパスフィルタは特定の帯域だけを通し、それより低い成分も高い成分も減衰させる。 +バンドパスフィルタは普通にローパスとハイパスを組み合わせたものと見なせる。 +どちらを先に適用しても結果は変わらない。線形時不変システムだからの可換性です。 + +これらのフィルタは全て、カットオフ周波数という境界を持つ。 +理想的には、境界の手前までゲインが1、超えた瞬間にゲインが0になる。垂直な壁である。 +しかし、そのような理想は実現できない。 + +現実のフィルタは、カットオフ周波数の周辺に曲線を持つ。急な減衰ではなく、緩やかに下る斜面になる。 +理想の壁に近づけようとすると、設計が複雑になり、部品が増え、コストが上がる。 +時には、緩やかな斜面で十分である。 + 離散時間においては、有限インパルス応答フィルタと無限インパルス応答フィルタの区別がある。 前者のインパルス応答はある時点で終わる。後者は終わらない。 ### 5. 離散化 フィルタでは、無限に高い周波数を切るかどうかは自由である。 -デジタルでは、最小の時間単位を決めなければならない。それより細かいものは全て捨てることになる。 +デジタルでは、最小の時間単位を決めなければならない。それより細かいものは全て捨てることになる。これで話が長くなる… と、時間の話から入ったが、離散化の軸は時間だけではない。振幅もである。 デジタルシステムが振幅を表現できる精度は、ビット深度によって決まる。 -$N$ ビットのシステムは $2^N$ 個の離散的な振幅レベルを持つ。 +$N$ ビットのシステムは $2^N$ 個の離散的な振幅レベルを持つ。別にこういう二進数の話はしなくていいはずですが。 各サンプルの値は、最も近いレベルに丸められる。この丸め誤差を量子化ノイズと呼ぶ。 表現できる振幅の上限と下限は、設計とハードウェアによって固定されている。ADCやDACの基準電圧がそれを決める。 その境界を超えると、ハードクリップが起きる。 @@ -220,13 +231,20 @@ $N$ ビットのシステムは $2^N$ 個の離散的な振幅レベルを持つ ここで問題がある。前の節で述べたように、アナログ信号は原理的には無限大まで周波数成分を持ちうる。 しかし有限のサンプリング頻度では、表現できる周波数に上限がある。全てを保存することはできない。 -では何が失われ、何が残るのか。 -もし信号の中に高すぎる周波数成分がなければ、サンプリングによって失うものは実質的にない。 -これが離散化を正当化する前提である。 +その上限を超える成分がサンプリング時に残っていると、問題が起きる。 +対策として、サンプリングの前にローパスフィルタで高周波成分を除去する。 -ナイキストの定理が、これを定量化する。 +ではそのフィルタのカットオフ周波数をどこに設定するか。 +それは用途次第である。例えば人間の聴覚はおよそ20kHzまでしか知覚できない。 +音声信号であれば、20kHz以上を保持する理由はない。 + +ただし、ここで単純に20kHzでローパスをかけて20kHzでサンプリングすると、情報は失われる。 +サンプリング周波数と保存したい帯域の上限が同じでは、再構成できない。余裕が要る。 + +ナイキストの定理が、その余裕を定量化する。 サンプリング周波数を $F_s$ としたとき、$F_s/2$ より低い周波数成分は忠実に再構成できる。 -人間の聴覚がおよそ20kHzまでであることを思い出すと、$F_s$ が40kHzを超えていれば聞こえる範囲はカバーできる。 +つまり保存したい帯域の上限の2倍でサンプリングすれば、再構成が保証される。 +人間の聴覚が20kHzまでなら、$F_s$ が40kHzを超えていれば聞こえる範囲はカバーできる。 余裕を持たせて、一般的には44.1kHzや48kHzが使われる。192kHzは人間以外の何かのためにあるのだろう。 定理が言うのはそれだけである。$F_s$ をどこに設定すべきかは用途が決める。 $F_s/2$ を超える成分は再構成できない。これをエイリアシングと呼ぶ。