オーディオアプリ(App_Audio)
TWELITE のアナログ入力とPWM出力を用いてオーディオまたは信号波形をボタンを押した間に相手側に送信するアプリケーションです。専用のオーディオインタフェースICは不要ですが、ローパスフィルタ、アンプなどの外部回路の構成が必要になります。
仕様
- PWM出力周期 32KHz
- 最大入力サンプリング周波数
データ形式によって最大周波数は変化します。特に信号伝送をされる場合は、RAW8/10 への設定および適切なサンプリング周波数の設定が必須です。- ADPCM 音声: 8KHz (音声信号専用)
- RAW8 8bit 信号:4Khz (一般信号)
- RAW10 10bit 信号: 3.2Khz (一般信号)
- 中継機能はありません。
ソフトウェア
- v1.0.1 (2014/04 SDKビルド) (TWELITE用)
※ソースコードはTWELITE SDKのApp_Audio に含まれます。
※ ファームウェアの書き込み方法はTWELITE R-トワイライターの利用を推奨します。
ハードウェア
回路図
※クリックすると拡大します
解説
音声入力部
- オペアンプ(OP1-A)はマイクアンプに使用している。
- VR1でマイクアンプのゲインを調整する。
- VR2は音声波形の中心電圧を調整する可変抵抗。
- アペアンプ(OP1-A)の+(プラス)端子の電圧が1.0~1.2[V]になるように調整し 0-2V の範囲で振幅するように調整する。
音声出力部
- (OP1-B,R4,R5,C4,C5) にて Fc≒4KHzのLPFを構成している。
- VR3はイヤホンの音量調整用ボリューム。
- C1は33uFを使用しているが、特に決まりは無く10uFでも問題無い。
使用するピン
使用するピン名は 超簡単!標準アプリを参照ください。
ピン名 | 解説 | 備考 |
AI1 | アナログ入力 (必須) | 0-2V の間で振幅するようにアナログ信号を調整してください。AC信号は入力できません。 また、入力のローパスフィルタはサンプリング定理の考え方から必要です。肉声などあまり高周波が含まれない信号を入力する場合は省略しても出力に大きな影響がない場合もあります。 |
PWM1 | 無線経由の信号データの出力 | 32KHz のPWM 出力となります。これをローパスフィルタと AC カット用のキャパシタを介すると、元のアナログ信号を再現します。 |
PWM2 | A1 のパススルー | 無線通信せず、単体で LPF などの評価を行う場合使用します。 |
PWM3 | サンプリング周期を示す矩形波 | |
DI1 | LO にすると無線出力します (必須) | |
DI2 | LO にするとサンプルトーンを出力します | 本来テスト用ですが、モールス信号送信機といった応用が考えられます。 |
DO1 | LO になると無線信号を出力中を意味します | |
DO2 | DI2 が LO になると、LO 出力します |
使い方
(1) TWELITEには全て同じファームウェア(App_Audio*.bin)を書き込みます。
(2) 事前にインタラクティブモードで設定を済ませておきます。
※ 特に信号伝送を行いたい場合は RAW8,RAW10, サンプリング周期設定が必須です。
(3) AI1, PWM1, DI1 を接続(参考回路図参照)したトランシーバーを2ヶ(以上でも可)作成します。
(4) 2ヶのトランシーバーの電源を投入します。
(5) 片方でボタンを押せば、他方から音が出ます。
※ 両方同時に押すと音が出ません。
インタラクティブモードの設定
インタラクティブモードを表示するには、TWELITE の UART0 を接続し (TWELITER など)、ターミナルソフトを 115200bps 8N1 条件で開きます。+ + + と + を3回一呼吸置きながら入力すると、以下の画面が表示されます。
--- CONFIG/TWE AUDIO APP V0-03-2/SID=0x81000038/LID=0x78 --- a: set Application ID (0x67720108) i: set Device ID (--) c: set Channels (18) x: set Tx Power (3) p: set PWM HZ (32000) f: set Sample Freq (8000) d: set Codec Type (0) o: set Option Bits (0x00001130) b: set UART baud (38400) --- S: save Configuration R: reset to Defaults
[PWM HZ]
PWM の周波数を決定します。
例えば 32000Hz の場合、16MHz/32000=500 カウントによる DUTY 比の変更が可能です。 ディジタルオーディオで一般的な16bit(=65536)に対して、約9bit(=512段階)と粗くな ります。 周波数を下げると音質(ダイナミックレンジやS/N)が向上するかもしれませんが、 PWM の制御タイミングなどの揺らぎなどの影響、PWM 周波数自体が音質に影響しやすく なりますので、バランスの良いポイントを選ぶ必要があります。
[Sample Freq]
ADC のサンプリング周波数 (fs) です。
fs/2 Hz 以上の信号が含まれると折り返し ノイズが発生します。8000Hz なら 4000Hz 以上の音声は含まないようにするか、 LPF (ローパスフィルタ) により抑え込みます。
周波数を上げると音質は向上しますが、無線の通信が追いつかなくなります。 8000Hz では 20ms 毎に無線通信を行います。
[Codec Type]
ADCから得られたデータ、無線パケットでも送信できるように変換します。
- 0: ADPCM
IMA ADPCM 簡易的な適応的差分パルス符号変調です。1サンプルは4bitで表現されます。 1パケットは160サンプルでサンプル周期最大8KHzまで伝送できます。 - 1: RAW10
RAW 10bit 10bit ADデータをそのまま伝送します。 1パケットは64サンプルでサンプル周期最大3.2KHzまで伝送できます。 - 2: RAW8
RAW 8bit 10bit ADデータの下2ビットを間引いて 8bit にして伝送します。 1パケットは80サンプルでサンプル周期最大4KHzまで伝送出来ます。
[オプションビット]
- 00000010 --- 入力時、2サンプルの平均を行う(簡易LPF)
- 00000020 --- 出力時、2サンプルの平均を行う(簡易LPF)
- 00000100 --- 入力時に倍速でサンプルし、2つのサンプルを平均化する。
2倍速(16Khz)でサンプルし2サンプルの平均を行い、8Khzの信号として取り扱う
※ 上記簡易LPFを適用するとさらに 8Khz の信号を 4KHz 相当として入出力する。 - 00001000 --- PWM1のDuty変更時に、PWM1周期の終了間際までポーリング待ちを行う
- 00002000 --- PWM2のDuty変更時に、PWM1周期の終了間際までポーリング待ちを行う
・デフォルト値は 0x1130 です。
入出力回路の調整など、無線伝送せずに単独で AI1->PWM2 へのパススルーの 実験を行う場合は、0x2100 または 0x2000 に設定します。 なお、簡易LPFはパススルーには働きません。
制限事項
- 入力と出力は、遅延の発生しうる(無線優先であるため)割り込みハンドラ中で行っており、原理的にジッターなどが発生します。
- トランシーバー間で動作クロックの同期を行う事は不可能であるため、バッファーアンダー・オーバーランにより音途切れが発生します。
- 通信状況が悪くなると無線パケットの欠落による音切れも発生します。緩和するため、本アプリケーションでは同じパケットを2度送っています。
- 信号伝送の RAW モードでも、信号の連続性等は厳密に検証されません。
IMA ADPCM について
広く使われている(簡易)ADPCMで、音質面では高域の再現性が低下するものの、計算量の少なさと状態ベクトルが小さいため取り扱いが良好です。
/*********************************************************** Copyright 1992 by Stichting Mathematisch Centrum, Amsterdam, The Netherlands. All Rights Reserved Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the names of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. ******************************************************************/ /* ** Intel/DVI ADPCM coder/decoder. ** ** The algorithm for this coder was taken from the IMA Compatability Project ** proceedings, Vol 2, Number 2; May 1992. ** ** Version 1.2, 18-Dec-92. ** */