2009年7月20日月曜日

FMトランスミッタ: FM変調器(1)

(1)あらまし
 FM変調器は音声信号を電波に乗せるFMトランスミッタの心臓部です。従来はVCO(Voltage Controlled Oscillator; 電圧制御発振器)に与えられる制御電圧に音声信号を加えFM変調を行うアナログ式が主流でしたが、最近ではNCO(Numerically Controlled Oscillator; 数値制御発振器)を利用してデジタル処理でFM波を生成する方法も使われています。
 デジタル処理なら正確無比な変調を行うことができ、アナログ式の課題であった変調直線性や安定度などは一挙解決するはずでしたが、問題はそれだけではありません。NCOを正しく実現するには、様々な技法や幅広い知識が要求されます。正直わからないところだらけですが、デバイスの進歩や開発環境の充実等により個人の趣味ベースであっても以前とは比較にならないほど「デジタル処理」に親しみやすい状況になりつつあるように感じています。

 なお、勉強しながら記事を書いているので、間違えなどお気付きの点があればご指摘頂くとありがたいです。


(2)デジタルFM変調器
 NCOにはDDS(Direct Digital Synthesizer)が広く使われています。専用ICとしては、Analog Device社が多くの製品を製造しています。特にAD9851は180MHzのクロックレートで動作し10ビットD/Aコンバータまでも内蔵していて早くからローコストで入手できたこともありアマチュア無線での自作例も多いようです。
 DDSが生成する周波数は、周波数設定レジスタに与えるデータにより決めることができるので、このデータを音声信号に応じて逐次適切に変更するだけで、FM変調を行うことができます。



DDSを使ったFM変調
DDSの周波数設定データを音声データで変化させればFM変調をかけられる

2009年7月12日日曜日

FMトランスミッタ: ステレオ変調器(2)

3.ステレオセパレーション

 分離度とも呼ばれますが、受信機ではメインチャンネルとサブチャンネルの信号の和と差を取って左右の信号を分離しますから、トランスミッタではメインチャンネルとサブチャンネルの間のレベルと位相をきっちりと合わせておく必要があります。これは、ステレオ変調器に限らず、その後に接続されるFM変調器や高周波フィルタでレベル差や位相差があると特性が劣化することになります。

 特に、サブチャンネルはメインチャンネルよりも高い周波数帯域を使用しているので、その後の伝送路でメインチャンネルと比較して振幅が下がってしまったり位相がずれるなどの影響を受ける可能性が高くなります。その場合のサブチャンネルの波形を示します。





サブチャンネル信号波形(1)
振幅、位相のずれがない場合
(Lチャンネルのみ信号あり)










サブチャンネル信号波形(2)
振幅70%、位相ズレなし
(Lチャンネルのみ信号あり)












サブチャンネル信号波形(3)
振幅誤差なし、位相45度遅れ
(Lチャンネルのみ信号あり)








 次に、サブチャンネルに振幅や位相ズレが起きたときのセパレーションのグラフを示します。




ステレオセパレーション(1)













 さらに高いセパレーションが必要な場合のグラフを示します。仮に高級チューナが謳う50dBのセパレーションを確保するには、位相ズレはもちろん0.05dBものレベル差までしか許容されないことになり、シビアな数値に思えます。




ステレオセパレーション(2)

2009年7月8日水曜日

FMトランスミッタ: ステレオ変調器(1)

1.ステレオ変調信号
 ステレオ変調信号(ステレオコンポジット信号)は、メインチャンネル信号、サブチャンネル信号、パイロット信号から成り立っています。

  • メインチャンネル信号(M)
左信号(L)と右信号(R)の和。
    L+R
  • サブチャンネル信号(S)
左信号と右信号の差信号でステレオサブキャリア(38kHz)で平衡変調。
    (L-R) sin ωs t
  • パイロット信号(P)
ステレオパイロット信号(19kHz)。レベルは10%変調相当レベル。
    P sin ωp t

  • コンポジット信号(C)
C = (L+R) + (L-R) sin ωs t + P sin ωp t




ステレオ変調器 ブロック図










 このコンポジット信号のスペクトルイメージは次の通りです。メインチャンネルの最大レベルは変調度90%相当。サブチャンネルも同様ですが、和・差の関係から、メインチャンネルとサブチャンネルの合計が90%を越えることはありません。パイロット信号は10%相当で一定レベルです。




