4. 離散時間信号

4.1 離散時間信号の表し方

やらない夫
前回までは,連続時間信号について考えてきたわけだ.ここからは,離散時間信号を考えていくことにする.

やる夫
時間軸上で飛び飛びの時刻にしか値を持たないってことだお.

やらない夫
そうだな.ある一定の時間間隔で飛び飛びの時刻のみを考える.その時間間隔がどんな長さかは,状況によってマチマチだ.1秒ごとかも知れないし,1分ごとかも知れない.はたまた1年ごとかも知れないし.1ミリ秒ごとかも知れない.ともかく一定時間間隔で値を持つとしよう.

やる夫
OKだお.

やらない夫
一番わかりやすいのは,連続時間信号から一定時間間隔で値を取り出してくる,という考え方だな.例えば音声だと,空気中を伝播する音は,連続時間信号なわけだ.これをマイクロフォンで電気信号に変換する.ここでもまだ連続時間信号だ.その後で,例えば 20 マイクロ秒ごとに電圧を測って,コンピュータに取り込む.この時点で離散時間信号になるわけだ.こうやって連続時間信号から離散時間信号を作り出すことを,サンプリング,あるいは日本語訳で,標本化という.

やる夫
音楽用語のサンプリングと関係あるのかお? 他の曲の一部とか生楽器の音とかを取り込んで使うことをサンプリングって呼ぶお.

やらない夫
ああ,語源としては同じだな.何らかの集合の一部だけ取り出したものをサンプル (標本) といって,取り出す行為自体をサンプリング (標本化) というんだ.統計調査で全数を調べる代わりに一部だけ調べることをサンプリング調査とか標本調査っていうだろ.楽曲の一部を取り出すのもサンプリングだ.連続時間信号の一部を取り出して離散時間信号にするのもサンプリングだ.

やる夫
生楽器の音をディジタルシンセサイザに取り込むのは,楽音の一部を取り出すという意味でもサンプリングだし,連続時間信号から離散時間信号を取り出す意味でもサンプリングなんだお.面白いお.

やらない夫
話を戻そう.サンプリングするときの時間間隔のことをサンプリング周期,あるいは標本化周期などと呼ぶ.記号で書くときは $ T_$s なんかをよく使う.添え字の s は sampling の s のつもりだ.その逆数がサンプリング周波数 (標本化周波数) $ f_$s で,単位は Hz だな.$ 2\pi$ をかけるとサンプリング角周波数 (標本化角周波数) $ \Omega_$s になって単位は rad/s だ.さっきの例でいうと,20 マイクロ秒ごとに音声を取り込む場合は, $ T_$s$ = 20 \times 10^{-6}$ [s], $ f_$s$ = 50
\times 10^3$ [Hz], $ \Omega_$s$ = 100\pi \times 10^3$ [rad/s] になる.

やる夫
なんかいっぱい出てきたけど,まあわかるお.

やらない夫
そんな風にサンプリングによって作られた離散時間信号は,例えば

$\displaystyle \cdots,   f(-2T_$s$\displaystyle ),   f(-T_$s$\displaystyle ),   f(0),   f(T_$s$\displaystyle ),   f(2T_$s$\displaystyle ),   \cdots$ (4.1)

みたいな値が並んだものなわけだ.例えばコンピュータのプログラムで扱うなら配列か何かに入れておくことになるだろう.

やる夫
まあそうすると思うお.

やらない夫
そうやって考えて,離散時間信号を

$\displaystyle \cdots,   f[-2],   f[-1],   f[0],   f[1],   f[2],   \cdots$ (4.2)

てな風に書くことが多い.サンプリング周期がどんな値だったかは気にせずに,時刻が整数のところでのみ値を持っていると考えるんだな.角括弧は,前回も出てきたが,括弧の中身が整数のときに使うことにする.


\includegraphics[scale=0.5]{fig_dtsig/sampling_ft_fn.eps}

やる夫
てことは,この場合の時間の単位は秒ではないってことかお.

やらない夫
そうだな.時間 [s] を,サンプリング周期 [s] で割って正規化したものを新たに時間だと考え直していることになる.正規化時間とでも呼べばいいかな.正規化時間は無次元量だ.単位はない.単位がないとわかりにくい場合は,頭の中で「1サンプル,2サンプル…」と数えるといいかもな.

やる夫
まあ,配列の一種だと考えれば,そんなに違和感はないお.

