チュートリアル 3696

コーデックアプリケーションにおけるMAXQ3120の使用方法

筆者: Ben Smith

要約: オーディオコーデックは現代のディジタル電話通信の基盤です。このコーデックは可聴音声をディジタルデータに変換し、再び可聴音声に変換するコンポーネントです。この記事では、MAXQ3120内蔵のA/Dチャネルと外付けDACを使った標準的なµ-lawおよびA-law方式の音声エンコードとデコードを解説します。これによって、呼出進捗検出/生成、PCMフレーミング、および無音チャネル検出など、その他の電話通信関連の機能を実行する相当量の処理能力を利用することができます。

以下をダウンロードします。

はじめに

現代の電話通信はディジタルです。数百の電気的接触、大量の絞り染めのスパゲッティに似た何マイルものツイストペアケーブル、および地方にかつて点在していたマイクロ波タワーを伴ったチャタリングストロージャ式スイッチはなくなりました。今日では、音声トラフィックはできるだけ早い機会にディジタル形式に変換され、数千の他の音声通話、電子メールメッセージ、およびWebページとともに光ファイバで搬送されます。

ディジタル電話通信は、Voice over Internet Protocol (VoIP)のような技術で情報時代を推進し、通信環境を変革し続けています。ただし、どこか途中で音声をビットに変換し、その後ビットを音声に逆変換する必要があるという事実に変わりはありません。

これはコーデックの仕事です。コーデック(codec)という単語は、コーダ/デコーダ(coder/decoder)の短縮形であり、概念上、単純なデバイスです。入力オーディオをビットストリームに変換するアナログ-ディジタルコンバータ(ADC)、受信したビットストリームをオーディオに変換するディジタル-アナログコンバータ(DAC)、および他のコーデックが取り付けられるバスとのディジタル化されたオーディオの追加および除去するためのインタフェースから構成されています。

通常、コーデックはスタンドアロンのミックスドシグナルセミコンダクタです。コーデックが端局スイッチ用のラインカードなどの単純なアプリケーションで使用されている場合は、これで構いません。ただし、多くの場合、送信されたオーディオの何らかの処理(ピーク制限、ダイナミックレンジ圧縮、またはスペクトル整形など)、または受信されたオーディオの後処理(ノイズ低減など)を実行することが望まれます。これはスタンドアロンコーデックの問題点です。というのは、アナログオーディオはコーデックに渡されると(またはコーデックから取り出されると)、もう処理を実行する機会がないため、コーデックはPCMハイウェイと直接インタフェースします。こうした場合、システム設計者には以下の2つの厄介なオプションが残されます。すなわち、アナログ領域でこの処理を実行するか(多くの場合が高コスト、場合によってはノイズが多い)、またはスタンドアロンのモノリシックコードの使用を中止し、スタンドアロンの高精度ADCおよびDACチップでディジタル領域において処理を実行するかの何れかです。どちらのオプションも理想的ではありません。この記事では、受信/送信ビットストリームの追加処理を実行可能な音声コーデックとして外付けDACともにMAXQ3120を使用する方法を紹介します。

コーデックの基本

ディジタル電話通信が考えられるずっと以前は、音声信号を理解できるように維持するには約300Hzから約3.5kHzの周波数範囲を維持する必要があると判断されていました。この範囲外の周波数は音声信号の忠実度には貢献しますが、理解度には貢献しませんでした(実際、帯域制限された信号は広帯域信号よりも理解度が高いことが判明しました)。信号は対象とする最高周波数の少なくとも2倍もサンプリングする必要があるというナイキストの基準に従って、すべての音声コーデックは、必要とされる3.5kHzの2倍以上の8000サンプル/秒で動作し、各サンプルはディジタルコードワードに変換されます。

