方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)

PDMマイクとI2Sの違い:PDMでは、なぜデシメーションフィルタが必要なのか?

pdm-i2s-difference
この記事は約6分で読めます。

はじめに

双方向の音声通信を実装するにあたり、PDMマイクとI2Sマイクという2つの音声認識マイクがあることを知ったので違いをまとめておく。 

PDM:音声信号をパルス密度で表現

PDM(Pulse Density Modulation)マイクは、デジタル方式のマイクで、音声信号をパルスの密度で表現する

  • 簡素なハードウェア構成:PDMは配線がシンプルで、低コストなマイクによく使われる。
  • 処理が複雑:PDM信号はそのままでは音声として使えず、デシメーションフィルタ(高周波成分を取り除く処理)が必要になる。この処理をプログラムで実装する必要があるため、ソフトウェアの負担が増える。

 

音声信号を直接「1ビットのパルス列」として出力し、音が大きい部分は「1」の密度が高く、小さい部分は「0」の密度が高くなる。変換された信号は「高密度の1と0」で構成されており、人間の可聴領域(20Hz〜20kHz)を超える高周波成分も含んでいる。

この高周波成分が原因で、スピーカーから音声を出力しても「ノイズ混じり」や「ひずみ」が発生するため、高周波成分は取り除いて、人間が聞き取れる滑らかな音声波形を得る必要がある。

https://jp.sameskydevices.com/blog/pdm-vs-i2s-comparing-digital-interfaces-in-mems-microphones

 

I2Sマイク:音声データをPCM形式で送信

I2S(Inter-IC Sound)マイクは、音声データをI2Sプロトコルで伝送するデジタルマイク。I2Sは音声用の標準インターフェースであり、オーディオ機器などにも幅広く使われている。

  • シンプルなソフトウェア処理:I2Sマイクは、音声データがすでにPCM(パルス符号変調)形式で出力されるため、特別なフィルタ処理が不要で、データをそのまま扱える。
  • 高音質:I2Sはノイズの影響を受けにくく、PDMよりも音質が良い傾向がある。
  • 外部接続例:INMP441などのI2SマイクはESP32に簡単に接続できる。

 

I2Sでは、音声データをPCM(Pulse Code Modulation)形式で送信する。PCMは音声波形を直接デジタルデータに変換したもの。この変換過程では、アナログ信号を一定の間隔でサンプリングし、それを量子化してデジタル値として記録する。

 

アナログ音声のサンプリング

  • アナログ音声を一定のサンプリングレート(例:44.1kHz)でデジタルデータに変換する

量子化(ビット深度)

  • 音声の振幅を16ビットや24ビットなどのデジタル値で表す

I2Sプロトコルでの伝送

  • 生成されたデジタルデータが左チャンネル・右チャンネル交互に送信されるシリアル通信方式で送られる。
  • クロック信号(SCK)、ワードセレクト信号(WS)、データ信号(DATA)の3本のラインで、音声データがタイミングよく送られる。このI2Sプロトコールで必要な3本の信号線の役割は後述

 

https://jp.sameskydevices.com/blog/pdm-vs-i2s-comparing-digital-interfaces-in-mems-microphones

 

 

I2SとPDMマイクの具体例

アナログ信号(連続波形)

仮に、アナログの音声波形が以下のような波形だとする。

アナログ波形:  ↗︎   ↘︎   ↗︎   ↘︎   ↗︎
振幅値(イメージ):0.2  0.5  0.8  0.5  0.2

I2Sマイク:44.1kHz / 16ビット量子化の例

  • 量子化範囲:0〜65,535
  • 0.2の振幅 → 13,107(65,535 × 0.2)
  • 0.5の振幅 → 32,767(65,535 × 0.5)
  • 0.8の振幅 → 52,428(65,535 × 0.8)

デジタル化後のデータ(16ビット):

13,107  32,767  52,428  32,767  13,107

量子化の時点で音声データは「離散的なデジタル値の連なり」になっている。これが音楽データや音声ファイルの内部で保持される形。

PCMデータとしてそのまま扱えるため、デシメーションやフィルタリングを必要とせず、スピーカーで再生する際はそのままアナログ信号に戻される。

PCMは「振幅」と「時間」の2次元で音声を表現する。

 

PDMマイク:3MHz / 1ビットの例

PDM信号例: 110101111011111011010

 音が大きいほど「1」の密度が増し、小さいほど「0」が増える。PDMは、量子化された値ではなく「1と0の密度」で音を表現する方式であり、高い解像度の音を1ビットで表現するため(1ビットでしか表現できないため)、サンプリング周波数を非常に高くする必要がある。CD音質が44.1kHzであるのに対して、PDMは2〜3MHzなどの高サンプリングレートで処理される。

 言い換えると、瞬間的な振幅を直接表現できず、時間方向(密度)だけで音の大きさを間接的に表す一次元的な方式のため、1回のサンプリングで振幅を表現する手段がないため、時間方向に大量のデータを蓄積して初めて振幅がわかる。PDMは「時間」の1次元でしか音を表現できない。

 結果として高サンプリングにより「1と0のパルスが高速で切り替わる」状態が発生し、この高速の切り替え自体が、人間の耳には聞こえない高周波成分となる。結果として、信号には音声成分(低周波)と、不要な高周波成分が同時に含まれることになる。

高周波成分を事後的にデシメーションフィルタ(ローパスフィルタ)を使って取り除く必要がある。

 

I2Sプロトコールで必要な3本の信号線:BLCK/SCK・WS・DATA

  • BCLK / SCK:マスター(例ESP32)とスレーブ(例:INMP441マイク)の間でデータ転送のタイミングを決めるクロック信号。BCLK(Bit Clock)ともSCK(Serial Clock)とも呼ばれる。表記はメーカーによって異なるのみでBCLK=SCKと考えて良い
  • WS:左右チャンネルの切り替えを制御する信号。ステレオ音声では「左」と「右」で異なる音声データをイヤホンやスピーカーに送る必要があり、左のスピーカーから出る音と右のスピーカーから出る音が異なることで、立体感や広がりが生まれる。ただ必須ではなくモノラル音声で良い場合は配線しなくて良い。L/R(Left/Right)とも記載される
  • DATA:実際の音声データを送るライン。

BCLKの立ち上がりごとに1ビットが送信される。BCLKがないと、INMP441がデータを出力するタイミングが不定になり、ESP32が正しく音声データを受信できない。

WSが「0」のときに左チャンネル(L1, L2, L3…)、WSが「1」のときに右チャンネル(R1, R2, R3…)が送られる。

BCLK:  |‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|‾|_|
WS:    |‾‾‾‾‾‾‾‾|___________|‾‾‾‾‾‾‾‾|
DATA:  L1 L2 L3  R1 R2 R3  L4 L5 L6  R4 R5 R6

 

タイトルとURLをコピーしました