コンポジット信号のスペクトルイメージ








2.ステレオ変調信号波形
 エクセルで作成したステレオ変調信号波形例を示します。
 まず音声信号の振幅は左右それぞれ最大レベル、すなわち45%変調相当レベルを想定しています。グラフ上では振幅0.45としています。Lチャンネルの信号周波数は1kHz、Rチャンネルは2kHzです。このほか38kHzのサブキャリア信号、19kHzのパイロット信号も示しています。パイロット信号のレベルは10%変調相当としています。




ステレオ変調信号波形(1)
Lチャンネル: 45%変調相当、1kHz
Rチャンネル: 45%変調相当、2kHz
38kHzサブキャリア信号
19kHzパイロット信号、10%変調相当





 次は、サブチャンネル信号波形です。L-R信号に従って、38kHzサブキャリア信号の振幅と極性が変化していることがわかります。




ステレオ変調信号波形(2)
サブチャンネル信号








 メインチャンネルとサブチャンネル信号を合成した波形です。パイロット信号を含まないステレオコンポジット信号です。L+R信号を中心にサブチャンネル信号を重ね合わせた波形となっています。




ステレオ変調信号波形(3)
メインチャンネルと
サブチャンネル信号の合成







 (3)と同じ信号ですが、左右の信号を2倍にした波形をプロットしたところです。
メインチャンネルとサブチャンネル信号の合成波のエンベロープ(包絡線)は、左右の信号そのものであることがわかります。言い方を変えると、左右の信号の間を38kHzのサブキャリアで塗りつぶしたような波形になっています。




ステレオ変調信号波形(4)









 最後にステレオコンポジット信号です。パイロット信号を含むので波形がくずれてしまい、わかりにくいですね。




ステレオ変調信号波形(5)









2009年7月4日土曜日

FMトランスミッタ: プリエンファシス(4)

7.作成したプリエンファシスの評価
 例によってWaveSpectraで特性を測定します。先のローパスフィルタと同様、FPGAにはオーディオCODECを接続してあるので、USBオーディオを介してループバックテストを行います。




プリエンファシスの周波数特性
0-24kHz、5dB/div







 妥当な特性に見えます。20kHz以上で下がっているのは、USBオーディオの制限によるものです。
 このグラフからは、詳細にレベルを読み取ることが出来ませんので、いくつかのポイントで正弦波を入力して、プリエンファシスをオン・オフ(スルー)することでレベル差を測ります。これもWaveSpectraの測定機能を使います。 



正弦波入力時のスペクトル
測定機能を使いレベル測定







 プリエンファシスにより高音域でA/D、D/Aコンバータ系に起因するノイズフロアが持ち上がって見えます。
 さて、いくつかの周波数を選定して詳細に測定したデータを示します。実測値はプリエンファシスを使用した場合と、スルーにした場合を切り替えて比較したのでPC接続のUSBオーディオとデジタルフィルタに接続しているオーディオコーデックの周波数特性には影響を受けないことになります。




周波数特性実測値
1kHz基準











 黄色のセルが実測した周波数特性で1kHzを基準にしています。水色のセルは理論値、というより設計値ですね。実測値と理論値はよく一致していることがわかります。また、1kHzにおける利得はプリエンファシス使用時とスルーとで0.1dB以下の差なのでこれも設計通りと言えます。測定系の誤差はもちろん演算語長に起因する計算誤差もそれなりにあると想定していたので、正直なところここまで理論値とよく一致するとは予想外でした。

2009年7月3日金曜日

FMトランスミッタ: プリエンファシス(3)