ただし、コードワードのサイズは問題をもたらしました。ディジタルシステムにおいては、信号整合性とワードサイズの間にトレードオフがあります。忠実度を最高にするためにシステム設計者はより大きなワードサイズを選択することができますが、ビットが増えるとより広い帯域幅が必要になり、帯域幅にはコストがかかります。あるいは設計者はより小さなワードサイズを選択して、帯域幅コストを節減することができますが、音声品質は悪化します。試験によると、小さなコードワード(約8ビット)は優れた音声品質をもたらしますが、話し手が一貫した静かな音声で話す場合に限りました。音声量の正常変動はトランスミッタを飽和させ、クリッピングと歪みをもたらします。高レベルでこのクリッピングを除去するために利得を低減することができますが、通常の音声レベルは4ビットまたは5ビットのみを使用し、小さな音声はかすれ、不自然になります。最も小さなささやき声から最も大きな叫び声まであらゆる範囲の人間の声に対処するには、12ビットから14ビットの解像度が必要と思われました。

そのソリューションは非線形コーデックを使用することでした(図1参照)。これらのコードは、人間の耳は、小さな音の小さなエラーよりも大きな音の小さなエラーに寛容であるという事実を利用しています。図では、無音はゼロ線を中心とし、小さな音声は中心線から少しだけ偏移し、より大きな音声はより大きく偏移しています。これらのデバイスでは、ゼロ線を中心としたコードはゼロ線から離れたコードよりも高密度で圧縮されるため、ハイレベル信号の優れたダイナミックレンジを維持しながら、ローレベル信号に良い結果をもたらすコーデックが実現します。

図1. これは、標準PCMコーデックの応答曲線です。ゼロ相対振幅を中心とした領域は曲線終点よりも多くのコードを備えているため、コーデックは高い音声忠実度と広いダイナミックレンジを維持することができます。
図1. これは、標準PCMコーデックの応答曲線です。ゼロ相対振幅を中心とした領域は曲線終点よりも多くのコードを備えているため、コーデックは高い音声忠実度と広いダイナミックレンジを維持することができます。

ディジタル側では、PCMハイウェイとインタフェースする必要があります。ワイヤセットが独立した関連トランク機器に各コーデックを接続せずに、コモンバスのPCMハイウェイ上で多数のコーデックを互いに接続するのが一般的です。送信を調整するために、各コーデックは共通のビットクロックを共用し、各フレームパルスで送信または受信を開始するように信号処理されます。一般的な北米規格では、なんらかのシーケンサロジックで1,544,000ビット/秒でクロック制御されるPCMハイウェイに24のコーデックを配置することができます。125µs毎に、最初のコーデックはフレームパルスを受信し、ハイウェイに8ビットを送信します。8ビットのクロックの後に、第2のコーデックはそのフレームパルスを受信し、以下同様に実行されます。24の全コーデックがそれぞれのデータを送信すると、シーケンサは信号処理用に1ビット時間を充てた後、そのシーケンスを繰り返します。このため、以下のように値が生成されます。

[(サンプル当り8ビット x 24チャネル) + 1信号ビット] x 8,000サンプル/秒 = 1,544,000ビット/秒

PCMコーデックの種類

電話通信で使用されるPCMコーデックにはフレームレート(すなわちサンプリングレート)が標準とされてきました。残念ながら、それ以外はほとんど標準とされませんでした。ヨーロッパで使用されるA-lawと、主に米国および日本で使用されるµ-lawという留意すべき2種類のトランスコーディングアルゴリズムがあります。また、米国のDS1 (1.544Mb/s)とヨーロッパのE1 (2.048Mb/s)という現在使用中の2種類の基本ラインレートがあります。この記事で紹介される設計は、A-lawまたはµ-lawモードで動作可能なDS1 (別名T1)コーデックです。

µ-lawコーデックでは、次式に従ってサンプルをエンコードします。

ここで、µはこの式の指標であり、通常255です。

A-lawコーデックでは、少し異なる式に従ってエンコードします。

ここで、Aはこの式の指標であり、通常87.6または場合によっては87.7です。なお、ゼロに近い値の場合は、A-law関数は線形であり、入力値が1/Aを上回る場合に限り対数になります。

