概要
秋月電子に、短い音声を録音再生するキットがあります。これは、HK829 という録音再生 IC を使用して、最大 80 秒の音声を録音・再生できるというものです。
今回は、録音再生専用チップを使用せずに、Raspberry Pi Pico を使用して似たようなものを作ってみます。
仕様
大まかな仕様は、以下のようにしたいと思います。
- 機能: 音声による短い伝言を録音・再生する。
- 音声合成方式は PCM。
- 扱うのは音声のため、周波数帯域は 3.5 kHz 程度。
- 扱う周波数帯域が 3.5 kHz なので、サンプリング周波数は 8 kHz 程度。
- 量子化ビット数は 8 ビット。
- 録音できる時間は 30 秒程度。
- 録音できる伝言数は 1 個。
- 音声データのバックアップは考慮しない (電源を切ったら消える)。
- 電源は USB バスパワーを使用。
ブロック図
基本ブロック図
音声伝言板のブロック図は以下の通りです。

問題点
基本的には上記ブロックでよいのですが、以下の問題があります。
サンプリング周波数が 8 kHz であるので、サンプリング定理により、ナイキスト周波数である 4 kHz 以上の信号をアナログ フィルター (ローパス フィルター: LPF) でカットする必要があります (十分にカットしないと、ノイズの原因となります)。ただ、信号帯域 3.5 kHz に対してナイキスト周波数 (4 kHz) が近接しているため、急峻な特性のフィルターが必要となり、フィルターの次数が高くなります。したがって、外付け部品点数も増加します。
フィルターの部品点数は減らしたいため、次のように改良を行います。
問題点解決のための改良
上記の問題を解決するため、以下のような構成にします。
- 仕様の 4 倍の 32 kHz でサンプリングを行う。
- デジタル フィルターを用いて、4 kHz 以上の信号をカットする。
- 1/4 ダウン サンプリングを行い、サンプリング周波数を 8 kHz に落としてメモリに記録する。
こうすることにより、信号帯域 (3.5 kHz) とナイキスト周波数 (32 kHz / 2 = 16 kHz) が十分に離れるため、緩やかな特性のフィルターでよく、必要なアナログ フィルターの次数を低く抑えられます。また、デジタル フィルターはソフトウェアで処理するため、部品点数を増やさずに急峻な特性のフィルターを実装することができます。
再生時は逆に 4 倍オーバー サンプリングを行い、サンプリング周波数を 32 kHz に上げてから D/A 変換を行い、アナログ フィルターを通します。これにより、録音時同様、低い次数のアナログ フィルターで済ますことができるとともに、アパーチャー効果 (ナイキスト周波数に近い周波数成分の振幅が減衰する現象) を低減できます。
改良後のブロック図を以下に示します。

上記の図ではアナログ フィルターが入力と出力にそれぞれありますが、録音と再生は同時に行わないため、実際はアナログ マルチプレクサで切り替えることにより、1 つのアナログ フィルターを入出力兼用にします。

ユーザー インターフェース
ユーザー インターフェースは、インジケーターに Raspberry Pi Pico オンボードの LED、操作用にタクト スイッチを 3 個 (録音用、再生用、停止用) 使用します。
録音時のインターフェースの仕様は以下の通りです。
- 録音スイッチを 1 秒以上押すと、録音を開始する (前回の録音内容は消去される)。
- 録音中は LED が点灯する。
- ストップ スイッチを押すか、メモリがいっぱいになった時点で録音を終了し、LED を消灯する。
- 録音中は、ストップ ボタン以外の操作を受け付けない。
再生時のインターフェースの仕様は以下の通りです。
- 再生スイッチを押すと、再生を開始する。ただし、何も録音されていなければ何もしない。
- 再生中は LED が点灯する。
- ストップ スイッチを押すか、すべてのデータを再生し終わったら再生を終了し、LED を消灯する。
- 再生中は、ストップ ボタン以外の操作を受け付けない。
使用する Raspberry Pi Pico について
今回は以下の理由により、Raspberry Pi Pico 2 を使用します。
- 音声データを保存するために、大量の RAM 領域が必要 (30 秒で約 240 KB)。
- デジタル フィルター処理のために、リアルタイムに大量の浮動小数点演算を行う必要がある (Raspberry Pi Pico 2 には FPU が搭載されている)。