2021年3月8日月曜日

2021/03/08 Amateur Radio Transceiver Made by Software Engineer #8

2021/03/08 softwareエンジニアがつくるtrx #8
Unfortunately this text is in Japanese only.
ハード関連は課題を残しつつも一応理論通り?に信号も出たので本丸へ進む。

SSB信号の生成だ!コンピュータ関連の制御では0/1のデジタル信号が主で、波形の鈍りやオーバーシュートをオシロで観測する事はあっても波形そのものに意味はあまりなく、初期の音響カップラー(電話の受話器を置いて音声拾うヤツ、懐かしい)・データモデムやFAXのFSKくらいしかアナログ信号には馴染みがない。かつてU.S.Roboticsがファームウェアの書き換えにより、同じハードウェアで別の高速通信プロトコルに対応できるという事で、日本では無名だった同社のモデムを購入した記憶がある。現在ではネットワーク経由でバージョンアップは当たり前だが、現在の [ソフトウェア無線(SDR, Software-defined radio)] も、この時のアプローチと何ら変わってはいない。
うまく設計すればSSB、FM、AM、CW(免許ないですが)お馴染みの電波形式はもちろん、 狭帯域でライセンス・フリーな [FreeDV] 、マイク端子と同じで他メーカーとは互換性がなく通信できない不毛な仕様のIcomのD-STAR、八重洲無線のC4FM、アルインコや海外の方式など、仕様が公開されている方式をすべて実装できるかもしれないし。

能書きはこの位にして実装だが、ハード以上に課題がある。そう、無線工学=数学です!
幸いな事に高周波のプロ、かつアマチュア無線家らしい方が [Tj lab] という企業にて情報公開されてて求めている解はすべてここにあるので、NETで英文の資料 漁って読む必要はなく日本語は分かるが繰り出される呪文or宇宙語(=数式)が全く理解不能💦
過去の不勉強を嘆いたところで事態は好転しないため今から仕切り直しで...といきたいところですが、数式の理解はリタイヤ後のボケ防止にとって置くことにして先に進もう。
〇 復調関連 リンク [Tj lab]
AF PSNの実験・製作サイトを見ていると、アナログ実装では4種類位ある事、デジタル方式のキーワードはフィルターの畳み込み演算かヒルベルト変換。上記サイトの解説では見方の違いで本質は一緒みたい。アナログ方式のオールパスフィルターというのが、音声全域を90度移相するヒルベルト変換に似てる気がするがサッパリ分からん💦
バカが考えても何も生み出さないので、取り合えず手を動かそう。
 
先ず参考にしたのは数式を書かずに説明されている [WATLAB] さんのサイト。この中で [Pythonでヒルベルト変換!時間波形の包絡線を求める方法] というコンテンツ。変換の説明には現信号を (フーリエ変換)→(正周波数を2倍 / 負周波数域をゼロに)→(逆フーリエ変換) となっている。30年位前から長年格闘する度に敗退しているFFTがまた出現。今回は戦いは避けて動作優先で。最近ではどの言語でもarduinoライブラリや表計算ソフトでさえ使用可能で自分でコード書くより高速・高信頼だけどマイコン実装の機種選択性を考えて自前でやってみる事にする。ただ数式も理論も分からないからコード書けないので [4章:高速フーリエ変換プログラムのVBAソース] からコードを拝借して表計算ソフトで確かめる事からスタート。
 
できたので早速確認。
5Hzのsin()波を生成。
 
FFT実行。実数部と虚数部の要素5にデータ出現。右側は負の周波数...って誰?💦
複素共役(どなたですか?)らしいが💦
 
言われた通り、実数部と虚数部データを2倍して負周波数...グラフの右半分をゼロクリアしましたよ。
iFFT実行すると...スゲー(当たり前?)
実数部は元通り、虚数部は90度進んだcos()波になってる。これは単一周波数だが。

今度は8Hzのsin()波で。
音声周波数全域が全て90度移相しないといけないって書いてあったので。だからこんなややこしい計算しないといけないのね。まぁ計算するのはコンピュータだから良いケド。
 
5Hzと同じ様にFFT。
要素 8にデータ出現。
実数部と虚数部のどちらも
 データx2
 負の周波数領域←0

iFFT。
周波数が変わってもちゃんと90度移相してる。良くできました♪
 
 
 
 
 
 
 
 
 
90度移相する際、元の振幅も維持しないといけない縛り付きらしいので複合波形でテスト。
sin(5Hz) + 1/2cos(15Hz)
±1になる様に1.5で割って正規化。

FFT。
実数部の15、虚数部の5 にデータ出現。今回は15Hzが実数部の正の数になってる。cos()にしたから?

実数部と虚数部のどちらも
 データx2
 負の周波数領域←0

iFFT。
実数部は元通り。
虚数部が90度移相波形のハズだが。

sin(5Hz)と1/2cos(15Hz)をそれぞれ90度移相した後に足し合わせた波形が最下段。足し合わせてから90度移相した波形とドンピシャ!!
バカなりに考えながら手を動かしたので疲れた。まぁ、理論の理解はともかく「動くモノ」は作れそうな予感♪ ...to be continued

0 件のコメント:

コメントを投稿