実務では、これらの2つの圧伸法は酷似した曲線をもたらします。また、実際にはこれらの線形式はほとんど使用されません。その代わりに、区分線形近似が計算オーバヘッドを軽減するために求められます。ただし、ここで紹介する設計は、参照テーブルを通じてこれらの厳密式を実装します。

マイクロコントローラがコーデックとなる

MAXQ3120は2つの高精度16ビットADCチャネルと40ビットアキュムレータ付き16 x 16乗算器を内蔵しています。DACチャネルがない間は、このキャパシティで動作可能な低コストで利用可能な高精度シリアルDACがあります。あとは、これらの周辺機器を接続するソフトウェアを作り上げるだけです。

エンコーディング

エンコーディングまでには、以下の3つのステップがあります。すなわち、アナログ信号をディジタルに変換し、ディジタル化されたサンプルを再サンプリング/フィルタリングして、最終的にA-lawまたはµ-lawトランスコーディングによってサンプルを8ビット表現に圧縮するステップです。

最初のステップはA/D変換ステップであり、MAXQ3120に内蔵されたADCチャネルにより最も簡単なステップでもあります。MAXQ3120は、48µs毎に新たな16ビットの結果を出力します。このため、システムはサンプルを処理するために8MHzのプロセッサクロックで384の命令サイクルを備えています。

幸いにも、サンプルの処理は、単にADCを読取り、データを循環バッファに保管するだけです。バッファは32の最新の16ビットサンプルを常に備えています。MAXQ3120は256ワードの16ビットワードのRAMを備えているため、循環バッファは単一チャネル用に利用可能なRAMの12.5%のみを消費します。

ADCは48µs毎にサンプルを生成しますが、通信ネットワークには125µs毎に新しいサンプルが必要です。このため、信号に対して他にどんなことを実行しても、信号を再サンプリングする必要があります。一つの一般的な方法は、フレームパルスの受信時に変換用の最新サンプルのみを受け取り、その他すべてのサンプルを捨てることですが、MAXQ3120はこれよりもっと有効なことを行うことができます。

フレームパルス毎に、コーデックソフトウェアは31タップFIRフィルタを循環バッファ内の累積サンプルに適用し始めます。フィルタは3.5kHzで3dbのポイントを備えているため、ADCチャネルのノイズを低減するアンチエイリアシング/追加再生を行います。フィルタプロセスの結果は、A-lawまたはµ-law圧縮に対応した16ビットサンプルです。

表1. 先頭から10個のµ-lawおよびA-lawコード

コード µ-law A-law
0 0000 0000
1 0005 000F
2 000B 001F
3 0011 002F
4 0018 003F
5 001F 004F
6 0026 005F
7 002D 006F
8 0035 007F
9 003D 008F

値を16ビット線形からコードに変換する方法は複数あり、直接計算と区分線形近似の2つが一般的な方法です。これらの方法のどちらも使用せずに、2つの128ワードテーブル(1つはµ-lawエンコーディング/デコーディング用、もう1つはA-law用)を設定して、MAXQ3120の比較的大きなプログラム空間を利用します。起動時に外部端子はポーリングされ、その端子のレベルに基づいてテーブルのどちらか一方がRAMにロードされます。エンコーディングプロセスは以下のように作用します。
  • 16ビットの線形PCMサンプルの絶対値を取得します。符号ビットを追跡します。
  • ここで適用可能なテーブルのバイナリ検索を実行します。PCMサンプルをテーブルの中央値と比較します。中央値を下回る場合は、テーブルの下半分のみを考慮します。中央値を上回る場合は、テーブルの上半分のみを考慮します。テーブルエントリが2つのみになるまで繰り返し、最も近いテーブルエントリを選びます。
  • 送出するコードはテーブルエントリのインデックスです。例えば、サンプル値が0x006Dで、変換がA-lawに準拠した場合は、上記のテーブルで最も近い値は0x006Fです。そのインデックスは7であり、これが送出するコードです。
  • 最後に、元のサンプル値の符号を適用します。得られる8ビット値は対数PCM値です。ただし、この値が最後ではありません。ネットワークに送出されるPCM値は単なる2の補数のバイナリ値ではありません。その代わりに、各トランスコーディング法はそれぞれに適用される特別ルールを備えています。
