第4章
離散時間信号
この章のねらい
- サンプリングの考え方と x[n] = x(nT) の記法に慣れる
- 正規化角周波数を「1サンプルあたりに進む位相」として説明できるようになる
- 離散時間の周波数は 2π 周期で、実質 ω ∈ [-π, π] の範囲しかないことを理解する
4.1 離散時間信号の表し方
フーリエ級数にフーリエ変換、道具はだいぶ揃ってきたお。でも気づいてしまったんだお。この教材、「ディジタル信号処理」のはずなのに、まだコンピュータのコの字も出てきてないお。
いいタイミングだ。この章からがその本番だ。で、いきなりだが困った事実から始める。コンピュータは連続信号をそのまま持てない。
ん? 録音した音声、普通にパソコンに入ってるお。あれは何なんだお。
あれは連続信号「そのもの」じゃない。考えてみろ。連続信号 は、どんなに短い時間にも無限個の時刻があって、そのすべてに値を持っている。0秒と0.001秒の間だけでも無限個だ。メモリが有限のコンピュータに無限個の数は入らないだろ、常識的に考えて。
むむ…。確かに全部の瞬間は無理だお。でも、全部じゃなくて、ところどころの値なら覚えられるお。
それが答えだ。一定の時間間隔 ごとに信号の値を拾って、数の列として記録する。この操作をサンプリング(標本化)と呼び、 をサンプリング周期と呼ぶ。拾った数の列はこう書く。
時刻 における値を順番に並べただけだ。この を離散時間信号と呼ぶ。
カッコが丸から角に変わってるお。誤植かお?
わざとだ。むしろこの教材で一番守る記法かもしれない。丸括弧 は連続時間、 は実数で単位は秒。角括弧 は離散時間、 はただの整数で、単位を持たない通し番号だ。「何秒の値か」ではなく「何番目の値か」。プログラムの配列 x[n] と同じ気持ちで読んでいい。
配列って言われると急に親近感が湧くお。
実際、コンピュータの中の信号は本当にただの配列だ。あと、1秒あたりに何個サンプルを取るかをサンプリング周波数と呼ぶ。
例えば音楽CDは Hz。 マイクロ秒ごとに1個、1秒あたり44100個の数で音楽を表している。
…ちょっと待つお。サンプルとサンプルの間の信号はどこに行ったんだお。 の間に信号が暴れてたら、まるごと見逃すお。捨てちゃっていいのかお?
良すぎる質問だ。結論だけ先に言うと、条件さえ満たせば、捨てたように見えた間の情報は完全に復元できる。その驚くべき定理(サンプリング定理)は第10章でやる。そこに至る伏線が、実はこの章の後半にもう現れる。
4.2 正規化角周波数
さて、信号処理の主役は今までずっとサイン波だった。なら次にやることは決まってる。サイン波をサンプリングしたら何になるかだ。その前に記号の約束をひとつ。ここからは連続時間の角周波数を大文字の 、離散時間用の角周波数を小文字の と書き分ける。
今まで って書いてたやつが に昇格したのかお。ややこしいお。
すぐ慣れる。書き分ける理由はこの直後にわかる。連続時間のサイン波 を周期 でサンプリングすると
と が必ず という積の形でセットになる。そこでこの積に名前を付ける。
これが正規化角周波数だ。離散時間のサイン波は と書ける。
単位が「rad/サンプル」…。rad/秒じゃないのかお。
そこが急所だ。 は「1秒あたりに進む位相」だった。 は「1サンプルにかかる秒数」。掛け算すると秒が消えて、 は「1サンプルあたりに進む位相」になる。離散時間の世界には「秒」が無い。あるのは という通し番号だけだから、周波数も「1個進むごとに位相がどれだけ回るか」で測るしかないわけだ。
ふむ…。具体例が欲しいお。
1 kHz のサイン波を kHz でサンプリングしてみろ。。1サンプルごとに位相が 、つまり45度ずつ進む。8サンプルでちょうど1周だな。下のデモで と を別々に動かして、 がどう変わるか見てみろ。
おー。 を上げると点がぎっしり並んで、 は小さくなるお。逆に を上げると、点と点の間で波がガバッと進むようになって が大きくなるお。
そこで気づいてほしいことがある。同じ 1 kHz の波でも、 が変われば は変わる。 は信号そのものの性質ではなく、「信号とサンプリングの組み合わせ」で決まる量だ。だから「正規化」角周波数という。サンプリング周期を基準(=1)に取り直した周波数、ということだな。
離散時間の世界に入った瞬間、「本当の周波数が何Hzだったか」は番号 の列からは見えなくなるってことかお。 だけが残る、と。
いい要約だ。コンピュータの中の信号処理は、すべてこの の世界で行われる。Hz に戻したくなったら で換算すればいい。
4.3 離散時間信号の不思議な性質
ここからが離散時間の本当に面白いところだ。 の をどんどん大きくしていったら、何が起きると思う?
そりゃ、どんどん細かく振動するんじゃないかお。連続のときはそうだったお。
ではこれを見てもらおう。 に を足してみる。
…は!? 消えたお! がまるごと消えたお!
消える理由を言ってみろ。
えーと、 は整数だから、 は の整数倍…つまり「ちょうど何周か」のズレだお。cos は1周回ったら元通りだから、影響ゼロ…。あ、そうか、 が整数じゃなかったらこうはいかないお! 連続時間の は実数だから、 と は途中の でズレるけど、離散時間は整数の瞬間しか見ないから、ズレる場面を見られないんだお!
完璧だ。つまり離散時間の世界では、周波数 のサイン波と周波数 のサイン波は、完全に同一の信号になる。 でも でも同じだ。区別がつかないんじゃなくて、サンプル列として本当に同じものだ。デモで確かめてみろ。
ほんとだお…。 と ()で、緑の点が1個も動かないお。しかも を上げていくと、途中から破線の波がだんだん遅くなってくのが不気味だお。細かくなるはずじゃないのかお。
それが2つ目の驚きだ。 が を超えると、サンプル列は というより低い周波数の波と同じに見え始める。cos は偶関数で でもあるから、結局、離散時間の周波数として意味のある範囲は
しかない。この範囲の外の は、 の整数倍を足し引きして必ずこの中のどれかに折り返される。
じゃあ離散時間の世界で「一番速い振動」は ってことかお。
そうだ。 のとき 、つまり の交互パターン。サンプル列としてこれより速く暴れる方法は存在しない。1点ごとに符号を反転する以上の変化は表しようがないからな。
…嫌な予感がするんだお。 より速い波を、知らずにサンプリングしちゃったらどうなるんだお。
式 (4.5) の通りのことが起きる。 を超えた周波数は折り返されて、まったく別の低い周波数の信号に化けて記録される。これをエイリアシング(折り返しひずみ)と呼ぶ。車のタイヤが映像で逆回転して見えるアレが実例だ。
化けるのかお…。録ったデータからは化けたかどうか分からないんだお? 怖すぎるお。
だから「サンプリングする前に 以上の成分を取り除いておく」という掟がある。この話を厳密にやるのが第10章のサンプリング定理だ。今日のところは、離散時間の周波数の地図は から までしかない、ここまで持ち帰れば十分だ。
- コンピュータは連続信号を持てない。一定間隔 で値を拾うサンプリングにより という数列(離散時間信号)にする
- 丸括弧 は連続時間、角括弧 は離散時間。 は単位の無いただの整数
- サンプリング周波数は 。正規化角周波数 は「1サンプルあたりに進む位相」[rad/サンプル]
- 同じ信号でも が変われば は変わる
- が整数なので 。 と は完全に同じ信号で、意味のある周波数は のみ
- 最高周波数は ()。これを超える成分は折り返される(エイリアシング、第10章へ続く)