サンプリングクイズ！(サンプリング定理の誤解を雑に正す 後編)

## サンプリングクイズ1

いきなりですがクイズです！

> 原信号の周波数範囲は 20kHz より大きく 30kHzよりも小さい。
> 20kHz < 原信号 < 30kHz
> 原信号を再現するために必要なサンプリング周波数は最低で何kHzか？なおフィルタは理想的なものが使えるとする。

答え
(a) 20kHz
(b) 30kHz
(c) 60kHz
(d) 120kHz

## はじめに

### 対象読者

+ 正解は(c)の60kHzに決まってる！と思った人

正解は (a) の20kHzですよ！

### 書いてる人

オーディオマニアです。
エンジニアではありません。
デジタル音声処理を学んだこともありません。
すべてネット上の情報の受け売りです。

### お願い

間違った記載や誤解を招く表現があれば指摘してください。
私の能力が足りないので記事が改善できるかわかりませんが。
一番良いのはこれより分かりやすく正しい記事を誰か書いてくれることです。

## サンプリング定理再掲

> 標本化(サンプリング)定理
>  - 元信号に含まれる最大周波数 fmax
>  - サンプリング周波数(標本化周波数) fs
>  -  fs > 2・fmax または fmax < fs/2
>  - この条件を満たせば元の情報は失わない。( = 原信号を再現できる )

<https://www.kanedayyy.jp/asp/ASP/DSPseminar14.pdf>

そのまま再構成されるわけではなくsinc関数で補完( = 理想ローパスフィルタで高域をカット)する必要があります。

## 誤解その1

今回のサンプリング定理の誤解は

**サンプリング定理の裏が正しいと勘違いする**

サンプリング定理はもちろん正しいです。けど勝手に拡大解釈しては駄目です。
高校生の頃に習ったことを思い出しましょう。
命題の「逆」「裏」「対偶」で真偽が一致するのは「対偶」です。「裏」「逆」は成り立つとは限りません。

すなわちサンプリング定理の逆・裏
+ 逆: 原信号の情報が失われないならば fmax < fs/2
+ 裏: fmax < fs/2 でないならば原信号は再現できない

はどちらも正しいとは限らないのです。
これは間違って解説しているサイトもあるので注意してください。

**「一体いつからサンプリング定理の逆・裏が正しいと錯覚していた？」**

## 雑に説明してみる

サンプリング周波数20kHzで考えていきます。

![fig01](/img/sampling03/fig01.png)![fig01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/4d869567-a5fc-1e58-508e-e16c617cd6e8.png)


0Hz <= 原信号 < 10kHz、すなわちzone1にある場合には fmax<fs/2となるので情報が失われません。これが通常のサンプリング定理です。

拡張して考えます。

![fig02](/img/sampling03/fig02.png)![fig02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/83facc3c-b59d-49db-cbcf-76ce580189de.png)


原信号がzone3にある場合、1つのzoneだけなのでサンプリング時にエイリアスは入りません。
原信号を復元するにはzone3以外をフィルタでカットすれば良いことになります(20kHzの理想ハイパスフィルタと30kHzの理想ローパスフィルタ)。

原信号がどれか1つのzone内に帯域制限されていればサンプリング周波数より遥かに高い周波数でも原信号を再現できます。

実際には信号を再現するのではなく、zone1が原信号を周波数変換したものになるのでそのままzone1を利用するようです。

試しにzone3のデータが復元できるかノイズ信号で見てみます。
(図は長い波形の一部分だけ切り出しています)

ノイズを作成して、20kHz-30kHzに帯域制限します。
これを20kHzでサンプリングします。

![fig03](/img/sampling03/fig03.png)
![fig03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/16836d3d-3577-e504-a506-aab884974964.png)

明らかに半波長よりも長い間隔でしかサンプリングできてません。

サンプリングした結果
![fig04](/img/sampling03/fig04.png)![fig04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/12eda3b3-46d2-27a5-cab2-f18335527f79.png)


このデータから原信号が復元できるのか？  
一見、不可能に思えます。しかし原信号が帯域制限されていれば可能なのです。

離散データからバンドパスフィルタでエイリアスを除去します。

![fig05](/img/sampling03/fig05.png)![fig05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/565a307b-3c7e-8fd2-7a75-0f6e4803d3fa.png)


このように原信号よりも低いサンプリング周波数でも波形が再現できます。

## サンプリングクイズ2

> 原信号(複素信号)の周波数範囲が0Hz以上 +20kHz未満とする。
> 0 < 原信号 < +20kHz
> 原信号を再現するために必要なサンプリング周波数は最低何kHzか？なおフィルタは理想的なものが使えるものとする。

(a) 10kHz
(b) 20kHz
(c) 40kHz
(d) 80kHz

これは簡単でしたね。
答えは(b)の20kHzです。

fs/2というのは実数信号の場合で、複素信号ではサンプリング周波数は信号帯域幅より大きければ良いのです。

## 誤解その2

**サンプリング定理のナイキスト周波数fs/2を複素数でもそのままだと思ってしまう**

まあ、そんな人はいないか

## 雑な説明2

複素信号(直交信号)を使えば原信号の帯域幅よりも大きいサンプリング周波数ならば情報が失われません。
fs/2の周波数でも問題ありません。
サンプリング周波数は実数データの場合の1/2ですが複素信号なのでサンプリングしたデータサイズは変わりません。

これも試しに計算してみます。

まず帯域を制限するためのフィルタを作ります(理想フィルタではないのでマージンを少し取ります)。
複素信号の場合、負の周波数領域にもエイリアスが出るのでローパスフィルタではなく0-20kHzのバンドパスフィルタが必要になります。
実数で10kHzのローパスフィルタを作ります。
![fig06](/img/sampling03/fig06.png)![fig06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/f7b46280-712c-5f2e-151e-0aea8ceb23e6.png)

実数で作った10kHzのローパスフィルタは-10kHz〜+10kHzのバンドパスフィルタになります。
![fig07](/img/sampling03/fig07.png)![fig07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/ddfdbe09-c6ea-66d0-4d4c-463b595c3d08.png)


これに+10kHzの複素信号を乗算すれば0〜20kHzの複素信号のバンドパスフィルタができます。
![fig08](/img/sampling03/fig08.png)![fig08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/872afd79-dc96-0b1c-a6c0-3b0d5e0fff0a.png)

![fig09](/img/sampling03/fig09.png)![fig09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/e1dbdff0-a15c-16ff-1c47-f5aec307c30d.png)

このフィルタで帯域制限していきます


まず複素信号のノイズ信号を作ります。
これを0-20kHzの複素フィルタで帯域制限します。
そしてこれを20kHzでサンプリングします。

![fig10](/img/sampling03/fig10.png)![fig10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/be208c94-12bc-fd63-0205-bae9ae6c43d1.png)


この離散データを0〜+20kHzのバンドパスフィルタでエイリアスを除去します。

![fig11](/img/sampling03/fig11.png)![fig11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547684/2f409d0e-f296-d451-c663-e0905b651d20.png)


このように元データの波形がほぼ完全に復元できます

## おわりに

サンプリング定理の話は今回で終了です。
お楽しみいただけたでしょうか？