µ-lawの場合
  • 負の値はゼロの符号ビットを備え、正の値は1の符号ビットを備えています。 この値は反転されます。このためゼロは0b11111111で表され、また+1は0b11111110で表されます。これによって、送信ストリームにおいて多数の1のビットが保証されます(様々な物理レイヤ送信メカニズムは1のビットにのみレベル遷移を備えています。このため、多数の1のビットによってクロックリカバリが容易になります)。
  • 「正のゼロ」値と「負のゼロ」値があり、それぞれ0b11111111と0b01111111で表されます。
  • 最大の負の値は-127であり、0b00000000で表されます。ただし、タイミング整合性を確保するために、多くのシステムはすべてゼロの値を許容しません。これらのシステムはビット1を反転して、すべてゼロのコードを自動的に排除します。これによって、コードストリームに不可逆変更(0b00000000が0b00000010になる)が加えられますが、オーディオ転送の場合は、知覚される音声はあまり変わりません。両方のコードはかなり大きな音声です! (この設計ではこの機能を実行しませんが、変更を行うのは容易です)。
A-lawの場合
  • µ-lawと同様に、負の値はゼロの符号ビットを備えています。
  • µ-lawと同様に、「負のゼロ」値と「正のゼロ」値があり、それぞれ0b00000000と0b10000000で表されます。
  • 送信前に、すべてのA-lawワードは0x55と排他的論理和が取られ、バイト内の他の全ビットが効率的に反転されます。µ-lawの反転と同様に、これによって多数の1の密度が保証され、クロックリカバリが容易になります。

デコーディング

8ビットPCMサンプルのデコーディングは、信号の再サンプリングが不要のため、エンコーディングよりもはるかに容易です。PCM法ルールが適用されると、8ビットの符号付き値は変わりません。その値を適用可能なPCMテーブルのインデックスとして使用すると(符号を考慮)、結果はDACへの送出に対応した16ビットの符号付きの値になります。

このプロジェクトに選択されるコンバータは、デュアルチャネルDACのMAX5722です。このコンバータは、経済的な8ピンµMAXパッケージで提供される12ビットDACです。大部分のDACと同様に、MAX5722には外部電圧リファレンスが必要です。幸いにも、MAXQ3120にはこの目的に適した1.25Vのバンドギャップ電圧リファレンスがあります。

MAX5722はシリアルインタフェースDACであり、これはマイクロコントローラがDACに適したシリアルストリームを生成する必要があることを意味します。このDACインタフェースは同期インタフェースであるため、連続クロックが不要であり、チップセレクトがローである場合に限りクロックが必要です。このため、マイクロコントローラの汎用I/Oのみを用いて、3線式インタフェースを使用することができます。

なお、この設計ではADCチャネルの入力範囲は-1.0V~+1.0Vであり、またDAC出力チャネルの範囲は0.0V~+1.25Vです。ラインカードなどの実際の通信アプリケーションでは、これらのレベルは別のアナログレベルに変換される可能性があります(例えば、600Ωインピーダンスへの1mWは0dBmとして定義することが一般的であり、最大レベルは通常、通信ネットワークで発生)。入力および出力レベルを同一にすることがアプリケーションで重要な場合、バイポーラ出力の生成に関する詳細についてはMAX5722のデータシートを参照してください。

PCMバス

アナログ波形を圧縮PCM形式に変換し、続いて逆変換する方法をすでに理解したので、後はPCMバスとのインタフェースという1つの課題のみが残っています。

ほとんどの場合、PCMハイウェイとのインタフェースには、以下の4線式バスとの接続が伴います。すなわち、端末がデータを配置する送信データライン、トランク機器がデータを配置し、端末がそこからデータを受信する受信データライン、バスがその端末用のデータを含んでいることを示すための各端末に通常固有であるフレーム同期ラインのパルス化、およびビットクロックです。我が社のコーデックは端末機器として意図されているため、ビットクロックとフレームパルスを受信し、受信データライン上のデータを受信して、送信データライン上のデータを送信します。