やらない夫
ただし,処理結果をまた連続時間に戻して考えたり,連続時間との相互関係を考えたりする場合には,「サンプリング周期がいくらだったのか」を思い出さないといけないので,そこは注意しておいてくれ.

4.2 正規化角周波数

やらない夫
そういう「正規化された時間」を考えているときは,周波数の方も「正規化」して考えてやらないといけない.これが離散時間信号を考えるとき特有の注意点だ.

やる夫
えーっと,どういうことだお?

やらない夫
まず復習だ.普通の周波数ってどういう意味だった?

やる夫
馬鹿にしないで欲しいお.単位時間つまり 1 秒あたりに何回振動するかを表しているんだお.だから秒の逆数の Hz が単位なんだお.

やらない夫
じゃあ,今の「正規化された時間」の場合の周波数ってどういう意味になる?

やる夫
時間の単位が無次元になるんだお.だから,無次元の逆数で,…あれ? 周波数も無次元かお? それってどういう意味だお…

やらない夫
さっき言った通り「時間の単位は『サンプル』である」と考えるとわかりやすいかもな.1 サンプル時間だけ経過する間に何回振動するか,を表すことになる.

やる夫
ああ,そうなるのかお.

やらない夫
同じく,角周波数はどうなる?

やる夫
普通の角周波数が「1 秒あたりで何 rad 位相が進むか」を表すので,同じように考えると「1 サンプル時間で何 rad 位相が進むか」ってことなのかお?

やらない夫
その通りだ.その「1 サンプル時間で何 rad 位相が進むか」を正規化角周波数と呼んでいる.単位は rad だ.

やる夫
んー,角度の単位と同じなのかお.

やらない夫
そうなるな.これも「rad/sample」みたいな単位だと思っておく方が理解しやすいと思う.実際には (正規化) 時間が無次元なので,結果としてただの rad になるんだけどな.

やる夫
紛らわしいお.

やらない夫
記号としては,この正規化角周波数を小文字の $ \omega$ で表すことにしよう.今までの普通の角周波数を $ \Omega$ と大文字で書いてきたのは,これと区別するためだ.

やる夫
あー,前にそんなこと言ってたお.

やらない夫
普通の角周波数のことを,区別のためにわざと「非正規化角周波数」と呼ぶこともある.非正規化角周波数 $ \Omega$ と正規化角周波数 $ \omega$ の間には

$\displaystyle \omega$ $\displaystyle = \Omega  T_$s (4.3)

の関係がある. $ T_$s はさっき出てきたサンプリング周期だな.この関係は理解できるか?

やる夫
ええと…,1 秒あたり何 rad 進むかが $ \Omega$ なんだお.で, $ T_$s は 1 サンプル時刻が何秒かを表しているんだったお.だから,これらをかけたら,1 サンプル時刻で何 rad 進むかになるわけだお.

やらない夫
そういうことだな.だからサンプリング周期が 1 秒の場合は,$ \Omega$$ \omega$ は一致する.

やる夫
混乱してきたお.

やらない夫
具体的な信号を考えてみるといいかな.例えば

$\displaystyle x[n]$ $\displaystyle = \cos{\omega_1 n}$ (4.4)

という離散時間信号を考えようか. $ \omega_1 = \pi/4$ [rad] のときのグラフをかくとどうなる?

やる夫
$ n$ は整数なわけだお.$ n$ が 1 増えると,cos の位相が $ \pi/4$ 進むわけだから,$ n$ が 8 増えたときにちょうど cos が 1 周することになるお.


\includegraphics[scale=0.5]{fig_dtsig/sampling_cos.eps}

やらない夫
OK. $ \cos{\frac{\pi}{4} n}$ は周期 8 の周期信号というわけだな.周期と角周波数の関係は正規化されていない場合と同じで, $ 8 = 2\pi/(\pi/4)$ になっているわけだ.

やる夫
なるほどだお.

やらない夫
もう一度まとめると,離散時間信号を扱うときは,時間を整数で,つまり正規化時間で考えて,角周波数も正規化角周波数で考えることになる.この考え方によく慣れておいてくれ.離散時間信号の話をしているときは,特に断らない限り,単に「角周波数」といったら正規化角周波数のことを指しているので注意してくれ.

やる夫
「正規化角周波数」はわかったけど,「正規化周波数」の方は使わないのかお?

やらない夫
そう言われてみると,あまり使わないな.なんでだろうな.