5.デジタルフィルタ係数の検討

 今回作成したプリエンファシスの私の設計方針としては、理想プリエンファシス曲線からの偏差を0.5dB以内にすることと1kHzで入出力関係を1:1、すなわち利得を0dBにするというものです。このフィルタで、1kHzの通過利得はかなり小さくなってしまうので、通過利得を0dBとするために調整(下図G)する必要があります。




 作成したプリエンファシスのブロック図








 このブロック図の係数k、b、Gの3つを導出するため理想プリエンファシス特性との偏差のグラフを作成し、それらが最小になるよう3つの係数をカットアンドトライで決定しました。とはいえ、3つのパラメータのうち周波数特性そのものに影響するのは2つしかないうえ、理想値との偏差をエクセルのmaxやmin関数で表示させながら作業したのでそれほど難しくありませんでした。

 グラフ作成には、エクセルを使います。たとえば、10Hzから100kHzまでを任意の間隔で振幅を計算します。振幅は、対数を取ってdB表記にすると見やすいです。

 理想値との偏差は、kを1に近づけるほど小さくなる傾向のようですが、そうすると1kHzでの減衰量が増える傾向になります。FPGAでは24ビットの固定小数点演算を想定しており音声データのビット落ちが心配でしたが適当なところで妥当な特性が得られたのでそれ以上は深追いしませんでした。

 今回の設計値(fs=152ksps)
  k 0.75
  b 0.04541
  G 20.875





理想プリエンファシス特性との偏差
10Hz~15kHzで約±0.3dB(1kHz基準)










6.FPGAへの実装 ステートマシンを組んで、フィルタのブロック図通りレジスタへの足し算引き算を繰り返すだけですが、そのまま実現するには、k, 1-k, 1+b, Gの4つの乗算操作が必要になります。これを左右2チャンネル分なら都合8組の乗算が必要でハードウエアのコストが増えてしまいます。
 しかし、今回の製作ではプリエンファシス処理のサンプルレートは192kHz、システムクロックは38.912MHzと1サンプルの処理に256クロックもの時間があります。さらに係数そのものは一定なので乗算する2進数の係数をビット毎に分解して、そのビットとの乗算に相当するビットシフトと加算を繰り返しり乗算と等価な演算を行いました。

 先ほどの係数を例にとり、2進数に変換すると・・・
  k 0.750.11
  b 0.045410.00001011101
  G 20.87510100.111

 ここで0.11との乗算は、2進数で1ビット右シフトと2ビット右シフトの和と同じですので、乗算器を使わずとも2回の加算で同じ結果が得られます。

2009年7月1日水曜日

FMトランスミッタ: プリエンファシス(2)

4.デジタルフィルタによる実装
(1)移動平均型LPF

 プリエンファシス回路は抵抗とコンデンサの組み合わせで実現できているわけですから、これをデジタル処理するにはIIRフィルタで実現できるんだろう、と想像はできますが何をどうすればよいのかまったくわかりません。とっかかりがなく途方に暮れているとき、師匠(勝手にそう呼ばせて頂いてます)から『「移動平均型」のフィルタでサンプリング周波数がある程度高ければ、CRの1次の特性、50μsとか75μsのカーブにうまく合います。というコメントとともに資料が届きました。


 移動平均型LPF(1)
 ブロック図。IIRフィルタそのものです。
 Z-1は1サンプル遅延を示しています。





 移動平均型LPF(2)
 伝達関数




(2)移動平均型HPF

 『LPFの出力と入力の差をフィルタの出力とすれば、LPFの通過帯域を遮断域とするHPFとなる』。明快な説明です。妙に納得しました。



 移動平均型HPF(1)
 ブロック図








 移動平均型HPF(2)
 伝達関数



(3)移動平均型LPF, HPFの周波数特性




周波数特性











 たしかに、HPFの遮断域のカーブは、プリエンファシスのカーブにもよく似ています。しかし、音声の中~低域の周波数はHPFの遮断域真っ直中。カットされてしまいます。そこで、図のように加える入力のレベルにゲタを履かせ、わずかに持ち上げてやればプリエンファシス・カーブに近づきそうに思えます。




 移動平均型HPF(3)
 加える入力を持ち上げてみる "b"







 移動平均型HPF(4)
 伝達関数は当然 "b" を重ね合わせたものになります




 次に、このフィルタの周波数特性を調べてみます。参考書(古い本ですが、比較的わかりやすいように思えます。)によると、周波数応答はシステムを表す伝達関数の z に を代入せよとあります。
 そして、下式を用いてH(ω)の実部と虚部を求め、H(ω)の絶対値を計算するそうです。





 先ほどの式に、これを代入してみます。










 ωは、角周波数で周波数[Hz]に2πを掛けたもの。Tはサンプリング周期[sec]です。この式を変形してゆき、実部と虚部に分けてH(ω)の絶対値を取れば、周波数毎の振幅特性を計算できます。