SSBに引き続き、AMとFMの変調実験をしてみました。SSBに比べれば簡単な処理で実現できてしまいます。
AM変調は実装してあったのですが、符号の扱いに間違いがありました。それを直して振幅の調整をしたら、正常に動作するようになりました。写真は51.5MHzのキャリアに1kHzを100%変調の様子です。スペクトラムは非常に綺麗です。本来はデジタル変調の隣接チャネル妨害などの大変要件が厳しい用途に使うはずのチップなので、こんなアナログ変調には勿体ない贅沢な使い方です。
ついでなのでDSB (Double Side Band)も実装しました。AMと比べるとDC分を足さないだけです。キャリアが無くなり、名前の通り両側の側波帯のみの信号です。スペクトル的にはツートーンなので、送信機調整の信号源に使えそうです。
FM変調です。最初の段階では、ベクトルの乗算でNCO信号生成するという面倒なことをしていたのですが、なんのことはないFM変調は入力信号の累積を位相とすれば良いだけなので、後は位相から普通にsin/cosを生成するだけで、綺麗な信号を得ることができます。現状ではプリエンファシスをさぼっています。三角関数はテーブル引きと補間で求め、全くループを使わないので速いです。オシロで見てもエンベロープは一定なので、面白みはありません。
さて、実際の音声信号で変調してみました。音源としてPCで再生した楽曲を、アナログでボードに入力し、ADCで取り込んだ信号を、Nucleoでソフトウェアで変調処理し、AD9857に送り込んで51.5MHzのキャリアに乗せています。ADCはI2SコーデックのTLV320AIC3204を使っています。
最初はPCのスピーカで再生、その後ジャックを差すと切り換わり、PCからは音声が出なくなります。Nucleoで変調され、それをハンディトランシーバで受けています。諸事情ありますので、エアには出さず、20dBのATT2段経由でケーブル直結しています。変調モードはPCから切り替えています。
デモ動画です。音量が小さいのはご勘弁ください。
以上のような変調方式では、AMもDSBもFMも、サンプルごとにはループ無しの固定時間で変調計算できますので、ほとんどMPUの負荷に差はありません。負荷のほとんどがインターポーレーションで占められていますが、50%程度のサイクル消費です。どちらかというと、メモリが足りていません。Nucleoで使用しているSTM32F401REは、SRAMが40kByte程度しかなく、現在48Mpbs程度のデータを生成していることを考えると、上限に近いです。既に90%以上を消費しています。実質的にこれ以上バッファは有意には増やせません。
あと、やりたいとおもっているのがFM放送相当のWB-FMのステレオ信号の生成です。FMステレオの変調は、復調に比べれば簡単なはずですが、面倒なのが、広帯域な150kHz幅の変調を行うには、48kHzや192kHzではレートが不足しているので、インターポーレーションスキームの変更が必要なことです。気合いが湧いてきたらやってみたいと思います。
というわけで、トラディショナルな変調方式は十分可能なことが確認できました。無線用には帯域の調整などが必要ですが、当面必要ないのと、あとはやればできるってだけの話なのでとりあえずこのままにしておきます。
基板と部品は若干手持ちがあります。「強い」ご希望があれば頒布を検討します。
以後は「電波をハック」ネタとして、ちょっと変わったことを試してみたいと考えています。
リファレンス
-
使用音源「東京事変 電波通信」https://www.youtube.com/watch?v=NFbefgYJoW0
-
ソースはmbedで開示中 https://developer.mbed.org/users/edy555/code/Nucleo_IQDDS/
-
Analog Devices AD9857 https://www.analog.com/jp/rfif-components/direct-digital-synthesis-dds/ad9857/products/product.html
-
Texas Instruments TLV320AIC3204 https://www.tij.co.jp/product/jp/tlv320aic3204
-
STMicoelectronics STM32F401RE https://www.st.com/web/catalog/tools/FM116/SC959/SS1532/LN1847