やる夫
やらない夫もわからないのかお.

4.3 離散時間信号の不思議な性質

やらない夫
ところで離散時間信号では,連続時間のときの常識が通用しない場合があるんだ.そういう例について話しておこうと思う.

やる夫
なんだお,どきどきするお.

やらない夫
さっき,

$\displaystyle x[n]$ $\displaystyle = \cos{\omega_1 n}$ (4.5)

の周期を $ \omega_1 = \pi/4$ の場合について考えただろう.同じことを $ \omega_1 = 2$ について考えるとどうなる?

やる夫
なんだ,そんなの同じく考えればいいんだお? 角周波数が $ 2$ なんだから,周期は $ 2\pi / 2 = \pi$ になるお.

やらない夫
本当にそう思うか?

やる夫
…? そりゃ思うお.

やらない夫
グラフをかいてみてくれ.

やる夫
簡単だお.時刻が 1 進むごとに 2 [rad] 位相が進むんだお.それで,時刻が $ \pi$ 進んだときにちょうど cos が 1 周…,あれ? $ \pi$ は整数じゃないから,ちょうど cos が 1 周するようなところに信号の値は無いんだお.これってどうなるのかお….


\includegraphics[scale=0.5]{fig_dtsig/sampling_cos_n2.eps}

やらない夫
そこが核心だ.つまり,$ \cos{2n}$ は周期信号じゃないんだ.三角関数とか,あとは複素指数関数もそうだが,離散時間の場合は常に周期的とは限らない.連続時間で考えたときにちょうど 1 周するような時刻がたまたま整数になっているときだけ,離散時間でも周期的になる.この辺が離散時間信号の第一の落とし穴だ.

やる夫
うー,意地悪だお.三角関数が周期的じゃないなんて,気持ち悪いお.…って「第一」のって何だお.まだあるのかお.

やらない夫
ああ.そしてこっちの方がもっと気持ち悪いかも知れない.結論を一言でいうと,離散時間の三角関数や複素指数関数は,角周波数を $ 2\pi$ 増やすと元の関数に戻る.

やる夫
元に戻る? 何言ってるかさっぱりわからんお.

やらない夫
つまり,こういうことだ.また角周波数 $ \omega_1$ の cos 関数を考えよう.

$\displaystyle x[n]$ $\displaystyle = \cos{\omega_1 n}$ (4.6)

やる夫
さっきと同じだお.

やらない夫
この関数で,角周波数が $ 2\pi$ だけ大きくなったらどうなる?

やる夫
どうなるって,周波数が大きくなるんだから,振動が速くなるお.式で書くなら $ \omega_1$ のところに $ \omega_1 + 2\pi$ を代入するだけだお.

  $\displaystyle \cos{(\omega_1 + 2\pi) n}$ (4.7)

これがどうかしたかお?

やらない夫
もう少し変形してみようか.

  $\displaystyle \cos{(\omega_1 + 2\pi) n}$ (4.8)
$\displaystyle =$ $\displaystyle \cos{(\omega_1 n + 2\pi n)}$ (4.9)
$\displaystyle =$ $\displaystyle \cos{\omega_1 n}$ (4.10)
$\displaystyle =$ $\displaystyle x[n]$ (4.11)

これが任意の整数 $ n$ について成り立つ.cos の位相が $ 2\pi n$ 増えるってことは $ n$ 周して元に戻るってことだからな.

やる夫
$ x[n]$ の角周波数を $ 2\pi$ 増やしたらまた $ x[n]$ になったってことだお.…えっ? これどういうことだお?

やらない夫
今の話は $ \omega_1$ の値によらず成り立つ.sin でも,複素指数関数でも同じだ.つまり,何か適当な三角関数や複素指数関数があったとして,その角周波数を $ 2\pi$ 大きくしたら,元の関数に戻るってことだ.

ポルナレフ
あ…ありのまま 今 起こった事を話すぜ!

『おれは 角周波数を上げていたと思ったら いつのまにか元の関数に戻っていた』

な… 何を言ってるのか わからねーと思うが おれも 何をされたのかわからなかった…

やる夫
いや,あんた誰だお.

やらない夫
まあ,実際あり得ないことだろ,連続時間の常識的に考えて….ところが,離散時間の世界ではむしろこれが常識なんだ.

やる夫
よくわからんお.どうしてそんなことが起きるんだお.

