R1. 2016/06/04
音声合成IC(ATP3011)を使う
ATmega328PU-20に音声出力機能を実装したLSIです。
内蔵CRを使い8MHzで動作します。
(1) 普通にAVRマイコンですので、電源、リセット、AVCCなどを接続して使います。
秋月電子のArduino互換ボードなどを使うと手早く試すことができます。
(2) 入力端子はプルアップされている様ですので、入力端子は解放で問題ありません。
I2C, SPI, UART, /SLEEPの入力端子にPull Up表現はないので、ノイズによる誤作動が気になる場合は、4.7kΩくらいで適宜Pull up, Pull downします。
(3) リセットは外部から行えるようにしたほうが便利です。
USB / UART 変換ICを使う場合、UARTポート初期化後、リセット操作をしてから80ms以降にUARTポートから「?」を入力することで、ボーレート判定機能が正しく認識されます。
(4) fs = 31.25kHzの8bit PWM出力を利用し、音声は8kHzでサンプリングしています
a. PWMによるD/A変換を使いますので、適切なLPFを挿入しないと、Duty比が極端に低い場合や高い場合に31.25kHzよりも低い周波数の矩形波が出力され、可聴領域のノイズが混じり、音声が聞き取りにくくなる場合があります。
b. 音声は電話品質(0.3~3.4kHz)で考え適切なLPFを設計し、実装します。
LPFの設計については、後述の説明を参照下さい。
c. スピーカーの再生周波数は150Hz以上と仮定します。
300Hz以上で再生できればよいため、交流カップリング用のコンデンサは0.1uF程度として調整します。低音まで再生したい場合はコンデンサ容量を大きくします。
d. 出力アンプが無ければ、十分な音量で再生できません。
少なくとも、取扱説明書に記載された回路ではスピーカ直結で十分な音量は得られません。
サンプル製作した回路の場合、LPF用OP-AMPの出力にACカップリング用として0.1uFのコンデンサを挿入していますので、出力に32Ωヘッドホン接続したとき、最大16dB at 3.4kHzの音声出力が可能です。
e. duty 50%でGNDレベルとなるようなサンプリングになっています。
duty 50%(3.3 / 2 = 1.67V)相当の信号が出力されていると便利ですが、あいにく出力されていませんので、OP-AMPの仮想接地用信号は電圧分割で製作します。
(1) PWM出力をD/A変換器として利用する
音声合成ICでは、AVRマイコンに内蔵されているPWM機能を使ってD/A変換機能を実現しています。オシロスコープでPWM出力を確認すると、31.25kHz(≒ 8MH / 256)のPWMを使っていることが確認できます。
PWM出力をD/A変換器として動作させる場合は、PWM出力に適切に設計されたLPFを接続することで、下図のような正弦波に似た三角波状の波形がLPFから出力されます。
![]() |
図 3.1 50%デューティー比を出力したときの事例
(2) Duty比を変化させた場合
HまたはLの長さに着目すると、31.25kHzより高い周波数と1/2周波数(15.6kHz)の信号が生成されていることに気づきます。31.25kHzより高い周波数はLPFで減衰しますが、15.6kHzに近い周波数はLPFで減衰しにくくなります。
このため、LPFを設計する場合は、PWMのキャリア周波数31.25kHzの1/2周波数である15.6kHzで-48dB減衰させるような設計とする必要があります。
(a) Duty比 が下がると
L時間が長くなり、平均値が下がると同時に、31kHzより低い周波数の信号が発生する。
H時間が短くなり、31kHzよりも高い周波数の信号が生成されます。
![]() |
(b) Duty比 が上がると
L時間が短くなり、平均値が上がると同時に、31kHzより高い周波数の信号が発生する。
H時間が長くなり、31kHzよりも低い周波数の信号が生成されます。
![]() |
|
(1) 音声通過帯域
8kHzのサンプリングレートで8bit PCM(ダイナミックレンジ48dB)録音された音声の品質は電話品質(0.3~3.4kHz)と考えられますので、この信号を通過させるようなバンドパスフィルタ(BPF)を取り付けるのが理想的と考えられます。
実際には、300Hz以下の信号はスピーカーでうまく再生できないことが多いため、DC成分がうまく除去できれば良いとされ、LPFの設計に着目すればよいことになります。
サンプリングレートが8kHzの場合、4kHzで信号の折り返しが発生しますので、3.4kHzのイメージが4.6 ~ 7.7(~8)kHzの間に生じます。
このイメージ周波数を除去するためには、fc≒3.4kHzから4.6kHzの間で-48dBの減衰率が得られるLPFを取り付ける必要があります。
このとき、必要とされるLPFの次数= 48 / log(4.6 / 3.4) / 20 ≒ 18.3次 となります。
![]() |
0.3~3.4kHz 4kHz 8kHz
(2) オーバーサンプリング技法が適用された場合の特性
音声のサンプリング(ナイキスト)周波数が8kHzでも、マイコンの内部で32kHzサンプリングのデータとして扱うような信号の補完が行われていた場合、DACの分解能の向上とナイキスト周波数の上昇が実現され、下図の様な形で、必要とされるLPFの次数が下げられます。
![]() |
0.3~3.4kHz 4kHz 8kHz 12kHz 16kHz 20kHz 24kHz 28kHz 32kHz
(3) 音声合成ICの場合
キャリア周波数31.25kHzのPWMを使って音声の再生を行っていますので、結果的に4倍オーバーサンプリング技法が適用されていることになります。
しかし、PWMの特性上15.6kHzで-48dB程度減衰させる必要がありますので、
必要なLPFの次数 = 48 / log(15.6 / 3.4) / 20 ≒ 3.6次
(4) 4次LPFの設計
最近は、半導体メーカから、フィルタ設計ツールが公開されており、これを使うと簡単に回路の設計が進められます。
添付の事例は、TIのFilterPro(無料)を使って計算しています。
※使用した部品は値の近い代替品、コンデンサはセラミックコンデンサ(Z級)です。
厳密に動作させる必要が無ければ、これでもうまく動作します。
(1) うまく音が出ない原因
製造元の取扱説明書に従い、fc≒3.4kHzとなるCR構成の1次LPF(-20dB/DECの減衰率をもつローパスフィルタ)を接続すれば、機材は動作します。
LPFを取り付けず、PWM出力にスピーカーを接続しても、うまく音は出ません。
うまく音が出ない場合、UARTの自動ボーレート調整に失敗し、コマンドが受け付けられていない場合が考えられますので、リセットスイッチを押したあと、ボーレート初期化コマンドを発行してみてください。
(2) 「キー」という音が生じる原因
製造元の取扱説明書に従い、fc≒3.4kHzとなるCR構成の1次LPF(-20dB/DECの減衰率をもつローパスフィルタ)を接続しても、キャリア周波数31kHzを主成分とした信号は完全に減衰しないため、音声再生中に「キー」といった感じのノイズが混じり、異音や音声の明瞭度を下げる原因になることがあります。
(添付写真13、14)
(3) フルレンジスピーカーの特性
オーディオCDの場合、44kHzで信号をサンプリングし、20Hz~(16kHz) ~18kHzまでの音楽信号を再生するため、26kHz以上のイメージ信号が出力されないよう、次数の高いLPFを搭載し、音声品質を高めています。
しかし、音声合成ICの場合は、音声帯域の信号再生に着目すればよいため、300~3.4kHzの音声再生に特化すればよいといえます。
この場合、ツイーターのような高音再生特性を備えたスピーカーは必要とされず、2kHzを超えたあたりから出力効率の下がるフルレンジスピーカーを使うことで、高周波雑音を除去し、明瞭度を高めることができます。
(4) 出力にアンプ内蔵スピーカー(Active Speaker)が必要
製造元の取扱説明書は、LPFの出力にActive スピーカーを接続する回路例が記載されています。 音声合成ICの出力は、DC 1.67Vを中心に音声信号が出力されるような作り込みになっていますので、マイコン側を+、スピーカー側を-にして0.1~10uFのコンデンサを挿入すれば、交流出力が得られます。
簡単に実験する場合は、LPFの出力に0.1~10uFのコンデンサ(マイコン側を+)とスピーカーを直列接続すれば、小さい音ですが、音声を聞くことは可能です。
(1) 利用したマイコンボード
秋月電子のArduino互換ボードにUSB-UARTアダプタを載せ、LPFをArduinoのシールドのような形で追加し、音声合成ICの試験に利用しました。
このArduino互換機は3.3Vで動作させますので、一部パターンカットや改造を施しています。
(2) PWM出力に4次LPFを取り付け、オーディオ出力しました
手持ち部品の都合でOP-AMPにNJM2119を使いました。
OP-AMP出力に0.1uFのコンデンサをACカップリング用に接続し、32Ω(かな?)のイヤホンを直結して動作確認しました。
(3) 製作した4次ローパスフィルタ(LPF)
5V動作の単電源OP-AMP(LM358)なら動作すると思います。
使用した部品の値は設計条件と完全に合致していませんが、まずまずの特性でした。
部品の値が設計条件から大きく外れるとLPFの原因特性がフラットにならないことや発振の原因になること、目的の減衰率が得られないことなどがあります。
(4) 音声出力
出力アンプにLM386Nを使えば、4.8V電源でスピーカーから音を出す装置にまとめることが可能と思います。
音声合成ICは、取扱説明書通りに動作しました。
音声は電話品質ですが、You Tubeで良く聞く感じの声でした。
4次LPFの特性がマッチングしていたのか、まずまずの明瞭度で再生できました。
LPFの特性には添付資料を参照下さい。一応、設計趣旨に沿った動きになっています。
ハードウェアに関する取扱説明書が不十分でしたので、素人が作るのは難しいのでは?
という印象です。
4次LPFは、部品選定が特殊ですが、部品さえ入手できれば誰でも簡単に製作できます。
OP-AMPは5V単電源用のLM358で動作しますが、NJM4558のような両電源OP-AMPは、±4V以上で動作する仕様のため、今回の用途には利用することはできません。
APT3011は癖のあるICですが、比較的簡単に利用できるようにソフトウェアが作られていましたので、いろいろな用途に応用できそうな印象でした。
以上
No. |
写真 |
コメント |
1 |
|
■試作した装置の外観 右側のUARTケーブルは未使用です。 秋月のArduino互換基板を一部改造して使いました。 FT232の右側がLPF 上手に組み立てれば、Arduinoのシールドにできます。 黄色の線:PWM出力 赤色の線:5V電源 黒色の線:GND
|
2 |
|
■nihonngoを出力したとき こんな感じで音声出力されました。 (ちょっとノイズが多い)
|
3 |
|
■波形拡大 NJM2119の7番ピンをACレンジで計測
ノイズ対策すれば、もう少しまともな波形になると思います。
|
No. |
写真 |
コメント |
4 |
|
■PWM出力 aを出力したときの最終波形 キャリア周波数は31.15kHz
この信号を8bit D/A変換しますので、31.25kHzの矩形波信号を1/256以下のレベルまで減衰させます。 遮断周波数を音声再生帯域の上限(3.4kHz)と仮定すれば、-46dB以上減衰させる必要があります。 |
5 |
|
■製作したLPFの特性 Duty50%、3Vppの矩形波を入力したとき、出力信号は10mV程度(写真では30mV)まで減衰しています。
|
6 |
|
■8kHz入力時 出力信号は112mV程度まで減衰 よって、低周波のエイリアス(ゴースト)は、1/10以下になっており、音声の明瞭度が高まっています。
|
No. |
写真 |
コメント |
7 |
|
■2Vpp 20kHz正弦波入力時 出力信号は60mVまで減衰 (実際にはもう少し減衰していますが、ノイズレベルが大きい)
|
8 |
|
■2Vpp 8kHz正弦波入力時 出力信号は76mV(1/26)まで減衰 この変動(脈動)はノイズ(ゴースト)になりますので、音声の明瞭度が下がる原因になります。 1/256まで下げることが望ましい。
|
9 |
|
■2Vpp 6kHz正弦波入力時 出力信号は137mVまで減衰 1/15程度になっています。
|
No. |
写真 |
コメント |
10 |
|
■2Vpp 3kHz正弦波入力時 出力信号はほとんど減衰していません。
|
11 |
|
■2Vpp 1kHz正弦波入力時 出力信号はほとんど減衰していません。
|
12 |
|
|
No. |
写真 |
コメント |
13 |
|
■R=1kΩ、C=0.05uFのLPFを接続したとき、「a」を出力したときの波形
スピーカーから音声は聞こえました。
|
14 |
|
■波形拡大 LPFが機能しておらず、下側のPWM出力信号とほとんど同じ波形がスピーカーに出力されている様子がわかります。
スピーカーは、31kHzの信号は再生できませんので、これでも機能します。
|
15 |
|
■fc=3.4kHzの4次LPF 接続時の波形
ノイズ対策が甘いためかなりひげは出ていますが、31kHzの信号はうまく整流されており、音の強弱に応じた振幅変化が観測されている。
|