T1システムでは、クロックは1.544MHzで動作します。従って、フレームパルスが到着するとわずか数クロックサイクル以内で瞬時に応答する必要があります。1ビット時間は625nsより少し長く、5サイクルの命令サイクルです。この時間は標準割込み待ち時間よりもはるかに短いため(割込み時には、コンテキストセーブおよびオーバヘッドを考慮)、割込みの場合のフレームパルス信号への応答はあまり早くありません。別のソリューションを見つける必要があります。

そのソリューションとは、MAXQ3120の3つのタイマのいずれか1つを使って、フレームパルスが到着すると予想される数マイクロ秒前にプロセッサに割り込むことです。続いてフレームパルスがついに到着すると、プロセッサは割り込まれ、コンテキストをセーブし、全サイクルをPCMバスタスク専用にすることができます。以下のように機能します。タイマを110µsでカウントアップするように設定します。全ビットがシフトアウトされると、各フレームイベントの最後でタイマを起動します。T1システムでは、2つのサンプルが10.4µsでシフトアウトされます。タイマがプロセッサに割り込むと、ソフトウェアはすぐにフレームパルスの立上りエッジを探し始めます。これはシステムで唯一の割込みです。他のすべてはポーリングされ、PCMデータをバスからオン/オフする重要なタスクが完了するまで待機することができます。

フレームパルスが到着すると、プロセッサは非常にビジーな状態を維持します。プロセッサは、5サイクルで送信バッファをシフトし、出力ビットをポートに書き込み、続いて入力ビットを読み取り、受信バッファをシフトする必要があります。MAXQ3120はちょうど5サイクルでこれを実行します。

この説明がT1バスを中心としているのをお気付きかもしれませんが、E1はどうでしょうか? 2.048MHzではE1システムはビット当り488nsよりは少し長いだけであり、命令サイクルでは4サイクル以下です。このため、E1 PCMバスの管理には外部ハードウェアの協力が必要になります。例えば、ビットクロックで駆動される安価なシフトレジスタはビットレベルタイミングの厳密性から解放します。

その他の特長

これでコーデックが完了しました。ただし、スタンドアロンコーデックは低コストで豊富にあるので、設計者として思惑がない限り、マイクロコントローラでコーデックを構築するのは適切ではありません。以下に、設計者にそうしたシステムを検討させる可能性があるいくつかのアイデアがあります。
  • 事前フィルタリング 信号が線形PCM形式である間、等価、ダイナミックレンジ圧縮、ノイズゲート、または信号に関するその他多数の処理を適用するのに絶好の機会です。MAXQ3120は、通常の意味でのDSPではありませんが、これらの機能はプロセッサで利用可能な能力の範囲内にあります。
  • 帯域内信号抽出 線形PCMストリーム内で帯域内トーンを検出する効率的で簡単なアルゴリズムを利用することができます。こうしたアルゴリズムを利用してDTMFディジットを検出し、これを使って特定の機能を作動させることができます。また、トーン検出によってダイヤルトーン(北米で350Hz + 440Hz)、ステーションリング(440Hz + 480Hz)、およびビジー信号(480Hz + 620Hz)を正確に検出することによって、コールの過程を判断することもできます。
  • 会議ブリッジ チャネル1の受信オーディオをミックスし、それをチャネル2の送信オーディオと結合する、もしくはその逆も簡単です。これを実行して、2チャネルのディジタル会議ブリッジが効率的に構築されます。ブリッジはディジタルであるため、音声品質の低下はありません。3チャネル以上をブリッジしたい場合は、さらにMAXQ3120デバイスを追加してください。

結論

MAXQ3120は、通信コミュニティを特に対象としていませんが、内蔵の高精度ADCとDSP機能により、設計者にカスタマイズされたハードウェア/ソフトウェアソリューションを構築する幅広い機会をもたらします。幅広い開発ツールを利用することができるため、設計作業が容易になります。