やらない夫
「角周波数を $ 2\pi$ 増やす」というのは,どういう意味になる?

やる夫
ええと,正規化角周波数なんだから,1 サンプル時間あたりに進む位相が $ 2\pi$ 増えるってことだお.つまり,1 サンプル時間あたりに振動する回数が 1 回増えるってことだお.

やらない夫
そうだな.グラフで考えようか.これが $ \cos{\omega_1 n}$ だ.1 時刻で $ \omega_1$ だけ位相が進んでいる.点線が連続時間のコサイン関数で,サンプリングしたものを実線の縦棒で描いている.


\includegraphics[scale=0.5]{fig_dtsig/sampling_cos_w1.eps}

やる夫
そうなるお.

やらない夫
角速度が $ 2\pi$ 増えるってのは,1 時刻に「もう 1 周分だけ」余計に回るってことだ.それを一点鎖線で示そう.


\includegraphics[scale=0.5]{fig_dtsig/sampling_cos_w1_2pi.eps}

やる夫
あー,各サンプル時刻だけ見たら全く同じだお! 余計に回るのはちょうど1 周だけから,1 時刻後の位相は同じになるんだお.

やらない夫
そういうことだ.あくまで時刻が整数のところの値しか考えないってことに注意しなくちゃならない.三角関数とか複素指数関数を見ると,つい時刻間の点線の部分を頭の中で想像してしまいがちだが,実際には点線の部分は「存在しない」んだ.だから,角周波数が $ 2\pi$ 増えるごとに元の信号に戻ってしまう.

やる夫
うーん,一応納得はしたけど,やっぱり不思議だお.

やらない夫
慣れるしかないかな.具体的な信号を見てみるとわかりやすいかも知れない.例えば, $ \cos{\omega t}$ を角周波数変えながらプロットしてみるとこんな風になる.上から順に $ \omega$0 から $ 2\pi$ まで増えていっている.横軸は時間で,点線は,連続時間信号だった場合のプロットだ.同じものが離散時間信号だと縦棒で示した点になる.


\includegraphics[scale=1.0]{cos_0_2pi.eps}

やる夫
大軍だお.

やらない夫
連続時間だと角周波数が増えるにしたがってどんどん振動が速くなっていく.これはわかるな? ところがこれをサンプリングすると, $ \omega =
2\pi$ $ \omega = 0$ と同じになる.つまり直流に戻るんだな.

で,同じように $ 2\pi$ から $ 4\pi$ まで角周波数を増やしていくとこうなる.


\includegraphics[scale=1.0]{cos_2pi_4pi.eps}

やる夫
$ 2\pi$ を過ぎて,そのまま角周波数を増やしていっても,0 〜 $ 2\pi$ の間の繰り返しになってるわけだお.

やらない夫
そういうことだ.もう一つ気づいて欲しいのは,離散時間信号だと $ \omega =
\pi$ のときが一番振動が速いってことだ.そこから $ 2\pi$ にかけてどんどん遅くなっていって直流に戻る.

やる夫
あー,つい点線を見てしまうけど,縦棒だけを見ると, $ \omega =
\pi$ を境に対称に直流まで戻っていくお.

やらない夫
なので,繰り返しの区間が 0 〜 $ 2\pi$ だと思わずに,$ -\pi$$ \pi$ だと考える方がわかりやすいだろうな.実際,ディジタル信号処理ではそのように考えることが多いんだ.

角周波数 0,つまり直流を中心として,そこからちょっと角周波数が増えると小さな正の周波数になって,ちょっと減ると小さな負の周波数になる.正とか負の周波数っていう概念は以前話した通りだな.そして最も高周波なのが,角周波数が $ \pi$ あるいは $ -\pi$ のときだ.この範囲外に角周波数を上げようとしても,結局 $ -\pi$$ \pi$ の範囲を繰り返すだけになる.

やる夫
そう言えば,周波数成分を考えるときは,正の周波数と負の周波数を組にして考えるとわかりやすかったんだお.そういう点でも,$ -\pi$$ \pi$ の範囲で考える方が便利そうだお.

やらない夫
というわけで,三角関数にしろ複素指数関数にしろ,角周波数ってのは,$ -\pi$$ \pi$ の範囲だけを考えれば十分だってことだ.この話は今後かなり重要になってくるので,よく理解しておいて欲しい.

swk(at)ic.is.tohoku.ac.jp
2016.01.08